Tenacious Entertainment is seeking a talented and enthusiastic UI Artist / Designer to join our passionate team. We have a very exciting opportunity for a talented and ambitious individual who is looking to grow with a new studio launching their first game.
We are a new mobile gaming studio located in Bellevue, WA. We are creating a culture and environment that fosters creativity, collaboration, and innovation in everything we do. We don’t just want to make games, we want to make games that are truly innovative and stand out from the rest.
Responsibilities
Design and create high quality 2D art assets.
Design layouts, flows, and interactions for our game’s UI based off our game system designs
Document flows and interactions to clearly communicate designs to the team.
Rapidly prototype, iterate, and refine ideas based on feedback.
Collaborate and keep a constant line of communication open with stakeholders to ensure you are in sync with each other’s needs.
Support additional 2D art efforts for the studio and game as needed.
Qualifications
4+ years’ professional experience creating 2d art and designing UIs.
Very strong skills with 2D art design software.
Experience in using a wide variety of art styles.
Self-starter and problem-solving mindset.
Strong verbal and written communication skills.
Strong collaboration skills.
Passion for video games.
Bonus
Experience creating concept art.
Experience implementing UI in Unity or similar game engine.
Experience working on mobile and/or live service games.
Experience working on action, MOBA, and/or fighting genre games.
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.
Boston Dynamics is a world-class robotics company with a diverse collection of projects. We build back-flipping humanoids that push the limits of mobility. We sell rugged, customizable quadrupeds for industrial applications. We also are changing the field of logistics. Our project teams are multidisciplinary but united by a passion for advancing the field of robotics. In order to achieve our goals, we rely strongly on collaboration and cross-team communication. At Boston Dynamics, our shared software contributes to the success of our projects, products, prototypes, and engineering staff. Our software engineers work tightly with the entire company.
Day to day activities:
Design and develop new features and advanced applications for the Android platform using Java and Kotlin.
Collaborate with the UX team and Product Managers to understand product needs and recommend the best technical solution.
Unit-testing code for robustness, including edge cases, usability, and general reliability.
Help define development/design standards and best practices.
Responsible for bug fixing and improving application performance.
Desired skills:
Bachelor of Science in Computer Science or a related discipline preferred
2+ years of mobile development experience (Android with Java and/or Kotlin preferred)
Experience with OpenGL ES is a plus
Who are we a good fit for?
We love working with talented people and seek out passionate co-workers with a collaborative spirit. Our work moves quickly and we’re great at coming together to find creative solutions to some of techs most challenging problems. If that sounds good to you, join us.
We are interested in every qualified candidate who is eligible to work in the United States. However, we are not able to sponsor visas for this position.
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.
Bloober Team Appears To Tease Observer Sequel In Creepy Cryptic Video
Bloober Team, the studio behind games like Layers of Fear: Legacy, BRAWL and Observer, has today shared a cryptic little video on Twitter. It appears to tease a new cyberpunk horror game, and all signs are pointing towards it being an Observer sequel.
You can see the tease – a 30-second video with looped footage – for yourself below. The whole thing screams Observer to us, but as spotted by our friends over at Push Square, one fan cracked a piece of binary code flashing on-screen which appears to really give the game away (literally).
Yes, “Daniel are you there?” is likely referencing Daniel Lazarski, the protagonist of the original game. Speaking of the original, we really enjoyed our time with it when playing it for review so a sequel would be most welcome indeed. Here’s a snippet of what we said:
“Despite threatening to fizzle under the weight of its reverence for Blade Runner, Observer manages to craft an impressive and affecting horror experience on Switch that doesn’t outstay its welcome… This port walks a technical tightrope and falters a little in docked mode, but fares much better as a handheld experience – its ambition and rich world-building are admirable enough to make up for any technical shortcomings.
All will be revealed soon, we’re sure. Until then, though, why not let us know if you’d be up for a sequel to Observer in the comments below.
Posted by: xSicKxBot - 01-24-2020, 11:15 AM - Forum: Lounge
- No Replies
Resogun, Matterfall Dev Housemarque Teases Its Next Project
The Finnish studio Housemarque, perhaps best known for the PS4 launch exclusive Resogun, has announced that it is shifting its focus toward a brand-new title. This means all current projects, including the in-development battle royale Stormdivers, will be placed on hold while the studio works on its "most ambitious and biggest game to date."
Housemarque CEO Ilari Kuittinen penned a blog post sharing the announcement, where he also confirmed that this unnamed project is being supported by an equally unnamed partner. In the post, in which he celebrated Housemarque's 25th anniversary, Kuittinen said more will be revealed about this game soon.
"Our team of almost 80 people is comprised of talented, smart and hard-working individuals from all around the world, and it has been invigorating and inspiring to see how this game concept has turned into reality as more and more ideas have formed the basis of a truly incredible product," Kuittinen said. "Despite not knowing if we would even get past the initial stages of pre-production, we have now spent almost three years working on this game, and now we are in full-scale production and super excited to reveal more in the coming months."
Much remains unknown about this newly-confirmed game, but it's safe to assume it won't be an arcade shooter, as the studio has opted to move away from the genre in 2017 citing "lackluster sales" and a changing industry. Further, Housemarque did not specify what systems this new title will release on.
While not owned by Sony, Housemarque has a storied history with PlayStation, launching a handful of its games across the platform. Many Housemarque titles, however, are multiplatform--such as Nex Machina and Outland.
The studio's last game, the Playstation 4-exclusive Matterfall, launched in August 2017. We gave the game a 6/10 in GameSpot's Matterfall review, saying, "There is still some fun to be had, and it's easy to appreciate the technical artistry on display, but factor in inconsistent controls and long load times, and it's easy to grow frustrated throughout the Matterfall's short campaign."
Posted by: xSicKxBot - 01-24-2020, 08:21 AM - Forum: Python
- No Replies
Python Regex Search
When I first learned about regular expressions, I didn’t 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 search() method of Python’s re library. To learn about the easy-to-use but less powerful findall() method that returns a list of string matches, check out our article about the similar findall() method.
So how does the re.search() method work? Let’s study the specification.
How Does re.search() Work in Python?
The re.search(pattern, string) method matches the first occurrence of the pattern in the string and returns a match object.
Specification:
re.search(pattern, string, flags=0)
The re.search() 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.
The re.search() method returns a match object. You may ask (and rightly so):
What’s a Match Object?
If a regular expression matches a part of your string, there’s a lot of useful information that comes with it: what’s the exact position of the match? Which regex groups were matched—and where?
The match object is a simple wrapper for this information. Some regex methods of the re package in Python—such as search()—automatically create a match object upon the first pattern match.
At this point, you don’t need to explore the match object in detail. Just know that we can access the start and end positions of the match in the string by calling the methods m.start() and m.end() on the match object m:
In the first line, you create a match object m by using the re.search() method. The pattern ‘h…o’ matches in the string ‘hello world’ at start position 0. You use the start and end position to access the substring that matches the pattern (using the popular Python technique of slicing).
Now, you know the purpose of the match() object in Python. Let’s check out a few examples of re.search()!
A Guided Example for re.search()
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’:
The first argument is the pattern to be found. 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 search() method because you’re fine with the default behavior in this case.
Look at the output: it’s a match object! The match object gives the span of the match—that is the start and stop indices of the match. We can also directly access those boundaries by using the start() and stop() methods of the match object:
The problem is that the search() method only retrieves the first occurrence of the pattern in the string. If you want to find all matches in the string, you may want to use the findall() method of the re library.
What’s the Difference Between re.search() and re.findall()?
There are two differences between the re.search(pattern, string) and re.findall(pattern, string) methods:
re.search(pattern, string) returns a match object while re.findall(pattern, string) returns a list of matching strings.
re.search(pattern, string) returns only the first match in the string while re.findall(pattern, string) returns all matches in the string.
Both can be seen in the following example:
>>> text = 'Python is superior to Python'
>>> re.search('Py...n', text)
<re.Match object; span=(0, 6), match='Python'>
>>> re.findall('Py...n', text)
['Python', 'Python']
The string ‘Python is superior to Python’ contains two occurrences of ‘Python’. The search() method only returns a match object of the first occurrence. The findall() method returns a list of all occurrences.
What’s the Difference Between re.search() and re.match()?
The methods re.search(pattern, string) and re.match(pattern, string) both return a match object of the first match. However, re.match() attempts to match at the beginning of the string while re.search() matches anywhere in the string.
You can see this difference in the following code:
>>> text = 'Slim Shady is my name'
>>> re.search('Shady', text)
<re.Match object; span=(5, 10), match='Shady'>
>>> re.match('Shady', text)
>>>
The re.search() method retrieves the match of the ‘Shady’ substring as a match object. But if you use the re.match() method, there is no match and no return value because the substring ‘Shady’ does not occur at the beginning of the string ‘Slim Shady is my name’.
How to Use the Optional Flag Argument?
As you’ve seen in the specification, the search() method comes with an optional third ‘flag’ argument:
re.search(pattern, string, flags=0)
What’s the purpose of the flags argument?
Flags allow you to control the regular expression engine. Because regular expressions are so powerful, they are a useful way of switching on and off certain features (for example, whether to ignore capitalization when matching your regex).
Syntax
Meaning
re.ASCII
If you don’t use this flag, the special Python regex symbols \w, \W, \b, \B, \d, \D, \s and \S will match Unicode characters. If you use this flag, those special symbols will match only ASCII characters — as the name suggests.
re.A
Same as re.ASCII
re.DEBUG
If you use this flag, Python will print some useful information to the shell that helps you debugging your regex.
re.IGNORECASE
If you use this flag, the regex engine will perform case-insensitive matching. So if you’re searching for [A-Z], it will also match [a-z].
re.I
Same as re.IGNORECASE
re.LOCALE
Don’t use this flag — ever. It’s depreciated—the idea was to perform case-insensitive matching depending on your current locale. But it isn’t reliable.
re.L
Same as re.LOCALE
re.MULTILINE
This flag switches on the following feature: the start-of-the-string regex ‘^’ matches at the beginning of each line (rather than only at the beginning of the string). The same holds for the end-of-the-string regex ‘$’ that now matches also at the end of each line in a multi-line string.
re.M
Same as re.MULTILINE
re.DOTALL
Without using this flag, the dot regex ‘.’ matches all characters except the newline character ‘\n’. Switch on this flag to really match all characters including the newline character.
re.S
Same as re.DOTALL
re.VERBOSE
To improve the readability of complicated regular expressions, you may want to allow comments and (multi-line) formatting of the regex itself. This is possible with this flag: all whitespace characters and lines that start with the character ‘#’ are ignored in the regex.
re.X
Same as re.VERBOSE
Here’s how you’d use it in a practical example:
>>> text = 'Python is great!'
>>> re.search('PYTHON', text, flags=re.IGNORECASE)
<re.Match object; span=(0, 6), match='Python'>
Although your regex ‘PYTHON’ is all-caps, we ignore the capitalization by using the flag re.IGNORECASE.
Where to Go From Here?
This article has introduced the re.search(pattern, string) method that attempts to match the first occurrence of the regex pattern in a given string—and returns a match object.
Python soars in popularity. There are two types of people: 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 daily without investing a lot of time?
PHP Pagination MySQL Database Example Script with Previous Next like Google
Last modified on December 5th, 2019 by Vincy.
Do you want to implement PHP pagination using core PHP with lightweight script? Jump in, this tutorial is all about it.
The pagination functionality is for stacking a list of items on many pages. It helps to fetch and display a huge volume of records in an effective way.
If you want to implement a simple PHP pagination, then it is very easy and straight forward.
There is just one thing that you should keep in mind when you work on pagination. Do not pull the complete result set and filter it to display to the users.
SELECT only records using LIMIT from database. It can be done via AJAX or on page submit depending on your use case. We will see more about it in the example below.
There are scenarios to create pagination with AJAX. For example, an online quiz with a paginated question board. We have seen more examples to create PHP pagination with AJAX.
In this example code, it has two types of control to navigate with the paginated results.
One is the pagination links to redirect us to the corresponding page. The other is an input to enter the page number. By submitting this page number we can jump into the target page from the current page.
I have implemented PHP pagination with a simple page refresh. We have already seen examples for achieving this with AJAX using jQuery.
I have enabled pagination for the list of database results displaying Animal names. The pagination links count varies based on the animal database record count.
A SELECT query with a specification of start and end limit fetch the page result. The per-page result count is configurable as a Config class constant.
There are many plugins available to create pagination easily. Pagination.js and jqPaginator are examples of 3-party plugins available in the market.
The Datatables is one of the popular library used for managing tabular data. It has an in-built search, pagination, sort, and more features. In an old article, we had seen how to integrate Datatables to list records with pagination.
Having said all these, better to go with custom code. Because external plugins, libraries will slow down the application.
File structure
The working example code contains the following files in the below hierarchical order.
The index.php file is a landing page. It contains the HTML to display pagination links and the current page results.
Two CSS used in this example. The phppot-style.css has generic layout styles. The pagination.css has the exclusive styles created for this example.
Model/Pagination.php includes functions to fetch the MySQL data. It receives parameters to set the limit for the SELECT query.
The file structure includes a SQL script to set up the database for running this example.
It contains table rows created in a loop on iterating the data array. Below this table, it shows pagination links with previous next navigation. This navigation allows moving back and forth from the current page.
This example also contains a HMTL form to enter the target page number. If you enter a number within the number of pages, then it will get the appropriate page result.
The pageValidation() is a JavaScript method to confirm the entered page number. If the page number input contains invalid data, then this script will return false. Then it stops form submit and thereby preventing the page-jump action.
<script> function pageValidation() { var valid=true; var pageNo = $('#page-no').val(); var totalPage = $('#total-page').val(); if(pageNo == ""|| pageNo < 1 || !pageNo.match(/\d+/) || pageNo > parseInt(totalPage)){ $("#page-no").css("border-color","#ee0000").show(); valid=false; } return valid; } </script>
The following styles are from the pagination.css. It defines the CSS for the table view and the pagination elements.
This PHP script is for reading the database results and get the record count, pages count. The pages count varies based on the record count and the LIMIT_PER_PAGE configuration.
If there are more pages, this example will show only limited pages as like as Google pagination. This feature will help to make the pagination block to fit into the viewport.
On successive page navigation, you will get more pagination links to browse further.
This is the config file added for this example. I kept the per-page record limit as an application constant. I used this for setting the SELECT query limit.
You can add more constants and fine-tune the PHP pagination script to work based on them. For example, create new constant SHOW_ALL_LINKS. Set it on/off to enable/disable the Google-like feature to show limited links.
This screenshot shows the output of the PHP pagination example code. It shows five records per page.
On the left, it shows usual pagination with previous next and separate page links. On the right side, it is a HMTL form to allow the user to enter the page number.
Thus, we created PHP pagination with Google-like limited links and previous next links. We have seen the interlinking of older PHP pagination script along with this article.
We have discussed the third-party libraries that contain in-built pagination feature. It will be helpful to have a choice if are searching for such plugins.
In this custom PHP pagination example, we have provided an option to jump into a target page directly via a form. Sometimes, it itself is enough with previous next navigation.
Hope this article and the example help you to build a nice simple PHP pagination for your web application.
[www.indiegala.com] Spy Fox, Putt-Putt, Pajama Sam, Freddi Fish and more edu-gaming opportunities for the young and old with the Humongous Entertainment Sale
Retroism Winter Sale, up to -90%
[www.indiegala.com] Relive your childhood or take a glimpse into the good ol' days with the Retroism timeless games!
Create an account or log in an already existing one and permanently add the game on your account. Alternatively you can redeem it from the Epic Launcher on the game's giveaway page.
This giveaway is no longer a daily giveaway. Epic resumed the weekly schedule, meaning this giveaway will last between Jan 1 to Jan 9.
We are welcoming everyone to join our discord server (link below). We are more active there on finding giveaways, small or large.
Using Kubernetes ConfigMaps to define your Quarkus application’s properties
So, you wrote your Quarkus application, and now you want to deploy it to a Kubernetes cluster. Good news: Deploying a Quarkus application to a Kubernetes cluster is easy. Before you do this, though, you need to straighten out your application’s properties. After all, your app probably has to connect with a database, call other services, and so on. These settings are already defined in your application.properties file, but the values match the ones for your local environment and won’t work once deployed onto your cluster.
So, how do you easily solve this problem? Let’s walk through an example.
Create the example Quarkus application
Instead of using a complex example, let’s take a simple use case that explains the concept well. Start by creating a new Quarkus app:
You can keep all of the default values while creating the new application. In this example, the application is named hello-app. Now, open the HelloResource.java file and refactor it to look like this:
@Path("/hello") public class HelloResource { @ConfigProperty(name = "greeting.message") String message; @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return "hello " + message; } }
In your application.properties file, now add greeting.message=localhost. The @ConfigProperty annotation is not in the scope of this article, but here we can see how easy it is to inject properties inside our code using this annotation.
Now, let’s start our application to see if it works as expected:
$ mvn compile quarkus:dev
Browse to http://localhost:8080/hello, which should output hello localhost. That’s it for the Quarkus app. It’s ready to go.
Deploy the application to the Kubernetes cluster
The idea here is to deploy this application to our Kubernetes cluster and replace the value of our greeting property with one that will work on the cluster. It is important to know here that all of the properties from application.properties are exposed, and thus can be overridden with environment variables. The convention is to convert the name of the property to uppercase and replace every dot (.) with an underscore (_). So, for instance, our greeting.message will become GREETING_MESSAGE.
At this point, we are almost ready to deploy our app to Kubernetes, but we need to do three more things:
Create a Docker image of your application and push it to a repository that your cluster can access.
Define a ConfgMap resource.
Generate the Kubernetes resources for our application.
To create the Docker image, simply execute this command:
Be sure to set the right Docker username and to also push to an image registry, like docker-hub or quay. If you are not able to push an image, you can use sebi2706/hello-app:latest.
Make sure that you are connected to a cluster and apply this file:
$ kubectl apply -f config-hello.yml
Quarkus comes with a useful extension, quarkus-kubernetes, that generates the Kubernetes resources for you. You can even tweak the generated resources by providing extra properties—for more details, check out this guide.
After installing the extension, add these properties to our application.properties file so it generates extra configuration arguments for our containers specification:
Then, browse to the public URL or do a curl. For instance, with Minikube:
$ curl $(minikube service hello-app --url)/hello
This command should output: hello Kubernetes.
Conclusion
Now you know how to use a ConfigMap in combination with environment variables and your Quarkus’s application.properties. As we said in the introduction, this technique is particularly useful when defining a DB connection’s URL (like QUARKUS_DATASOURCE_URL) or when using the quarkus-rest-client (ORG_SEBI_OTHERSERVICE_MP_REST_URL).
Java Shell (or JShell) is a new tool introduced in Java 9 for running standalone code snippets. JShell in NetBeans is explored in six articles. The first article introduces JShell with NetBeans including how to access the JShell. JShell-only commands such as /list and /save are shell commands to facilitate the use of the tool. The first article discusses how to run code snippets to import a package or a type. Further, the first article discusses declaring and using variables explicitly.
The second article continues with declaring and using variables; implicit variables. Further, code snippets for String comparison and statements are run in the second article. Resetting JShell is also discussed in the second article.
The third article is all about running code snippets for methods in JShell. Modifying method definition, method overloading, and making a forward reference to a method are discussed as used in JShell. Some JShell specific features for methods are also discussed including listing code snippets for methods, and method modifiers not permitted in a top-level method declaration.
The fourth article is mainly about running code snippets for classes in JShell including declaring a class, modifying a class, using class constructors, extending a class and overriding methods. Further, interfaces, arrays and unchecked exceptions are also discussed.
The fifth article discusses running code snippets for enums and the various control flow statements.
The sixth article discusses lambda expressions, in addition to discussing saving and loading code snippets in JShell.