Update: A very recent update stated that Byleth is available right now, although as you may have found out for yourselves we’re still waiting for the fighter to drop. In our excitement, we pushed a button early – our apologies! We’ll be sure to update again when the fighter is actually available.
If all goes according to plan (and it’s worth noting that it might not), then Byleth should be launching today (January 28th at 6PM PDT) in North America and tomorrow (January 29th at 3AM CEST) in Europe. Pre-orders for the Fighters Pass Vol.2 should also be going live at the same time.
The announcement came during today’s livestream hosted by series director, Masahiro Sakurai, revealing that both the male and female versions of the character will star. They’ll be available to buy as Challenger Pack 5 (or receive if you already own the Fighters Pass) on 28th January.
Both the male and female versions received their own, iconic ‘challenger approaches’ style screen during the presentation:
Did you expect another Fire Emblem character to be Fighter No. 5? Are you excited to check Byleth out for yourself in the game? Share your thoughts with us below.
We know you’re busy and might miss out on all the exciting things we’re talking about on Xbox Wire every week. If you’ve got a few minutes, we can help remedy that. We’ve pared down the past week’s news into one easy-to-digest article for all things Xbox! Or, if you’d rather watch than read, you can feast your eyes on our weekly video show above. Be sure to come back every Friday to find out what’s happening This Week on Xbox!
Sci-Fi Twin-Stick Shooter Hovership Havoc is Available Now on Xbox One As developer and designer,I started working on Hovership Havoc almost four years ago. It was originally just a mini-game in a much larger project I was working on at the time. I decided to scale things down and focus on one of my mini-games which was a top-down space shooter… Read more
Feeling in Lumini: How the Flow of a Swarm Creates Experiences On January 22, Lumini will launch on Xbox One. Lumini is a relaxing flow-adventure game that we initially released back in 2015 for PC. It is a game where you experience friendship, loss, sacrifice and joy in a journey where it is your responsibility to help a swarm of previously… Read more
CES 2020: PC Gaming Experiences Designed for Everyone This year’s Consumer Electronics Show (CES) in Las Vegas kicked off 2020 with a look at what’s in store for a variety of players this year, with exciting innovations for PC gaming and Microsoft’s device partners announcing some of the best upcoming hardware and software in the industry… Read more
Bleeding Edge Blasts into Retail Stores This March We’re edging closer to fans teaming up and causing chaos in Bleeding Edge, our new 4v4 brawler! Today we’re thrilled to announce that Bleeding Edge will also be available on shelves at launch on March 24 at select retailers globally on Xbox One, with the retail version debuting… Read more
Next Week on Xbox: New Games for January 21 to 24 Welcome to Next Week on Xbox, where we cover all the new games coming soon to Xbox One! Every week the team at Xbox aims to deliver quality gaming content for you to enjoy on your favorite gaming console. To find out what’s coming soon to Xbox One, read on below… Read more
Schell Games is looking for a skilled online community marketing specialist to build and grow communities for our original games, as well as our corporate channels. This tech-savvy individual possesses outstanding communication and organizational skills. They will be friendly, curious, and adaptive, and enjoy working in a team-driven environment. The ideal candidate will have a passion for games and understand the complexities of various game and social communities.
Ideally, the candidate should be able to act as the voice of the brand, with the goal of building lasting, vibrant online communities that are engaged and responsive.
We’re looking for someone excited about cross-disciplined collaboration!
Areas of Responsibility:
Conceive, develop, and implement campaigns that align with overall strategic marketing efforts that build and nurture online communities
Plan and implement promotions, events, competitions, and other programs to grow the communities and boost brand awareness
Manage game-related social media platforms
Coordinate and consolidate player feedback, isolating key issues to be brought to the development and marketing teams
Serve as an advocate inside of Schell Games for the community
Moderate online/offline conversations with the community
Coordinate with Marketing and Development Teams to ensure brand consistency
Communicate important messages to the community through social media and long-form mediums (blog posts, forums)
Find and cultivate important community members, and help support their efforts to grow a healthy and vibrant game community
Respond to comments and customer queries in a timely manner
Support event and trade show activities
Use Google Analytics and other measurement tools to report on the success of campaigns, while continually finding ways to improve on those metrics through testing and new initiatives
Whether you’re just starting out, looking for something new, or just seeing what’s out there, the Gamasutra Job Board is the place where game developers move ahead in their careers.
Gamasutra’s Job Board is the most diverse, most active, and most established board of its kind in the video game industry, serving companies of all sizes, from indie to triple-A.
Game consoles excluded from tariffs on Chinese imports ‘until further notice’
Video game consoles won’t be directly impacted by tariffs imposed on imports from China for the time being, a more concrete decision that comes after consoles were granted temporary exemption in the later months of 2019.
The Electronic Software Association confirmed as much to Polygon over email, noting that the United States Trade Representative “has suspended the tariffs on consoles until further notice.”
The ESA statement backs up news shared by the USTR (via Reuters) about the first phase of a trade deal between the U.S. and China amid ongoing trade negotiations. In that release, it was mentioned that categories of goods that had tariffs delayed from September to mid-December, including game consoles, laptop computers, and cellphones, would instead have those tariffs suspended indefinitely.
Console makers Nintendo, Microsoft, and Sony have openly spoken against those potential tariffs for months before the delay and no indefinate suspension, warning in an earlier open letter that the damage would have an “enormous impact and undue economic harm[…]on the entire video game ecosystem,” including both consumers and the thousands that count themselves among the game industry.
From the outset, Respawn showed it would be doing things a little differently with Apex Legends just by how it released the game. Unlike other triple-A games that launch after weeks or months of preview events and trailers, Apex Legends was announced and released on the same day. It was a bold strategy--one that could have doomed the Titanfall spin-off from the start given that fans were clamoring for Titanfall 3, not another battle royale game. But the game didn't die out, and Respawn's willingness to continually advertise Apex Legends with unorthodox methods has allowed the battle royale to thrive in an industry that is, now more than ever, always battling for your time.
In preparation for Season 4: Assimilation and the one-year anniversary of Apex Legends, Respawn utilized another risky strategy: killing off a character before he even had a chance to appear in the game. The move concludes a months-long cat-and-mouse game between Respawn and the Apex Legends' community, one that has ultimately done a stellar job at selling the story behind the game.
If you haven't been keeping up with Apex Legends over the past few months, here's a refresher. Revenant has been a name that's been circulating in the community since 2019 when dataminers discovered the name in the game's files. It's been theorized for a while that the character would be added as a playable legend--something that seemed all but confirmed when an Apex Legends developer released, seemingly on accident, an image that featured the character in an early concept of Octane's Gauntlet on Kings Canyon. When pressed by news outlets for further details or confirmation on Revenant's existence, Respawn remained coy on the matter.
Revenant's inclusion in the game seemed even more certain during Season 3: Meltdown, though, specifically during the Halloween-themed Fight or Fright event, which saw Pathfinder accidentally wandering into a different dimension, the setting of the Shadowfall mode. The announcer and host of the mode was a robotic entity whose overall shape and voice lines matched that of the datamined Revenant files. Given Respawn's track record of teasing legends ahead of their release through in-game hints, it seemed likely Revenant would be Season 4's new character.
Then Respawn dropped a bombshell during its Season 4 Reveal Devstream: the season would add ex-MMA fighter Forge to Apex Legends, not Revenant. To lend credence to the reveal, dataminers found files for Forge in Apex Legends long before the announcement--some dating back nearly as far as the ones for Revenant. For all intents and purposes, it seemed like fans had just gotten the prediction wrong. Several members of the community then assumed that Forge would come to Apex Legends first, to be followed by Revenant later--maybe within the same season or perhaps at the start of Season 5. The game itself seemed to further support this theory, with in-game assets changing to reflect the arrival of Forge and only minor details hinting at Revenant's further involvement. Respawn followed-up these map changes with the announcement that an interview featuring Forge would debut on January 27. The interview would be held in the Sorting Factory on World's Edge, and a news station set even appeared in the in-game location ahead of the video.
This was all revealed to be a smokescreen, however. During the interview, Revenant appeared and stabbed Forge in the back. In the game, the interview set was trashed and Forge's chair was replaced by a death box that contains his medallion (which is unlocked as a gun charm if you loot it). After promoting Forge for nearly a week, Respawn just killed the character off--his reveal and inclusion in Apex Legends designed for a plot twist and shocking reveal of a completely different character.
Telling their dedicated playerbase that they're going to do one thing when they actually plan on flipping the script is not a normal strategy for video game developers to take. Blizzard and Ubisoft do not announce new Overwatch Heroes or Rainbow Six Siege Operators only to then turn around and kill said characters before players even have a chance to try them. Tricking your playerbase and getting them hyped for something that never actually arrives in hopes the surprise twist will draw even greater interest can backfire if players think that you're now delivering something that's less than what you originally announced.
But it's because this strategy is so unorthodox that I believe it's going to work out for Respawn and Apex Legends. Apex Legends launched into a battle royale genre that was already beginning to feel a little stale and a games-as-a-service market that's been feeling overstuffed. However, Respawn's game stands out because of how it's structured around its narrative and not the other way around. Even without a single-player campaign, Apex Legends has a story, and Respawn is willing to subvert the expectations of how to market a games-as-a-service title in order to tell it. The developer has a narrative vision, and it's sticking to it.
In a traditional single-player game, Forge's story would likely transpire over several cutscenes and in-game conversations, only for his murder to catch players by surprise. Respawn has managed to capture this shock value by selling this narrative through a created Twitter account that acts as a news station for events that occur in the Titanfall and Apex Legends universe. So, of course, Forge would be announced as the new character with no mention of Revenant--news reporters don't know athletes are going to be murdered ahead of time, they report the news as it happens. This means Respawn (which, again, is roleplaying as a news station entity) is as surprised as the rest of us when it comes to the narrative it's building. Respawn is acting as if it's not an all-knowing overseer of its world, allowing the developer to have a bit more fun with us, its audience, by leading us in one direction before surprising us with something else entirely. It's a nice bit of meta storytelling in a genre that traditionally hasn't told stories outside of cinematic trailers.
New details are emerging as 3 Hammond Robotics employees failed to show for work today. While little is known about the presumed missing employees, the same (now corrupted) data file was found at all 3 scenes.
And all that being said, it's still not a foregone conclusion that Respawn has finished tricking us yet and that Forge is definitely out for good. The gun charm in Forge's death box describes the man as "often imitated but never defeated," and the Forge in the interview has a scar on his eyebrow while all previous images have had no scar--which could imply that the Forge that Revenant killed is just a body double. There is still no definitive proof that Forge is dead and that Revenant will be the new playable legend. With the style of storytelling it's using for Apex Legends, Respawn has put its fans into a position where we'll be guessing right up until Season 4 begins to see which character actually gets added.
Posted by: xSicKxBot - 01-29-2020, 10:42 AM - Forum: Python
- No Replies
Python re.findall() – Everything You Need to Know
When I first learned about regular expressions, I didn’t really appreciate their power. But there’s a reason regular expressions have survived seven decades of technological disruption: coders who understand regular expressions have a massive advantage when working with textual data. They can write in a single line of code what takes others dozens!
This article is all about the findall() method of Python’s re library. The findall() method is the most basic way of using regular expressions in Python: If you want to master them, start here!
So how does the re.findall() method work? Let’s study the specification.
How Does the findall() Method Work in Python?
The re.findall(pattern, string) method finds all occurrences of the pattern in the string and returns a list of all matching substrings.
Specification:
re.findall(pattern, string, flags=0)
The re.findall() method has up to three arguments.
pattern: the regular expression pattern that you want to match.
string: the string which you want to search for the pattern.
We will have a look at each of them in more detail.
Return Value:
The re.findall() method returns a list of strings. Each string element is a matching substring of the string argument.
Let’s check out a few examples!
Examples re.findall()
First, you import the re module and create the text string to be searched for the regex patterns:
import re text = ''' Ha! let me see her: out, alas! he's cold: Her blood is settled, and her joints are stiff; Life and these lips have long been separated: Death lies on her like an untimely frost Upon the sweetest flower of all the field. '''
Let’s say, you want to search the text for the string ‘her’:
>>> re.findall('her', text)
['her', 'her', 'her']
The first argument is the pattern you look for. In our case, it’s the string ‘her’. The second argument is the text to be analyzed. You stored the multi-line string in the variable text—so you take this as the second argument. You don’t need to define the optional third argument flags of the findall() method because you’re fine with the default behavior in this case.
Also note that the findall() function returns a list of all matching substrings. In this case, this may not be too useful because we only searched for an exact string. But if we search for more complicated patterns, this may actually be very useful:
The regex ‘\\bf\w+\\b’ matches all words that start with the character ‘f’.
You may ask: why to enclose the regex with a leading and trailing ‘\\b’? This is the word boundary character that matches the empty string at the beginning or at the end of a word. You can define a word as a sequence of characters that are not whitespace characters or other delimiters such as ‘.:,?!’.
In the previous example, you need to escape the boundary character ‘\b’ again because in a Python string, the default meaning of the character sequence ‘\b’ is the backslash character.
Where to Go From Here?
This article has introduced the re.findall(pattern, string) method that attempts to match all occurrences of the regex pattern in a given string—and returns a list of all matches as strings.
Python is growing rapidly and the world is more and more divided into two classes: those who understand coding and those who don’t. The latter will have larger and larger difficulties participating in the era of massive adoption and penetration of digital content. Do you want to increase your Python skills on a daily basis without investing a lot of time?
Extract images from URL in excel with PHP using PhpSpreadsheet
Last modified on August 7th, 2019 by Vincy.
There are various ways to extract images from a given URL. PHP contains built-in functions for extracting data including the images with a URL.
This article is for PHP code to extract images from URLs existing in an excel file.
I have used PhpSpreadsheet to read the URLs from an Excel file. Then, I created cURL script to extract images from the URL.
PhpSpreadsheet library supports Excel read-write operations. It provides enormous features like formatting content, manipulating data and more. It has a rich set of built-in classes and thereby makes the development process easy.
Working with spreadsheets is a common need while handling excel data via programming. PhpSpreadsheet library reduces the developer’s effort on building applications with excel data handing.
Extracting of images from URL from an excel file will be helpful in many scenarios. Below list shows some scenarios.
To import a large volume of images into your application’s media library.
To migrate media files from one domain to another.
To restore the Excel backup images into a database.
To create a dynamic photo gallery without a database.
Advantages of PhpSpreadsheet Library
PhpSpreadsheet has many features and thereby has more advantages of using it.
It provides methods to prepare reports, charts, plans and more.
It has an option the read, write from a specified row, column and sheet of a spreadsheet document.
It is suitable for handling a large amount of data.
It helps to manage checklists, calendars, timesheets, schedules, proposal plans.
It provides security to protect spreadsheet data from editing.
It supports encryption to prevent the spreadsheet data from viewing.
Existing PHP libraries used to import-export
There are many PHP libraries available in the market support spreadsheet data handling.
PortPHP supports import-export data between Excel, CSV and database storages. It has readers, writers and converters to process data exchange and manipulation.
The Spout is a PHP library used to read write spreadsheets in an efficient way. It supports three types of spreadsheets XLS, CSV, ODS.
File structure
Below screenshot shows the file structure of this example. The ExcelImportService class file is an integral part of this example. It loads PhpSpreadsheet library and covers all the operations related to the excel image extract.
The excel_template folder contains an input Excel file with image URLs. This example code loads this file to extract images from the URL.
Instead of using this fixed excel template, you can also allow users to choose an excel file. By adding a HTML form with a file input option user can choose their excel to explore extract.
About this example
This example loads an input Excel file in an Import service class. This sample excel file will contain image URLs.
In this example, I have used PhpSpreadsheet library to read the excel data. This library method helps to get the URLs and store into an array.
Then I iterate this URL array in a loop to extract the image data. I used PHP cURL script to extract images. In a previous tutorial, we have seen how to run PHP cURL script to extract content from a remote URL.
This PHP code loads the ExcelImportService class to load and import image data from an excel.
This is the main PHP class created for this example. It handles all operations during the excel image extract.
<?php use \Phppot\ExcelImportService; require_once 'Class/ExcelImportService.php'; $excelImportService = new ExcelImportService(); $excelDataArray = $excelImportService->loadExcel(); if (! empty($excelDataArray)) { $isNewData = $excelImportService->importImages($excelDataArray); if ($isNewData) { $message = "Images extracted from excel successfully!"; } else { $message = "No new images found during the excel extract!"; } } $imageResult = $excelImportService->getAllImages(); ?>
ExcelImportService.php
This class loads the PhpSpreadsheet library. It also has the DataSource instance in the class level.
The database access request from this class uses this instance. It is for saving the extracted image path to the database.
Note:Download PhpSpreadsheet library from Github without dependencies. Then run the get the dependencies via composer by using the following command.
composer require phpoffice/phpspreadsheet
In this class, the loadExcel() function loads the input excel to read the URLs as an array. It returns this array to extract image blob via cURL request.
The extractImage() function executes the cURL script. It gets the image resource data from the remote URL read from Excel. Then it writes the file into a target as specified in this example.
After putting the extracted images into a folder, then the code saves the to the image database table. The saveImagePath() method contains the insert query and parameters to invoke DataSource insert.
<?php namespace Phppot; use \Phppot\DataSource; require 'Vendor/PhpSpreadsheet/autoload.php'; class ExcelImportService { private $ds; function __construct() { require_once __DIR__ . './DataSource.php'; $this->ds = new DataSource(); } private function isUrlExist($url) { $query = 'SELECT * FROM tbl_images where remote_url = ?'; $paramType = 's'; $paramValue = array($url); $count = $this->ds->numRows($query, $paramType, $paramValue); return $count; } private function extractImage($url) { $path = pathinfo($url); $imageTargetPath = 'uploads/' . time() . $path['basename']; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, false); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // <-- important to specify curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // <-- important to specify $resultImage = curl_exec($ch); curl_close($ch); $fp = fopen($imageTargetPath, 'wb'); fwrite($fp, $resultImage); fclose($fp); $imageInfo["image_name"] = $path['basename']; $imageInfo["image_path"] = $imageTargetPath; return $imageInfo; } private function saveImagePath($imageInfo, $remoteUrl) { $query = "INSERT INTO tbl_images (image_name,image_path, remote_url) VALUES (?, ?, ?)"; $paramType = 'sss'; $paramValue = array($imageInfo["image_name"], $imageInfo["image_path"], $remoteUrl); $this->ds->insert($query, $paramType, $paramValue); } public function loadExcel() { //create directly an object instance of the IOFactory class, and load the xlsx file $xlsFile ='Excel_Template/imageURLs.xlsx'; $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($xlsFile); //read excel data and store it into an array $excelData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true); $rowCount = count($excelData); $urlArray = array(); for($i=2;$i<$rowCount;$i++) { $url = $excelData[$i]['A']; if(!empty($url)) { $urlArray[] = $url; } } return $urlArray; } public function importImages($excelDataArray) { $isNewData = false; foreach($excelDataArray as $url) { $isUrlExist = $this->isUrlExist($url); if (empty($isUrlExist)) { $imageInfo = $this->extractImage($url); if(!empty($imageInfo)) { $this->saveImagePath($imageInfo, $url); } $isNewData = true; } } return $isNewData; } public function getAllImages() { $query = 'SELECT * FROM tbl_images'; $result = $this->ds->select($query); return $result; } }
DataSource.php
This is a common PHP class that we have used in many examples. It contains functions to execute the database operations planned for the example code. It establishes the database connection at its constructor.
Model classes used in our PHP examples load this class and instantiate it to access the database.
<?php namespace Phppot; /** * Generic datasource class for handling DB operations. * Uses MySqli and PreparedStatements. * * @version 2.3 */ class DataSource { // PHP 7.1.0 visibility modifiers are allowed for class constants. // when using above 7.1.0, declare the below constants as private const HOST = 'localhost'; const USERNAME = 'root'; const PASSWORD = ''; const DATABASENAME = 'phpsamples'; private $conn; /** * PHP implicitly takes care of cleanup for default connection types. * So no need to worry about closing the connection. * * Singletons not required in PHP as there is no * concept of shared memory. * Every object lives only for a request. * * Keeping things simple and that works! */ function __construct() { $this->conn = $this->getConnection(); } /** * If connection object is needed use this method and get access to it. * Otherwise, use the below methods for insert / update / etc. * * @return \mysqli */ public function getConnection() { $conn = new \mysqli(self::HOST, self::USERNAME, self::PASSWORD, self::DATABASENAME); if (mysqli_connect_errno()) { trigger_error("Problem with connecting to database."); } $conn->set_charset("utf8"); return $conn; } /** * To get database results * @param string $query * @param string $paramType * @param array $paramArray * @return array */ public function select($query, $paramType="", $paramArray=array()) { $stmt = $this->conn->prepare($query); if(!empty($paramType) && !empty($paramArray)) { $this->bindQueryParams($sql, $paramType, $paramArray); } $stmt->execute(); $result = $stmt->get_result(); if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $resultset[] = $row; } } if (! empty($resultset)) { return $resultset; } } /** * To insert * @param string $query * @param string $paramType * @param array $paramArray * @return int */ public function insert($query, $paramType, $paramArray) { $stmt = $this->conn->prepare($query); $this->bindQueryParams($stmt, $paramType, $paramArray); $stmt->execute(); $insertId = $stmt->insert_id; return $insertId; } /** * To execute query * @param string $query * @param string $paramType * @param array $paramArray */ public function execute($query, $paramType="", $paramArray=array()) { $stmt = $this->conn->prepare($query); if(!empty($paramType) && !empty($paramArray)) { $this->bindQueryParams($stmt, $paramType="", $paramArray=array()); } $stmt->execute(); } /** * 1. Prepares parameter binding * 2. Bind prameters to the sql statement * @param string $stmt * @param string $paramType * @param array $paramArray */ public function bindQueryParams($stmt, $paramType, $paramArray=array()) { $paramValueReference[] = & $paramType; for ($i = 0; $i < count($paramArray); $i ++) { $paramValueReference[] = & $paramArray[$i]; } call_user_func_array(array( $stmt, 'bind_param' ), $paramValueReference); } /** * To get database results * @param string $query * @param string $paramType * @param array $paramArray * @return array */ public function numRows($query, $paramType="", $paramArray=array()) { $stmt = $this->conn->prepare($query); if(!empty($paramType) && !empty($paramArray)) { $this->bindQueryParams($stmt, $paramType, $paramArray); } $stmt->execute(); $stmt->store_result(); $recordCount = $stmt->num_rows; return $recordCount; } }
Render extracted images in a gallery
This is the HTML code to display the extracted images in the UI. I embed PHP code with this HTML to display the image path from the database dynamically.
The getAllImages() method fetches image results from the database. It returns an array of images extracted from the Excel. This array data iteration helps to render images in a gallery view.
<!doctype html> <html> <head> <link rel="stylesheet" type="text/css" href="CSS/style.css"> <title>Extract Images from URL in Excel using PHPSpreadSheet with PHP</title> </head> <body> <div id="gallery"> <div id="image-container"> <h2>Extract Images from URL in Excel using PHPSpreadSheet with PHP</h2> <?php if (! empty($message)) { ?> <div id="txtresponse"><?php echo $message; ?></div> <?php } ?> <ul id="image-list"> <?php if (! empty($imageResult)) { foreach ($imageResult as $k => $v) { ?> <li><img src="<?php echo $imageResult[$k]['image_path']; ?>" class="image-thumb" alt="<?php echo $imageResult[$k]['image_name'];?>"></li> <?php } } ?> </ul> </div> </div> </body> </html>
After a successful image extract, this UI will acknowledge the user. It shows an appropriate message based on the image extract result.
If you extract an older excel that was already done, then the notification will say “No new images found”.
The following styles are used to present the extracted images in a gallery.
This SQL script is for creating the required database table in your environment. It has the create a statement of the tbl_images database table. This table is the storage the point to store the image local path.
Run this script before executing this example. You can also get the SQL script from the downloadable source code added with this article.
CREATE TABLE IF NOT EXISTS `tbl_images` ( `id` int(11) NOT NULL AUTO_INCREMENT, `image_name` varchar(50) NOT NULL, `image_path` varchar(50) NOT NULL, `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=263 ;
The screenshot below shows the image gallery output. These images are from the uploads folder of this example. This is the local location to store the extracted images from the database.
This screen shows the user acknowledgment message above the gallery view. This acknowledgment varies based on the input excel file data.
If the input excel is too older and extracted already, then the below message will notify the user.
Hope this article helps you to image extract from URLs present in excel. The example presented is the simplest way of demonstrating image extract from Excel.
Review: Warhammer 40,000: Space Wolf – The Emperor Will Not Be Pleased
You find yourself all alone on an alien planet, nothing ahead of you except filthy worshippers of the evil Chaos Gods. That would usually be fine, as you are a Space Wolf; a son of Russ, bred specifically for battle and ready to die for your cause. But this time, there are a lot of enemies, and your mission is to search for an ancient relic, so death would be in vain. Can you hold off the opposing Word Bearers long enough for your battle brothers to reinforce your position? Only time will tell…
Warhammer 40,000: Space Wolf finally landed on Switch this week after initially launching on Apple phones back in 2014, Android in 2015, and on PC in 2017. So, how does a six-year-old mobile game hold up now it has touched down on the Nintendo Switch? Not too well, to be honest. The game is a complicated mash-up of X-Com-esque turn-based tactical gameplay and a collectable card game and deck builder. However, neither of these ideas come across too well on the Switch.
The turn-based tactics draw immediate comparisons to X-Com, or, for Switch users, Mario + Rabbids Kingdom Battle. While the latter of these games proves that this genre works well on Nintendo’s console, Warhammer 40,000: Space Wolf lacks the intuitive controls to make the most of it. Character movement should be simple, but somehow the game fails to register the square you would like to move to on a regular basis.
The deckbuilding side of things is, admittedly, a neat addition which differentiates Warhammer 40,000: Space Wolf from the many other X-Com clones out there. Each character you control has their own deck of cards that they draw from each turn, dictating their available actions. Most of the cards are an array of weapons, but you’ll also find defensive shields, movement, and healing cards. Weapons are split into ranged and combat categories, with some also able to be “equipped” instead of fired as usual. This grants the character an ‘Overwatch’ ability, an incredibly handy tactical play which lets the character fire at the first enemy to move into their line of fire each turn. Weapon cards can also be repurposed to movement if you need a swift reposition.
Some weapons are going to be better than others – that much makes sense. But there is certainly a discrepancy between ranged and melee weapons. Melee weapons such as Power Fists and Thunder Hammers can do insane damage – often one-shotting opponents – but it requires such a large amount of resource to position your Terminator within striking range that they are barely ever worthwhile. Shooting an enemy twice will do a similar amount of damage and won’t leave you in a vulnerable and easily-outmanoeuvred position. Furthermore, while the ranged weapons offer cool animations and epic sound effects, a crippling blow from a Thunder Hammer is accompanied by a quiet and unsatisfying squelch, like a tiny wet flannel hitting a tiled floor.
The actual deckbuilding is about as user-friendly as the in-battle movement – that is to say, not very. A tiny list on your small Switch screen shows your current deck, and the larger part of your screen is taken up by available cards. There is no guidance as to a good deck, and trial-and-error takes a long time. Additionally, you have three decks to control, one for each class of character – Scout, Power Armoured Marine and Terminator. The characters offer interesting tactical decisions, but only after you spend a sizeable amount of time building their decks.
You can unlock new cards via gameplay, or “forge” them using in-game currency. The fact that ‘gacha’ mechanics are not on the Switch is positive for sure, but our experience in the Forge section of the game still wasn’t great. We spent 20,000 coins on 20 “extreme” cards – supposedly with a favourable chance of crafting a coveted and powerful Legendary card – only to receive Common duplicates. We ended up with 18 Common and 2 Uncommon cards from this expenditure, realising that if we had bought Simple card packs instead, we would have had six times as many cards, and likely the same rarity. Perhaps we were simply unlucky, but it was incredibly frustrating.
The campaign itself has very little story to it, sending you on seemingly unrelated missions to “secure a location” or “meet a Rune Priest”. Every mission offers swathes of Chaos Space Marines to defeat, who have the same weapons as your Space Marines but inexplicably do a fraction of the damage. This would work with Cultists or lowly worshippers, but the Word Bearers wear the exact same armour as your Space Wolves, so it comes across as a rather strange imbalance. Alternatively, defeating waves of enemies in ‘Challenge’ mode is not only quite boring but also crashed the game for us on two occasions.
Conclusion
There’s an interesting and fun game buried somewhere deep beneath the surface of Warhammer 40,000: Space Wolf, but you’ll need to crack the tough, unintuitive armour that protects the core mechanics before you can find it. Unfortunately, you don’t have the privilege of a Thunder Hammer at your disposal – all you have is time, and you’ll need a lot of it to get any real enjoyment out of this rather disappointing title.
It’s happened to everyone at one time or another. Whether due to changing life circumstances or sheer curiosity, most of us will have looked at our video game collection and wondered how much hard cash we could get for it. We’ve interviewed serious collectors in the past and gazed longingly at row upon row of rare treasures, but the majority of us gamers make do with a much smaller selection of carts stashed in a drawer or lined up in a Billy bookcase. Most of us don’t have mint sealed copies of Japanese curios or one-of-a-kind prototype hardware, either. Nope, our well-loved copy of Super Mario Bros. 3 wouldn’t fetch much, not that we’d ever part with it.
You see it on eBay… the seller has simply multiplied the number of games they’ve got by $60.
Still, sometimes the bug to downsize and sell off bits and pieces takes us. This writer, for example, decided to it was time to sell a couple of dusty games and free up some shelf space. Reasoning that updated Switch versions were probably incoming, it seemed a waste to keep Killer7 for GameCube and the Metroid Prime Trilogy disc for Wii simply for the sake of it, and so on eBay they went.
Obviously, they were snapped up and three days later they were winging their way to new homes and I was left with a minor cash injection and two DVD cases’ worth of extra space on the shelf. My newfound funds were quickly swallowed by a bill or petrol for the car or some other mundane thing I didn’t keep track of and I instantly wondered if I’d made the right decision.
Ultimately I have no regrets – I’m still convinced we’ll see them on Switch before long – although I’m glad I didn’t follow that original train of thought further and auction my NES off as well. Still, with retro games getting more valuable by the year and digital distribution meaning there are usually multiple other ways to play those games, the desire to cash out can sometimes be attractive. While video games remain one of the best value forms of entertainment available, it’s easy to look at a collection and imagine dollar signs corresponding to the thousands you’ve spent on them over the years.
You see it on eBay; giant collections listed for improbably high sums, and although the lots contain the odd high-value gem, it appears that the seller has simply multiplied the number of games they’ve got by $60. For the most part this is ludicrously wishful thinking. You wouldn’t expect the same if you were selling your DVD collection, would you? It seems delusional to rely on attracting a single collector whale to swoop in for your retro game stash with a five or six-figure cheque.
Then again, crazy things do happen. A mint copy of Super Mario Bros. sold for a record-breaking $100,150. The upcoming sale of the Nintendo PlayStation is expected to fetch well over $1 million. Entire console libraries are sold for thousands to collectors looking to pick up every game on a system without the fuss of hunting them down individually. Whales do exist, although personally we don’t have the bait to catch them. So, what treasures do we have on our shelf?
Not much, it turns out. At the time of writing Computer Exchange – a Europe-wide retailer that specialises in secondhand media – would pay us £812 for a mint PAL copy ofSnowboard Kids 2 thanks to its rarity. A shame, then, that we don’t own that one. Why oh why didn’t we pick up the sequel to one of our favourite N64 games? Our mint copy of the original would fetch a measly £29, although ‘mint’ might be a generous description. It’s in good condition, but opening N64 boxes invariably led to cardboard creases, even if you were being careful. Very few of our NES or N64 games would get an A++ rating.
Any complete-in-box title in decent condition would likely recoup its original RRP, though, not adjusted for inflation. Perusing our shelves, the pristine copy of Conker’s Bad Fur Day would bring in over $100 according to Price Charting, and we could get similar amounts for Probotector on NES, Chibi-Robo and Majora’s Mask. Not bad, but we won’t be jetting to the Seychelles on those earnings.
A survey around the office at Nintendo Life Towers yields better results, with some staff members not having this writer’s limitations when it comes to storage space or smaller family members gnawing on a near-perfect copy of Battletoads & Double Dragon before spitting the torn, gummy remnants of the box at the cat.
Going around the office there are plenty of individual games which could finance a decent night out. Invader for the GBA could potentially bring in $250, Castlevania II: Belmont’s Revenge for Game Boy has a going rate of £150 (not bad for a 12 quid investment back in 1998) and San Francisco Rush 2049 could net us nearly $500. Lovely NL video chap Zion has an enviable 400 DS games in his collection so far (you’ve all seen that beautiful wall of games in his videos), which could fetch something, no?
Perhaps more interestingly, over the years we’ve also had the privilege of occasionally meeting industry luminaries and personal heroes. It’s hard to put a price on a 3DS signed by Charles Martinet, for example, let alone a 3DS signed by Martinet, Takashi Tezuka and Shigeru Miyamoto, but they’ve got to be worth something. Then there’s the game-related collectibles. A full set of six Sanrio x Animal Crossing amiibo cards would bring in around $300, and how about a K.K. Slider amiibo signed by Hasashi Nogami? Your guess is as good as ours.
The thing is, though, we’re not talking about life-changing sums here, and nobody gets rich buying and selling video games. We might be able to scrape a couple of months’ rent, but even a significant collection doesn’t represent a nest egg to retire on and the time and effort required to find the right buyer for your gear also eats into its value. The internet makes things easier, but you’ve still got to find someone willing and able to pay for your game whether it’s a Black Box NES title, Stadium Events, a Nintendo World Championships cart or Editor Damien’s Mega Drive copy of Castlevania: Bloodlines (worth £300-£400 “depending on who you ask”). Sometimes needs must, and it might be worth selling a treasure to fund a new console or fill your gas tank, but nobody is living off the sale of their retro collection for long.
The libraries of media we’ve built up over the years will invariably end up in landfill when our descendants see no value in them
To satisfy our curiosity we totted up (via Price Charting) the amount we’d get for selling our entire PAL GameCube collection – that’s 26 games, plus the console, Wavebird, a white controller and a pair of DK bongos, all CIB and in great condition. Apparently, the going rate for every GameCube-related thing we own is $670.46. We use dollars because it looks more impressive in dollars, although maybe we should switch to yen.
Your reaction to that sum will obviously depend on your circumstances – for some that’s a huge amount of money, and for others if wouldn’t cover a month’s utility bills. We weren’t sure what to think really. It’s a decent wodge of cash which would cover the car insurance for a year, but it somehow feels a bit paltry given the years of intangible pleasure we’ve got from our ‘Cube.
This is all academic anyway – we ain’t selling. We might have periodically shaved our collection down in the past, but tied up in every box still on our shelf is a memory – not just of playing the game, but of opening it, reading through the manual because we weren’t allowed to play until after dinner, carefully cutting out the logo from the bottom of the box to stick on the spine of our Nintendo-branded plastic N64 cart cases (thankfully we found most of the logos from magazines, although ISS 64 is missing a section of its bottom flap). You can’t put a price on memories like that. Just as well, really, because no-one would pay what we’d ask for anyway. No wonder people charge so much for complete libraries.
Even if we had the means to purchase entire software libraries, we’re not sure we would. Convenience aside, it eliminates the thrill of the hunt that makes collecting at any level so addictive. There’s something exciting about hitting your local retro gaming shops or fleamarkets in search of a treasure. Unearthing some dusty artefact in amongst the questionable odours and junk of a second-hand shop makes us feel like a modern-day Indiana Jones digging up priceless antiques for our personal museum. Steadily building and curating a collection is the attraction for many people, not just hoarding and trading entire libraries like stock.
When we talk about our ‘personal museum’, we have no interest in gatekeeping things that could be lost. This should be obvious given that we’re not in possession of such treasures anyway, but we’re firmly in the camp of the video game historians looking to save and distribute as much as they can – people like Frank Cifaldi over at the Video Game History Foundation and the preservationists which banded together to buy and dump the Satellaview version of Cooly Skunk. No, our museum really is a ‘personal’ one filled with our own trinkets. It’s just nice to have little library, no?
Keeping our personal copy of Ocarina is like keeping Tolstoy or Shakespeare on the shelf
That’s an increasingly old-fashioned way of thinking. The banks of physical media we’ve built up over the years will invariably end up in landfill when our descendants see no value in them, just as many of us cleared out our VHS tapes to make room for DVDs, which have since been turfed out for Blu Rays or hard drives. Ultimately, it’s all just data storage, and the smaller, the better.
So, our copy of Conker and the other usual suspects – the Marios, the Zeldas, etc – are mini memorials, testaments to digital experiences and a form of record; proof that we haven’t frittered away our youth on ‘nonsense’. Keeping our personal copy of Ocarina is like keeping Tolstoy or Shakespeare on the shelf – even if you haven’t read it for years, who in their right mind would sell it? All those memories!
Perhaps that’s why $670.47 feels a bit paltry compared to the personal value we put on our GameCube games. Perhaps that’s why people expect to earn tens of thousands for their entire gaming collection. You can’t assign a dollar value to memories, can you?
What’s the most valuable game in your collection? Would you regret selling it for a tidy sum, even if you have access to it by other means? How much would you be prepared to let your collection go for? We’ll be taking a look at some of the most expensive Nintendo games on the market soon, but until then let us know your tales of sales – and regret – below…