Due to the outbreak of Coronavirus (COVID-19), with elevated fears of infection and quarantine, several exhibitors including Unity, Epic Games, Microsoft and Amazon all announced that they would not be attending GDC this year. It was almost inevitable that the event itself would be cancelled or postponed, which is exactly what happened.
After close consultation with our partners in the game development industry and community around the world, we’ve made the difficult decision to postpone the Game Developers Conference this March.
Having spent the past year preparing for the show with our advisory boards, speakers, exhibitors, and event partners, we’re genuinely upset and disappointed not to be able to host you at this time .
We want to thank all our customers and partners for their support, open discussions and encouragement. As everyone has been reminding us, great things happen when the community comes together and connects at GDC. For this reason, we fully intend to host a GDC event later in the summer. We will be working with our partners to finalize the details and will share more information about our plans in the coming weeks.
From the linked FAQ come important details regarding refunds:
I am a current GDC 2020 paid conference or expo registrant – now the event is not taking place in March, can I receive a refund of my pass money?
If you are a currently registered passholder, you will be receiving an email about your registration status and any next steps regarding refunds, which conference and expo attendees will be receiving in full.
What is the situation with hotels if I booked through the GDC hotel website/room blocks?
Individuals who have made hotel reservations inside the GDC room block will not have to pay penalties or fees associated with their reservations. More information will be available early next week on next steps.
As several smaller developers are going to be financially impacted, gamedev.world are organizing a fund raising and relief effort for impacted developers. You can learn more about the postponement in the video below.
Picross is an old grid-based family of logic puzzles, rather like a mixture of Sudoku and Minesweeper. You fill in boxes to create a ‘pixelated’ image based on the numbers marking each row and column. A ‘5’ in a row means there are five filled boxes, one right after another, no more, no less. The rules are simple but the consequences aren’t. Picross had some mainstream success over a decade ago when it became part of the Nintendo DS’s large and diverse catalog (while popular, it never had the breakout appeal or sales of say, Nintendogs).
It’s always been a solid option. By adding a generic fantasy theme filled with magical potions, a standard bestiary and youthful heroes, PictoQuest attempts to give Picross a facelift. It tries to give a great puzzle form some pizazz to lure in new players. Reader, even for a puzzle-lover, the results are mixed at best. PictoQuest is a mashup of many conventional videogame ideas shoe-horned into a classic puzzle format. It’s pleasant enough and mildly challenging for newcomers, but ultimately derivative.
The game is structured around short levels with different enemy types. If you were just looking at screenshots, you’d be forgiven for thinking this was an RPG, or at least RPG-inspired, like PuzzleQuest was. (It isn’t either of these things, sadly). There are health bars for both you and the foe, but they are false symbols. A match is over when the picture is complete: the enemy is KO’d when the puzzle is completely filled in, no more, no less.
For your trouble, you get a little gold after each level. Any mistakes or long pauses mean the enemy attacks you, depleting your health bar. So in PictoQuest both speed and accuracy are important, which makes for a stressful learning environment. A little focus and concentration can make for better puzzle solving, but the real-time pressure can actually incentivize leaps of logic and deductive guesswork…which are punished by the skimpy, 3-heart health pool. Picross should be about the sure thing, the iron lattice of logic. PictoQuest can be beat with hectic tapping, magic items, and repeating a level over and over to just imprint the unchanging image grid on your brain.
The game’s different regions have pretty decent difficulty scaling, in terms of the raw complexity of the puzzle grids themselves. The purist approach dictates that logic puzzles should be approached methodically with an eye for chains of consequence. If a column says ‘8’, then the centermost six spaces must be filled. Most progress is made through the process of elimination, marking ineligible spaces X to narrow the field of possibilities. It’s the thrill of a crossword, or Sudoku, or any other activity where a mind can observe a pattern at work and unravel its consequences. There’s the vast wasteland of the empty puzzle at the very start, the slow build towards minor clues and victories, then as momentum peaks and the final few holdouts fall into place. Not exactly your typical gamer rush, but still a respectable and perfectly fun activity.
The puzzles themselves have been well-selected and ordered; the fancy ones come a great deal later. This smooth curve is undermined by the fact that the actual game mechanics are counter-intuitive and distracting. There’s plenty of stick and little to no carrot. It’s like asking someone to do as many pushups or squats in sixty seconds while turning a blind eye to their position and form. It encourages sloppiness and creates cognitive dissonance by tasking the player to improve at every metric simultaneously. Bosses will have progressively weirder twists and hit harder while the puzzle grid gets larger and the hints get less generous. It’s an ambitious challenge, but one that never actually feels hard. It creates obstacles and inconveniences rather than honing and refining the primary mechanic, and for this reason alone, PictoQuest is a letdown.
To enliven things, one-time consumable items can reveal tiles, restore hearts or freeze enemies, for a small gold fee. The game has no other tools to ameliorate the challenges it has set: it’s purely sink or swim. I can get behind a tiny set of rules, in the right circumstances it’s actually fantastically liberating (see: Miracle Merchant), but here the bonus effects feel hokey and tacked-on, as if someone tried to take a dollar-store puzzle booklet and make it come to life with the most hackneyed of video game tropes: a quest to save the kingdom. The fantasy theme and magic mechanics are merely window dressing, but also manage to be irksome and invasive.
There’s no great injustice in this: it’s not as if Picross puzzles are some holy grail, the pinnacle of the form which will tolerate no bastardization. Puzzles and high fantasy settings aren’t strange bedfellows by any means (see: Puzzle Quest and Might & Magic: Clash of Heroes). But the limited gameplay makes the bare-bones nature of Picross puzzles feel a tad dated. For example, because each level is just a static layout, it could be brute-forced with a good memory and multiple failed attempts. It’s like two fun things decided to merge together haphazardly and the result is worse than either half separately.
The visuals are clean and bright, and the UI is nice, especially the greyed-out effects used to update the hint sections of the puzzle as they’re completed. The music strikes a clean balance between dynamism and peace: somewhere halfway between a battle theme and an elevator ditty. That, along with the note-taking system make for a thoughtful digital Picross experience, if only PictoQuest would stop pinging my character’s health bar. It also has critical hits and misses, for some god awful reason that is devoid of any informed statistics or player input.
PictoQuest is ‘gamey’ like microwaveable food is a meal: only just enough to do in a pinch, but never to be praised beyond the fact it is quick and cheap. Its sole saving grace is that all the gimmicks and stylish distractions are built upon a rock solid core of Picross, and the pixelated images do have some retro gamer appeal, if you’re feeling nostalgic or indulgent. Still, taken altogether, it’s a mightily mediocre experience, so in all honesty unless you’ve been craving this particular brand of puzzle, just stay away.
Apple AirPods Pro are on sale and back in stock at Amazon
By Christine McKee Friday, February 28, 2020, 10:05 pm PT (01:05 am ET)
Head over to Amazon now for the lowest price on Apple AirPods Pro while the hot accessory is in stock and on sale, matching Amazon’s own record low price.
Apple AirPods Pro back in stock
With Apple AirPods Pro backordered at Apple for two to three weeks, Amazon is the place to not only get the hot wireless earphones now, but also save money.
Now shipping for delivery as soon as March 1, Amazon is knocking $15 off AirPods Pro, bringing the cost down to $234.98 and matching Amazon’s own record low price.
Considering AirPods deals regularly sell out quickly, it’s best to order now before the price changes or inventory sells out.
Those wanting to save the most money on AirPods can also pick up Apple AirPods 2 with Wireless Charging Case, which are currently $30 off and in stock. Amazon has AirPods with Charging Case on sale for $139 ($20 off) as well, with the cheaper alternative also in stock and ready to ship.
Apple AirPods deals
[embedded content]
Additional Apple deals
AppleInsider and Apple authorized resellers are also running additional exclusive savings on Apple hardware that will not only deliver the lowest prices on many of the items, but also throw in bonus discounts on AppleCare, Office 365 and more. These offers are as follows:
Netflix Announces The Actor Who Will Play Vesemir In Season Two Of The Witcher
After a rumour last week that Mark Hamill – best known as Luke Skywalker – would be cast as Vesemir in season two of Netflix’s insanely popular Witcher series, the digital streaming giant has now confirmed who’ll actually be taking on the role.
It’s the veteran Danish actor Kim Bodnia, who portrayed Konstantin Vasiliev in the spy thriller television series Killing Eve and received a BAFTA nomination for the best supporting actor last year. Here’s what showrunner Lauren Schmidt Hissrich had to say about the actor playing the Continent’s “oldest and most experienced” Witcher:
I am so thrilled to welcome Kim Bodnia to the cast of The Witcher. I have admired his unique talents in shows like Killing Eve and The Bridge, and cannot wait for him to bring strength, tenacity, and warmth to the character of Vesemir, who is such an integral part of our upcoming season.
So, there you have it – we finally know who will be playing Vesemir in season two, when it premieres in 2021. Here are the many other previously announced new faces joining the second season:
Are you happy with the casting choice for Vesemir? Are you familiar with Bodnia’s previous work? What do you think of the other new faces joining season two? Share your thoughts in the comments.
A New Simpsons Short Will Premiere Ahead Of Pixar's Onward
Onward, Disney Pixar's new movie, opens on March 6, and as is Pixar tradition a short cartoon will air beforehand. This time, however, the short will not be from one of Pixar's internal teams--instead, Disney is making use of its newly acquired Fox brands and putting a Simpsons short ahead of the movie.
Playdate with Destiny, the new Simpsons short, has been announced on the show's official Instagram. It will focus on Maggie, and looks to be set in a beautiful area of Europe, a coastal town with beautiful architecture. You can see the post, which teases the new short, below. Further details will hopefully follow.
Posted by: xSicKxBot - 03-01-2020, 11:33 AM - Forum: Python
- No Replies
Python Re Escape
I don’t know how often I sat in front of my computer, writing regular expressions and wondering: how to escape this or that character? The problem is that some special characters have a special meaning in Python strings and regular expressions. If you want to remove the special meaning, you need to escape the characters with an additional backslash.
If you have this problem too, you’re in luck. This article is the ultimate guide to escape special characters in Python. Just click on the topic that interests you and learn how to escape the special character you’re currently struggling with!
If you’re the impatient guy, you’re in luck too. Just try to add the backslash to your special character you want to escape: \x to escape special character x.
You can also watch the following video where I give you a quick example:
Python Regex Escape Characters
If you use special characters in strings, they carry a special meaning. Sometimes you don’t need that. The general idea is to escape the special character x with an additional backslash \x to get rid of the special meaning.
In the following, I show how to escape all possible special characters for Python strings and regular expressions:
Python Regex Escape Parentheses ()
How to escape the parentheses ( and ) in Python regular expressions?
Parentheses have a special meaning in Python regular expressions: they open and close matching groups.
You can get rid of the special meaning of parentheses by using the backslash prefix: \( and \). This way, you can match the parentheses characters in a given string. Here’s an example:
>>> import re
>>> re.findall(r'\(.*\)', 'Python is (really) great')
['(really)']
The result shows a string that contains the “special” characters '(' and ')'.
Python Regex Escape Square Brackets []
How to escape the square brackets [ and ] in Python regular expressions?
Square brackets have a special meaning in Python regular expressions: they open and close character sets.
You can get rid of the special meaning of brackets by using the backslash prefix: \[ and \]. This way, you can match the brackets characters in a given string. Here’s an example:
>>> import re
>>> re.findall(r'\[.*\]', 'Is Python [really] easy?')
['[really]']
The result shows a string that contains the “special” characters '[' and ']'.
Python Regex Escape Curly Brace (Brackets)
How to escape the curly braces{ and } in Python regular expressions?
The curly braces don’t have any special meaning in Python strings or regular expressions. Therefore, you don’t need to escape them with a leading backslash character \. However, you can do so if you wish as you see in the following example:
>>> import re
>>> re.findall(r'\{.*\}', 'if (2==2) { y = 3; }')
['{ y = 3; }']
>>> re.findall(r'{.*}', 'if (2==2) { y = 3; }')
['{ y = 3; }']
>>> re.findall('{.*}', 'if (2==2) { y = 3; }')
['{ y = 3; }']
All three cases match the same string enclosed in curly braces—even though we did not escape them and didn’t use the raw string r'' in the third example.
Python Regex Escape Slash (Backslash and Forward-Slash)
How to escape the slash characters—backslash \ and forward-slash /—in Python regular expressions?
The backslash has a special meaning in Python regular expressions: it escapes special characters and, thus, removes the special meaning. (How meta.)
You can see that the resulting matches have escaped backslashes themselves. This is because the backslash character has a special meaning in normal strings. Thus, the Python interpreter escapes it automatically by itself when printing it on the shell. Note that you didn’t need to escape the backslash characters when writing the raw string r'C:\home\usr\dir\hello\world' because the raw string already removes all the special meaning from the backslashed characters. But if you don’t want to use a raw string but a normal string, you need to escape the backslash character yourself:
In contrast to the backslash, the forward-slash doesn’t need to be escaped. Why? Because it doesn’t have a special meaning in Python strings and regular expressions. You can see this in the following example:
The result shows that even in a non-raw string, you can use the forward-slash without leading escape character.
Python Regex Escape String Single Quotes
How to escape the single quotes ' in Python regular expressions?
Single quotes have a special meaning in Python regular expressions: they open and close strings.
You can get rid of the special meaning of single quotes by using the backslash prefix: \'. This way, you can match the string quote characters in a given string. Here’s an example:
>>> import re
>>> re.findall('\'.*\'', "hello 'world'")
["'world'"]
The result shows a string that contains the “special” single quote characters. The result also shows an alternative that removes the special meaning of the single quotes: enclose them in double quotes: "hello 'world'".
Python Regex Escape String Double Quotes
How to escape the double quotes " in Python regular expressions?
Double quotes have a special meaning in Python regular expressions: they open and close strings.
You can get rid of the special meaning of single quotes by using the backslash prefix: \". This way, you can match the string quote characters in a given string. Here’s an example:
>>> import re
>>> re.findall('\".*\"', 'hello "world"')
['"world"']
The result shows a string that contains the “special” single quote characters. The result also shows an alternative that removes the special meaning of the single quotes: enclose them in double quotes: 'hello "world"'.
Python Regex Escape Dot (Period)
How to escape the regex dot (or period) meta character . in Python regular expressions?
The dot character has a special meaning in Python regular expressions: it matches an arbitrary character (except newline).
You can get rid of the special meaning of the dot character by using the backslash prefix: \.. This way, you can match the dot character in a given string. Here’s an example:
>>> import re
>>> re.findall('..\.', 'my. name. is. python.')
['my.', 'me.', 'is.', 'on.']
The result shows four strings that contain the “special” characters '.'.
Python Regex Escape Plus
How to escape the plus symbol + in Python regular expressions?
The plus symbol has a special meaning in Python regular expressions: it’s the one-or-more quantifier of the preceding regex.
You can get rid of the special meaning of the regex plus symbol by using the backslash prefix: \+. This way, you can match the plus symbol characters in a given string. Here’s an example:
>>> import re
>>> re.findall('\++', '+++python+++rocks')
['+++', '+++']
The result shows both usages: the plus symbol with and without leading escape character. If it is escaped \+, it matches the raw plus character. If it isn’t escaped +, it quantifies the regex pattern just in front of it (in our case the plus symbol itself).
Python Regex Escape Asterisk
How to escape the asterisk symbol * in Python regular expressions?
The asterisk symbol has a special meaning in Python regular expressions: it’s the zero-or-more quantifier of the preceding regex.
You can get rid of the special meaning of the regex asterisk symbol by using the backslash prefix: \*. This way, you can match the asterisk symbol characters in a given string. Here’s an example:
>>> import re
>>> re.findall('\**', '***python***rocks')
['***', '***']
The result shows both usages: the asterisk symbol with and without leading escape character. If it is escaped \*, it matches the raw asterisk character. If it isn’t escaped *, it quantifies the regex pattern just in front of it (in our case the asterisk symbol itself).
Python Regex Escape Question Mark
How to escape the question mark symbol ? in Python regular expressions?
The question mark symbol has a special meaning in Python regular expressions: it’s the zero-or-one quantifier of the preceding regex.
You can get rid of the special meaning of the question mark symbol by using the backslash prefix: \?. This way, you can match the question mark symbol characters in a given string. Here’s an example:
>>> import re
>>> re.findall('...\?', 'how are you?')
['you?']
The result shows that the question mark symbol was matched in the given string.
Python Regex Escape Underscore
How to escape the underscore character _ in Python regular expressions?
The underscore doesn’t have a special meaning in Python regular expressions or Python strings.
Therefore, you don’t need to escape the underscore character—just use it in your regular expression unescaped.
>>> import re
>>> re.findall('..._', 'i_use_underscore_not_whitespace')
['use_', 'ore_', 'not_']
In both cases, Python finds the underscore characters in the string and matches them in the result.
Python Regex Escape Pipe
How to escape the pipe symbol | (vertical line) in Python regular expressions?
The pipe symbol has a special meaning in Python regular expressions: the regex OR operator.
You can get rid of the special meaning of the pipe symbol by using the backslash prefix: \|. This way, you can match the parentheses characters in a given string. Here’s an example:
>>> import re
>>> re.findall('.\|.', 'a|b|c|d|e')
['a|b', 'c|d']
By escaping the pipe symbol, you get rid of the special meaning. The result is just the matched pipe symbol with leading and trailing arbitrary character.
If you don’t escape the pipe symbol, the result will be quite different:
In this case, the regex .|. matches “an arbitrary character or an arbitrary character”—quite meaningless!
Python Regex Escape Dollar
How to escape the dollar symbol $ in Python regular expressions?
The dollar symbol has a special meaning in Python regular expressions: it matches at the end of the string.
You can get rid of the special meaning by using the backslash prefix: \$. This way, you can match the dollar symbol in a given string. Here’s an example:
>>> import re
>>> re.findall('\$\d+', 'Your house is worth $1000000')
['$1000000']
Note that the \d+ regex matches an arbitrary number of numerical digits between 0 and 9.
Python Regex Escape Greater Than and Smaller Than
How to escape the greater than < and smaller than > symbols in Python regular expressions?
Greater and smaller than symbols don’t have a special meaning in Python regular expressions. Therefore, you don’t need to escape them.
Here’s an example:
>>> import re
>>> re.findall('<.*>.*<.*>', '<div>hello world</div>')
['<div>hello world</div>']
The result shows a string that even without escaping the HTML tag symbols, the regex matches the whole string.
Python Regex Escape Hyphen
How to escape the hyphen- in Python regular expressions?
Outside a character set, the hyphen doesn’t have a special meaning and you don’t need to escape it. Here’s an example:
>>> import re
>>> re.findall('..-', 'this is-me')
['is-']
The unescaped hyphen character in the regex matches the hyphen in the string.
However, inside a character set, the hyphen stands for the range symbol (e.g. [0-9]) so you need to escape it if you want to get rid of its special meaning and match the hyphen symbol itself. Here’s an example:
>>> re.findall('[a-z\-]+', 'hello-world is one word')
['hello-world', 'is', 'one', 'word']
Note that, in this case, if you don’t escape the hyphen in the character set, you get the same result:
>>> re.findall('[a-z-]+', 'hello-world is one word')
['hello-world', 'is', 'one', 'word']
The reason is that the hyphen appears at the end of the character set where it can have only one meaning: the hyphen symbol itself. However, in all other cases, the hyphen would be assumed to mean the range character which will result in strange behavior. A good practice is, thus, to escape the hyphen in the character class per default.
Python Regex Escape Newline
In a recent StackOverflow article, I read the following question:
I got a little confused about Python raw string. I know that if we use raw string, then it will treat '\' as a normal backslash (ex. r'\n' would be '\' and 'n'). However, I was wondering what if I want to match a new line character in raw string. I tried r'\n', but it didn’t work. Anybody has some good idea about this?
The coder asking the question has understood that the Python interpreter doesn’t assume that the two characters \ and n do have any special meaning in raw strings (in contrast to normal strings).
However, those two symbols have a special meaning for the regex engine! So if you use them as a regular expression pattern, they will indeed match the newline character:
>>> import re
>>> text = '''This
is
a
multiline
string'''
>>> re.findall(r'[a-z]+\n', text)
['his\n', 'is\n', 'a\n', 'multiline\n']
Therefore, you don’t need to escape the newline character again to match it in a given string.
Python re.escape Method
If you know that your string has a lot of special characters, you can also use the convenience method re.escape(pattern) from Python’s re module.
Specification: re.escape(pattern)
Definition: escapes all special regex meta characters in the given pattern.
Example: you can escape all special symbols in one go:
The dot symbol has a special meaning in the string 'https://www.finxter.com/'. There are no other special symbols. Therefore, all special symbols are replaced.
Note that “only characters that can have special meaning in a regular expression are escaped. As a result, '!', '"', '%', "'", ',', '/', ':', ';', '<', '=', '>', '@', and "`" are no longer escaped” (source).
Python Regex Bad Escape
There are some common errors in relation to escaping in Python regular expressions.
If you try to escape a normal character that has not a special meaning, Python will throw a “bad escape error”:
>>> re.findall('\m', 'hello {world}')
Traceback (most recent call last): File "<pyshell#61>", line 1, in <module> re.findall('\m', 'hello {world}') File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\re.py", line 223, in findall return _compile(pattern, flags).findall(string) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\re.py", line 286, in _compile p = sre_compile.compile(pattern, flags) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_compile.py", line 764, in compile p = sre_parse.parse(p, flags) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 930, in parse p = _parse_sub(source, pattern, flags & SRE_FLAG_VERBOSE, 0) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 426, in _parse_sub not nested and not items)) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 507, in _parse code = _escape(source, this, state) File "C:\Users\xcent\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 402, in _escape raise source.error("bad escape %s" % escape, len(escape))
re.error: bad escape \m at position 0
As the error message suggests, there’s no escape sequence \m so you need to get rid of it to avoid the error.
Where to Go From Here
Wow, you either have read about a lot of escaped character sequences or you did a lot of scrolling to reach this point.
In both cases, you have a great advantage over other coders: you’re a persistent guy or gal!
Do you want to increase your advantage over your peers? Then join my Python email academy! I’ll teach you the ins and outs of Python coding—all free!
The 141st GalaQuiz will be LIVE soon, win up to $50 in GalaCredit!
[www.indiegala.com] The GalaQuiz will take place in less than 25 minutes from this announcement Today's GalaQuiz[www.indiegala.com] hints are up. The theme will be Odd One Out #3. First quiz after the reset, if you want your name on that leaderboard, NOW would be a good time to start. Find the odd answers, the hints will be tremendously helpful in that endevour, and earn yourself some nice earnings.
Details of the 1.8 update from the release announcement:
Continuing with our focus on the professional workflow, our latest update adds some killer new features and improvements to the Affinity line-up, with something for everyone.
Convert and handle Adobe files better with Smart Object import in Affinity Photo and IDML import in Affinity Publisher, take advantage of the improved ability to share your work with collect linked resources, and output with confidence using the new preflight pro print feature.
Graphic designers will love the accuracy of our re-engineered expand stroke feature and massive improvements to our vector capabilities, while Affinity Photo lovers will be pleased to see the addition of manual lens corrections, much improved metadata handling as well as support for Nik Collection 2.5.
The entire Affinity suite of applications offer an economic alternative to Adobe’s line of applications without the need for a subscription. If you are an existing Affinity customer, the 1.8 update is free! You can learn more about the 1.8 updates in the video below.