Create an account


Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 19,851
» Latest member: codestar83
» Forum threads: 21,529
» Forum posts: 22,364

Full Statistics

Online Users
There are currently 714 online users.
» 0 Member(s) | 709 Guest(s)
Applebot, Baidu, Bing, Google, Yandex

 
  News - Venom Movie (2018): Here's Every After-Credits Scene, Explained [Spoilers]
Posted by: xSicKxBot - 10-18-2018, 06:00 PM - Forum: Lounge - No Replies

Venom Movie (2018): Here's Every After-Credits Scene, Explained [Spoilers]

Sony's new movie, Venom, has received mostly poor reviews, but that hasn't stopped it from setting a new US box office record in its first weekend. And although it may also not be part of the Marvel Cinematic Universe, it is a comic book movie--and that means it borrowed some pages of the MCU playbook by including a pair of extra scenes after the credits roll. Its two post-credits sequences feature a surprising reveal, a sequel teaser, and some hype for another Spider-adjacent movie entirely. So technically there is a Spider-Man reference in Venom? Does this count? Obvious spoilers ahead--please consider yourself warned!

The first and most consequential of Venom's credits stingers features a rather abrupt jump to Eddie being escorted into a supermax prison by a guard, apparently on assignment for his newly resumed journalistic career. The actual angle of the piece and the outlet that commissioned it are never revealed, but that doesn't stop the guard from running down a list of intimidating Silence of the Lambs style rules Eddie has to follow upon conducting his interview, as if he's Clarice Starling about to meet Hannibal Lecter for the first time. Venom itself stays hidden and mostly quiet as Eddie approaches the cell, and we see a man painting the word "welcome" in blood on the walls of his cage, which happens to be a lone box in the middle of an otherwise empty room. He's the only prisoner kept here, we can assume for the safety of the other inmates.

As the camera focuses on his face, he's revealed to be played by Woody Harrelson, sitting in a white jumpsuit, done up with an almost cartoonish red wig. He never formally introduces himself but begins to speak as Eddie approaches, warning that when he "gets out of here, there's going to be carnage" before the scene cuts to black.

Though he's never formally named, it's pretty obvious that Harrelson is set to play Cletus Kasady in whatever Venom sequel might be in the works, the serial killing mass murderer who eventually comes into possession of his very own symbiote named--wait for it--Carnage.

In the comics, Carnage is actually one of the Venom symbiote's many offspring, created during a brief stint in which Eddie was incarcerated and kept in a cell next to Kasady, where it eventually bonded to him without Eddie's knowledge. Thanks to Kasady's major homicidal streak and psychopathic tendencies, and some comic book science involving the symbiote bonding to Kasady's blood directly (don't worry about it), Carnage became a massive and powerful threat almost immediately.

Physically, Carnage looks similar to Venom, except it's blood red in color and tends to fight with a bunch of gooey tentacle-like appendages in addition to its standard issue symbiote shape-shifting and brute strength. Unlike Brock, however, Kasady was never interested in trying to reign in Carnage's murderous, cannibalistic side, meaning Carnage basically just gets to cut a swath of destruction and terror wherever it wants, whenever it wants.

No Caption Provided

We can't be sure based on this scene alone just how the Carnage symbiote will come into play or how Kasady will bond with it. The movie universe hasn't dealt with the symbiotes reproducing so far, so it's likely that the family connection between the two will be changed. And given that Brock himself isn't actively incarcerated, there will probably be some other way for Kasady to come in contact with his symbiote--a rogue Life Foundation experiment, maybe? Some sort of Riot fragment that survived the crash? Alternatively, there's a slight possibility that the movie will posit Kasady already having Carnage inside him (hence the high security prison set up and the "there will be carnage" line) with the intent of building out that backstory somewhere down the line. Really anything is possible at this point.

In an interview with GameSpot, Venom director Ruben Fleischer elaborated on the scene and the casting choice of Woody Harrelson, with whom he has worked in the past.

"We tried at the end of our movie to lay the groundwork for a potential sequel, or a further story. And there's a character that's beloved by all Venom fans that does not appear in the body of our film that I think fans will be really excited to see," Fleischer said. "I found somebody who I have a relationship with and love working with. And I love all the characters that he's played. So to imagine him being an iconic adversary to Venom in the future is really exciting."

The only thing we can be sure of is that, should Venom be greenlit for a part two, Carnage fans will definitely have something to write home about.

No Caption Provided

Enter Spider-Man

Venom's second post credits segment was actually, technically, not a post credits scene at all, but a promotional clip for an entirely different movie: Spider-Man: Into the Spider-Verse, which is set for release this December. Heralded by a bright "Meanwhile, in another universe" title card, the clip featured the animated Miles Morales running from an unknown, masked enemy wearing a makeshift spider-style costume before winding up at the grave of the late Peter Parker.

He's then met by a very much alive Peter Parker, who he accidentally knocks out, prompting a Weekend At Bernie's style series of mishaps around New York in which Miles drags the very unconscious Peter around the city. The clip was previously showcased in part at San Diego Comic-Con this year.

Spider-Man: Into The Spider-Verse has no direct connection with either Venom or the MCU that we know of yet, and even if it did, it certainly doesn't impact the significance of this particular clip. Instead it's set to build its own multiverse populated by some fan favorite Spider-Man comics characters, hence the "Spider-Verse" title. So, no real hidden meanings or major clues for the future of Sony's superhero line on this one, just a little teaser for another movie headed to theaters this winter.

Print this item

  Understanding Linux Links: Part 1
Posted by: xSicKxBot - 10-18-2018, 03:26 PM - Forum: Linux, FreeBSD, and Unix types - No Replies

Understanding Linux Links: Part 1

Along with cp and mv, both of which we talked about at length in the previous installment of this series, links are another way of putting files and directories where you want them to be. The advantage is that links let you have one file or directory show up in several places at the same time.

As noted previously, at the physical disk level, things like files and directories don’t really exist. A filesystem conjures them up for our human convenience. But at the disk level, there is something called a partition table, which lives at the beginning of every partition, and then the data scattered over the rest of the disk.

Although there are different types of partition tables, the ones at the beginning of a partition containing your data will map where each directory and file starts and ends. The partition table acts like an index: When you load a file from your disk, your operating system looks up the entry on the table and the table says where the file starts on the disk and where it finishes. The disk header moves to the start point, reads the data until it reaches the end point and, hey presto: here’s your file.

Hard Links


A hard link is simply an entry in the partition table that points to an area on a disk that has already been assigned to a file. In other words, a hard link points to data that has already been indexed by another entry. Let’s see how this works.

Open a terminal, create a directory for tests and move into it:

mkdir test_dir
cd test_dir

Create a file by touching it:

touch test.txt

For extra excitement (?), open test.txt in a text editor and add some a few words into it.

Now make a hard link by executing:

ln test.txt hardlink_test.txt

Run ls, and you’ll see your directory now contains two files… Or so it would seem. As you read before, really what you are seeing is two names for the exact same file: hardlink_test.txt contains the same content, has not filled any more space in the disk (try with a large file to test this), and shares the same inode as test.txt:

$ ls -li *test*
16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt 16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

ls‘s -i option shows the inode number of a file. The inode is the chunk of information in the partition table that contains the location of the file or directory on the disk, the last time it was modified, and other data. If two files share the same inode, they are, to all practical effects, the same file, regardless of where they are located in the directory tree.

Fluffy Links


Soft links, also known as symlinks, are different: a soft link is really an independent file, it has its own inode and its own little slot on the disk. But it only contains a snippet of data that points the operating system to another file or directory.

You can create a soft link using ln with the -s option:

ln -s test.txt softlink_test.txt

This will create the soft link softlink_test.txt to test.txt in the current directory.

By running ls -li again, you can see the difference between the two different kinds of links:

$ ls -li
total 8 16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 hardlink_test.txt 16515855 lrwxrwxrwx 1 paul paul 8 oct 12 09:50 softlink_test.txt -> test.txt 16515846 -rw-r--r-- 2 paul paul 14 oct 12 09:50 test.txt

hardlink_test.txt and test.txt contain some text and take up the same space *literally*. They also share the same inode number. Meanwhile, softlink_test.txt occupies much less and has a different inode number, marking it as a different file altogether. Using the ls‘s -l option also shows the file or directory your soft link points to.

Why Use Links?


They are good for applications that come with their own environment. It often happens that your Linux distro does not come with the latest version of an application you need. Take the case of the fabulous Blender 3D design software. Blender allows you to create 3D still images as well as animated films and who wouldn’t to have that on their machine? The problem is that the current version of Blender is always at least one version ahead of that found in any distribution.

Fortunately, Blender provides downloads that run out of the box. These packages come, apart from with the program itself, a complex framework of libraries and dependencies that Blender needs to work. All these bits and piece come within their own hierarchy of directories.

Every time you want to run Blender, you could cd into the folder you downloaded it to and run:

./blender

But that is inconvenient. It would be better if you could run the blender command from anywhere in your file system, as well as from your desktop command launchers.

The way to do that is to link the blender executable into a bin/ directory. On many systems, you can make the blender command available from anywhere in the file system by linking to it like this:

ln -s /path/to/blender_directory/blender /home/<username>/bin

Another case in which you will need links is for software that needs outdated libraries. If you list your /usr/lib directory with ls -l, you will see a lot of soft-linked files fly by. Take a closer look, and you will see that the links usually have similar names to the original files they are linking to. You may see libblah linking to libblah.so.2, and then, you may even notice that libblah.so.2 links in turn to libblah.so.2.1.0, the original file.

This is because applications often require older versions of alibrary than what is installed. The problem is that, even if the more modern versions are still compatible with the older versions (and usually they are), the program will bork if it doesn’t find the version it is looking for. To solve this problem distributions often create links so that the picky application believes it has found the older version, when, in reality, it has only found a link and ends up using the more up to date version of the library.

Somewhat related is what happens with programs you compile yourself from the source code. Programs you compile yourself often end up installed under /usr/local: the program itself ends up in /usr/local/bin and it looks for the libraries it needs / in the /usr/local/lib directory. But say that your new program needs libblah, but libblah lives in /usr/lib and that’s where all your other programs look for it. You can link it to /usr/local/lib by doing:

ln -s /usr/lib/libblah /usr/local/lib

Or, if you prefer, by cding into /usr/local/lib

cd /usr/local/lib

… and then linking with:

ln -s ../lib/libblah

There are dozens more cases in which linking proves useful, and you will undoubtedly discover them as you become more proficient in using Linux, but these are the most common. Next time, we’ll look at some linking quirks you need to be aware of.

Learn more about Linux through the free “Introduction to Linux” course from The Linux Foundation and edX.

Print this item

  News - New On Netflix This Week: Movies, TV Series, And Originals (US)
Posted by: xSicKxBot - 10-18-2018, 10:14 AM - Forum: Lounge - No Replies

New On Netflix This Week: Movies, TV Series, And Originals (US)

This week, a ton of Netflix Original series and movies arrive on the streaming service. You won't be able to see many of them before Friday, but there are a few new shows to watch while you wait.

The second season of Netflix's popular anime about the seven cursed knights who protect the fictional land of Britannia is back. The Seven Deadly Sins: Revival of The Commandments sees the demon Meliodas, giantess Diane, fairy King, immortal Ban, wizard Merlin, and living doll Gowther reunite with Escanor, the Sin of Pride, to once again defend the kingdom with the help of the princess Elizabeth and talking pig Hawk. No longer criminals, the Seven Deadly Sins use their newfound freedom to fulfill promises they each made to friends and family long ago, as well as battle the group of demons that represent the ten Biblical Commandments. For more anime coming to Netflix this month--as well as Crunchyroll, Funimation, Amazon, and HIDIVE--check out our fall 2018 anime guide.

A huge assortment of series and movies are coming to Netflix on Friday. Most notable is Marvel's Daredevil Season 3, which sees Matt Murdock, aka Daredevil, once again go up against Wilson Fisk. Although he was the major villain of Season 1, Fisk was regulated to a background role in Season 2. Vincent D'Onofrio has already provided chilling performances as the Kingpin of Crime in Season 3's trailers, and his return seems to plunge Matt into one of the darkest MCU stories told yet. Charlie Cox and Deborah Ann Woll return to reprise their roles as Matt Murdock and Karen Page respectfully, and Wilson Bethel joins the cast to portray Bullseye, one of Daredevil's most iconic villains.

Below, you'll find the list of every new series, movie, and Original coming to Netflix this week, and you can check out the full list of October add-ons if you want a peek at what's to come.

Netflix: October 14 - October 20 (US)

Available October 15

  • Octonauts: Season 4
  • The Seven Deadly Sins: Revival of The Commandments-- NETFLIX ORIGINAL

Available October 16

  • Ron White: If You Quit Listening, I'll Shut Up-- NETFLIX ORIGINAL

Available October 19

  • Accidentally in Love-- NETFLIX ORIGINAL
  • Ask the Doctor-- NETFLIX ORIGINAL
  • Best.Worst.Weekend.Ever.: Limited Series-- NETFLIX ORIGINAL
  • Derren Brown: Sacrifice-- NETFLIX ORIGINAL
  • Distrito salvaje-- NETFLIX ORIGINAL
  • Gnome Alone-- NETFLIX FILM
  • Haunted-- NETFLIX ORIGINAL
  • Hip-Hop Evolution: Season 2-- NETFLIX ORIGINAL
  • Illang: The Wolf Brigade-- NETFLIX FILM
  • Larva Island-- NETFLIX ORIGINAL
  • Making a Murderer: Part 2-- NETFLIX ORIGINAL
  • Marvel's Daredevil: Season 3-- NETFLIX ORIGINAL
  • The Night Comes For Us-- NETFLIX FILM
  • Wanderlust-- NETFLIX ORIGINAL

Print this item

  Fedora - Design faster web pages, part 2: Image replacement
Posted by: xSicKxBot - 10-18-2018, 10:14 AM - Forum: Linux, FreeBSD, and Unix types - No Replies

Design faster web pages, part 2: Image replacement

Welcome back to this series on building faster web pages. The last article talked about what you can achieve just through image compression. The example started with 1.2MB of browser fat, and reduced down to a weight of 488.9KB. That’s still not fast enough! This article continues the browser diet to lose more fat. You might think that partway through this process things are a bit crazy, but once finished, you’ll understand why.

Preparation


Once again this article starts with an analysis of the web pages. Use the built-in screenshot function of Firefox to make a screenshot of the entire page. You’ll also want to install Inkscape using sudo:

$ sudo dnf install inkscape

If you want to know how to use Inkscape, there are already several articles in Fedora Magazine. This article will only explain some basic tasks for optimizing an SVG for web use.

Analysis


Once again, this example uses the getfedora.org web page.

Getfedora page with graphics marked

Getfedora page with graphics marked

This analysis is better done graphically, which is why it starts with a screenshot. The screenshot above marks all graphical elements of the page. In two cases or better in four cases, the Fedora websites team already used measures to replace images. The icons for social media are glyphs from a font and the language selector is an SVG.

There are several options for replacing:

HTML5 Canvas


Briefly, HTML5 Canvas is an HTML element that allows you to draw with the help of scripts, mostly JavaScript, although it’s not widely used yet. As you draw with the help of scripts, the element can also be animated. Some examples of what you can achieve with HTML Canvas include this triangle pattern, animated wave, and text animation. In this case, though, it seems not to be the right choice.

CSS3


With Cascading Style Sheets you can draw shapes and even animate them. CSS is often used for drawing elements like buttons. However, more complicated graphics via CSS are usually only seen in technical demonstration pages. This is because graphics are still better done visually as with coding.

Fonts


The usage of fonts for styling web pages is another way, and Fontawesome is quiet popular. For instance, you could replace the Flavor and the Spin icons with a font in this example. There is a negative side to using this method, which will be covered in the next part of this series, but it can be done easily.

SVG


This graphics format has existed for a long time and was always supposed to be used in the browser. For a long time not all browsers supported it, but that’s history. So the best way to replace pictures in this example is with SVG.

Optimizing SVG for the web


To optimize an SVG for internet use requires several steps.

SVG is an XML dialect. Components like circle, rectangle, or text paths are described with nodes. Each node is an XML element. To keep the code clean, an SVG should use as few nodes as possible.

The SVG example is a circular icon with a coffee mug on it. You have 3 options to describe it with SVG.

Circle element with the mug on top


<circle style="opacity:1;fill:#717d82;fill-opacity:1;stroke:none;stroke-width:9.51950836;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" id="path36" cx="68.414307" cy="130.71523" r="3.7620001" />

Circular path with the mug on top


<path style="opacity:1;fill:#717d82;fill-opacity:1;stroke:none;stroke-width:1.60968435;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" d="m 68.414044,126.95318 a 3.7618673,3.7618673 0 0 0 -3.76153,3.76204 3.7618673,3.7618673 0 0 0 3.76153,3.76205 3.7618673,3.7618673 0 0 0 3.76206,-3.76205 3.7618673,3.7618673 0 0 0 -3.76206,-3.76204 z" id="path20" />

single path


<path style="opacity:1;fill:#717d82;fill-opacity:1;stroke:none;stroke-width:1.60968435;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:markers fill stroke" d="m 68.414044,126.95318 a 3.7618673,3.7618673 0 0 0 -3.76153,3.76204 3.7618673,3.7618673 0 0 0 3.76153,3.76205 3.7618673,3.7618673 0 0 0 3.76206,-3.76205 3.7618673,3.7618673 0 0 0 -3.76206,-3.76204 z m -1.21542,0.92656 h 2.40554 c 0.0913,0.21025 0.18256,0.42071 0.27387,0.63097 h 0.47284 v 0.60099 h -0.17984 l -0.1664,1.05989 h 0.24961 l -0.34779,1.96267 -0.21238,-0.003 -0.22326,1.41955 h -2.12492 l -0.22429,-1.41955 -0.22479,0.003 -0.34829,-1.96267 h 0.26304 l -0.16692,-1.05989 h -0.1669 v -0.60099 h 0.44752 c 0.0913,-0.21026 0.18206,-0.42072 0.27336,-0.63097 z m 0.12608,0.19068 c -0.0614,0.14155 -0.12351,0.28323 -0.185,0.42478 h 2.52336 c -0.0614,-0.14155 -0.12248,-0.28323 -0.18397,-0.42478 z m -0.65524,0.63097 v 0.21911 l 0.0594,5.2e-4 h 3.35844 l 0.0724,-5.2e-4 v -0.21911 z m 0.16846,0.41083 0.1669,1.05937 h 2.80603 l 0.16693,-1.05937 -1.57046,0.008 z m -0.061,1.25057 0.27956,1.5782 1.34411,-0.0145 1.34567,0.0145 0.28059,-1.5782 z m 1.62367,1.75441 -1.08519,0.0124 0.19325,1.2299 h 1.79835 l 0.19328,-1.2299 z" id="path2714" inkscape:connector-curvature="0" />

You probably can see the code becomes more complex and needs more characters to describe it. More characters in a file result, of course, in a larger size.

Node cleaning


If you open an example SVG in Inkscape and press F2, that activates the Node tool. You should see something like this:

Inkscape - Node tool activated

Inkscape – Node tool activated

There are 5 nodes that aren’t necessary in this example — the ones in the middle of the lines. To remove them, select them one by one with the activated Node tool and press the Del key. After this, select the nodes which define this lines and make them corners again using the toolbar tool.

Inkscape - Node tool make node a corner

Inkscape – Node tool make node a corner

Without fixing the corners, handles are used that define the curve, which gets saved and will increase file size. You have to do this node cleaning by hand, as it can’t be effectively automated. Now you’re ready for the next stage.

Use the Save as function and choose Optimized svg. A dialogue window opens where you can select what to remove or keep.

Inkscape - Dialog window for save as optimized SVG

Inkscape – Dialog window for save as optimized SVG

Even the little SVG in this example got down from 3.2 KB to 920 bytes, less than a third of its original size.

Back to the getfedora page: The grey voronoi pattern used in the background of the main section, after our optimization from Part 1 of this series, is down to 164.1 KB versus the original 211.12 KB size.

The original SVG it was exported from is 1.9 MB in size. After these SVG optimization steps, it’s only 500.4KB. Too big? Well, the current blue background is 564.98 KB in size. But there’s only a small difference between the SVG and the PNG.

Compressed files


$ ls -lh insgesamt 928K -rw-r--r--. 1 user user 161K 19. Feb 19:44 grey-pattern.png -rw-rw-r--. 1 user user 160K 18. Feb 12:23 grey-pattern.png.gz -rw-r--r--. 1 user user 489K 19. Feb 19:43 greyscale-pattern-opti.svg -rw-rw-r--. 1 user user 112K 19. Feb 19:05 greyscale-pattern-opti.svg.gz

This is the output of a small test I did to visualize this topic. You should probably see that the raster graphic — the PNG — is already compressed and can’t be anymore. The opposite is the SVG, an XML file. This is just text and can compressed, to less then a fourth of its size. As a result it is now around 50 KB smaller in size than the PNG.

Modern browsers can handle compressed files natively. Therefore, a lot of web servers have switched on mod_deflate (Apache) and gzip (nginx). That’s how we save space during delivery. Check out if it’s enabled at your server here.

Tooling for production


First of all, nobody wants to always optimize SVG in Inkscape. You can run Inkscape without a GUI in batch mode, but there’s no option to convert from Inkscape SVG to optimized SVG. You can only export raster graphics this way. But there are alternatives:

  • SVGO (which seems not actively developed)
  • Scour

This example will use scour for optimization. To install it:

$ sudo dnf install scour

To automatically optimize an SVG file, run scour similarly to this:

[user@localhost ]$ scour INPUT.svg OUTPUT.svg -p 3 --create-groups --renderer-workaround --strip-xml-prolog --remove-descriptive-elements --enable-comment-stripping --disable-embed-rasters --no-line-breaks --enable-id-stripping --shorten-ids

This is the end of part two, in which you learned how to replace raster images with SVG and how to optimize it for usage. Stay tuned to the Fedora Magazine for part three, coming soon.

Print this item

  ASP.NET Core 2.2.0-preview3 now available
Posted by: xSicKxBot - 10-18-2018, 10:14 AM - Forum: C#, Visual Basic, & .Net Frameworks - No Replies

ASP.NET Core 2.2.0-preview3 now available

Today we’re very happy to announce that the third preview of the next minor release of ASP.NET Core and .NET Core is now available for you to try out. We’ve been working hard on this release, along with many folks from the community, and it’s now ready for a wider audience to try it out and provide the feedback that will continue to shape the release.

How do I get it?


You can download the new .NET Core SDK for 2.2.0-preview3 (which includes ASP.NET 2.2.0-preview3) from https://www.microsoft.com/net/download/dotnet-core/2.2

Visual Studio requirements


Customers using Visual Studio should also install and use the Preview channel of Visual Studio 2017 (15.9 Preview 3 or later) in addition to the SDK when working with .NET Core 2.2 and ASP.NET Core 2.2 projects. Please note that the Visual Studio preview channel can be installed side-by-side with existing an Visual Studio installation without disrupting your current development environment.

Azure App Service Requirements


If you are hosting your application on Azure App Service, you can follow these instructions to install the required site extension for hosting your 2.2.0-preview3 applications.

Impact to machines


Please note that is a preview release and there are likely to be known issues and as-yet-to-be discovered bugs. While the .NET Core SDK and runtime installs are side-by-side, your default SDK will become the latest one. If you run into issues working on existing projects using earlier versions of .NET Core after installing the preview SDK, you can force specific projects to use an earlier installed version of the SDK using a global.json file as documented here. Please log an issue if you run into such cases as SDK releases are intended to be backwards compatible.

What’s new in Preview 3


For a full list of changes, bug fixes, and known issues you can read the release announcement.

Routing


We’ve introduced the concept of Parameter Transformers to routing in ASP.NET Core 2.2. A parameter transformer customizes the route generated by transforming parameter’s route values, and gives developers new options when generating routes. For example, a custom slugify parameter transformer in route pattern blog\{article:slugify} with Url.Action(new { article = "MyTestArticle" }) generates blog\my-test-article. Parameter transformers implement Microsoft.AspNetCore.Routing.IOutboundParameterTransformer and are configured using ConstraintMap.

These features are specific to the new endpoint routing system used in MVC by default in 2.2.

Parameter transformers are also used by frameworks to transform the URI to which an endpoint resolves. For example, ASP.NET Core MVC uses parameter transformers to transform the route value used to match an area, controller, action, and page.

routes.MapRoute(
 name: "default",
 template: "{controller=Home:slugify}/{action=Index:slugify}/{id?}");

With the preceding route, the action SubscriptionManagementController.GetAll() is matched with the URI /subscription-management/get-all. A parameter transformer doesn’t change the route values used to generate a link. Url.Action("GetAll", "SubscriptionManagement") outputs /subscription-management/get-all.

ASP.NET Core provides API conventions for using a parameter transformers with generated routes:

  • MVC has the Microsoft.AspNetCore.Mvc.ApplicationModels.RouteTokenTransformerConvention API convention. This convention applies a specified parameter transformer to all attribute routes in the app. The parameter transformer will transform attribute route tokens as they are replaced. For more information, see Use a parameter transformer to customize token replacement.
  • Razor pages has the Microsoft.AspNetCore.Mvc.ApplicationModels.PageRouteTransformerConvention API convention. This convention applies a specified parameter transformer to all automatically discovered Razor pages. The parameter transformer will transform the folder and file name segments of Razor page routes. For more information, see Use a parameter transformer to customize page routes.

Link Generation


Added a new service called LinkGenerator, it is a singleton service that supports generating paths and absolute URIs both with and without an HttpContext. If you need to generate links in Middleware or somewhere outside of Razor then this new service will be useful to you. You can use it in Razor, but the existing APIs like Url.Action are already backed by the new service so you can continue to use those.

return _linkGenerator.GetPathByAction(
 httpContext,
 controller: "Home",
 action: "Index",
 values: new { id=42 });

For now this is useful to link to MVC actions and pages from outside of MVC. We will add additional features in the next release targeting non-MVC scenarios.

Health Checks


DbContextHealthCheck


We added a new DbContext based check for when you are using Entity Framework Core:

// Registers required services for health checks
services.AddHealthChecks() // Registers a health check for the MyContext type. By default the name of the health check will be the // name of the DbContext type. There are other options available through AddDbContextCheck to configure // failure status, tags, and custom test query. .AddDbContextCheck<MyContext>();

This check will make sure that the application can communicate with the database you configured for MyContext. By default the DbContextHealthCheck will call the CanConnectAsync method that is being added to Entity Framework Core 2.2. You can customize what operation is run when checking health using overloads of the AddDbContextCheck method.

Health Check Publisher


We added the IHealthCheckPublisher interface that has a single method you can implement:

Task PublishAsync(HealthReport report, CancellationToken cancellationToken);

If you add an IHealthCheckPublisher to DI then the health checks system will periodically execute your health checks and call PublishAsync with the result. We expect this to be useful when you are interacting with a push based health system that expects each process to call it periodically in order to determine health.

Tags


In preview3 we added the ability to tag health checks with a list of strings when you register them:

services.AddHealthChecks()
 .AddDbContextCheck<MyContext>(tags: new[] { "db" });

Once you’ve done this then you can filter execution of your checks via tag:

app.UseHealthChecks("/liveness", new HealthCheckOptions
{ Predicate = (_) => false
});

app.UseHealthChecks("/readiness", new HealthCheckOptions
{ Predicate = (check) => check.Tags.Contains("db")
});

We see tags as a way for consumers of health checks, application authors, to use as a convenient grouping and filtering mechanism for their health checks. Not something that health check authors will pre-populate.

You can also customize what status a failure of this check means for your application, for example if your application is written such that it can handle the database not being available then a database being down might mean Degraded rather than UnHealthy.

Validation Performance Improvements


MVC’s validation system is designed to be extensible and flexible allowing developer to determine on a per request basis what validators apply to a given model. This is great for authoring complex validation providers. However, in the most common case your application only uses the built-in validation pieces such as DataAnnotations ([Required], [StringLength] etc, or IValidatableObject) and don’t require this extra flexability.

In 2.2.0-preview3, we’re adding a feature that allows MVC to short-circuit validation if it can determine that a given model graph would not require any validation. This results in significant improvements when validating models that cannot or do not have any associated validators. This includes objects such as collections of primitives (byte[], string[], Dictionary<string, string> etc), or complex object graphs without many validators.

For this model – https://github.com/aspnet/Mvc/blob/release/2.2/benchmarkapps/BasicApi/Models/Pet.cs – the table below compares the difference in Requests Per Second (RPS) with and without the enhancement:

Description RPS Memory (MB) Avg. Latency (ms) Startup (ms) First Request (ms) Ratio
Baseline 78,738 398 3.5 547 111.3 1.00
Validation changes 90,167 401 2.9 541 115.9 1.15

HTTP Client Performance Improvements


Some significant performance improvements have been made to SocketsHttpHandler by improving the connection pool locking contention. For applications making many outgoing HTTP requests, such as some Microservices architectures, throughput should be significantly improved. Our internal benchmarks show that under load HttpClient throughput has improved by 60% on Linux and 20% on Windows. At the same time the 90th percentile latency was cut down by two on Linux. See Github #32568 for the actual code change that made this improvement.

Requests Per Second Linux (higher is better)

image

Requests Per Second Windows (higher is better)

image

Request Latency Linux (lower is better)

image

Request Latency Windows (lower is better)

image

ASP.NET Core Module


We added support for the ability to detect client disconnects when you’re using the new IIS in-process hosting model. The HttpContext.RequestAborted cancellation token now gets tripped when your client disconnnects.

The ASP.NET Core Module also features enhanced diagnostics logs that configurable via the new handler settings or environment variables that expose a higher fidelity of diagnostic information.

<?xml version="1.0" encoding="utf-8"?>
<configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\clientdisconnect.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess"> <handlerSettings> <handlerSetting name="debugFile" value="debug.txt" /> <handlerSetting name="debugLevel" value="TRACE" /> </handlerSettings> </aspNetCore> </system.webServer> </location>
</configuration>

SignalR Java Client


Preview 3 includes a few notable changes to the SignalR Java Client as we progress towards a 1.0 release:

The “groupId” for the Maven package has changed to com.microsoft.signalr. To reference the new package from a Maven POM file, add the following dependency:

<dependency>
 <groupId>com.microsoft.signalr</groupId>
 <artifactId>signalr</artifactId>
 <version>1.0.0-preview3-35501</version>
</dependency>

Or in Gradle:

implementation 'com.microsoft.signalr:signalr:1.0.0-preview3-35501'

In Preview 3 we’ve changed all the APIs to be asynchronous, using RxJava. Our Java Client documentation will be updated to show the new usage patterns. We also have support for the invoke method, allowing the client code to wait for the server method to complete. This version also includes support for serializing custom types in method arguments and return values.

The Java Client currently requires Android API Level 26 (or higher). We are investigating moving down to a lower API level before RTM. If you are planning to use SignalR in an Java-based Android application, please comment on the GitHub issue tracking our Android API level support so we know what API level would work well for our users.

Migrating an ASP.NET Core 2.1 project to 2.2


To migrate an ASP.NET Core project from 2.1.x to 2.2.0-preview3, open the project’s .csproj file and change the value of the the element to netcoreapp2.2. You do not need to do this if you’re targeting .NET Framework 4.x.

Giving Feedback


The main purpose of providing previews is to solicit feedback so we can refine and improve the product in time for the final release. Please help provide us feedback by logging issues in the appropriate repository at https://github.com/aspnet or https://github.com/dotnet. We look forward to receiving your feedback!

Print this item

  Mobile - The Best Games for Two Players on iPhone, iPad and Android
Posted by: xSicKxBot - 10-18-2018, 10:14 AM - Forum: New Game Releases - No Replies

The Best Games for Two Players on iPhone, iPad and Android

By Michael Coffer 17 Oct 2018

Games bring us together or sometimes are just busted out to pass the time. Either way, some of the greatest things in life (*checks crib sheet of shmaltz*) are better shared. No, seriously, two player games offer the most direct chances for head-to-head competition or connection. No misty-eyed sentiment there, just a fact. One mind probing the ingenuity and exiguity of another through games.

If you want something epic to embark on on your own, how about taking a look at these great RPGs?

Maybe you like to play in person on the same screen, or even on different devices via local multiplayer, or instead online with asynchronous multiplayer. A test of reflexes or planning? The games below run the gamut, with variety enough for all kinds of people and situations. Give them a try the next time with a fellow gamer. You won’t be disappointed.

Uniwar


Developer: Spooky House Studios
Platforms:  iOS, Android
Price: Free with non-invasive IAP

uniwar

Uniwar is an ambitious turn-based strategy game which proudly wears its influences on its sleeve. It has the conquer-the-map tension of Advance Wars as well as the creative asymmetry of different player races: the fleshy Terrans, chitinous Insectoids and metallic…Robots. The abilities and interactions across these units are rather lively and varied, walking the fine edge between ‘interesting’ and ‘unbalanced’. Hotseat play is simple as can be, with quite a few maps offered, and there’s also online play.

Words with Friends 2


Developer: Zygna
Platforms:  iOS, Android
Price: Free

words

Words with Friends has been around almost as long as smartphones themselves, and it’s still a golden way to spend the better part of a day or longer. Yes, it’s like that other classic board game, and there’s a delicious subtext of who-spells-what-when. (Words score points but also…score points, making associations, repartee, even a kind of conversation). It just works on multiple levels, from a pure gameplay perspective but also in terms of social pay-out and connection. Oh, and on the gameplay front, it’s worth noting that advanced play involves so much more than just scoring the most impressive single word on a given turn. It also means thinking about positioning, letter draws and pacing, bonuses: basically long-con strategy stuff. Words with Friends is an oldie but a goodie, and a surprisingly handy way to keep in touch with friends.

Burgle Bros. (Review)


Developer: Fowers Games Inc.
Platforms:  iOS, Android
Price: $4.99

burgle

Co-op games are great, but even the greats tend to be best either purely solo or with the max player count. Burgle Bros, however, is unique in that it shines especially with two. With two, the joint is cased twice as fast, but hiding is much harder. To quickly reprise the game for those unfamiliar: players explore each floor’s tiles till they discover the safe, crack the combination, retrieve the  and advance to the next level. Patrolling guards and alarms will make things difficult, and if any player runs out of stealth points they risk getting caught and getting sent to the slammer. Some of the game’s more advanced tactics and interactions really only come into their own with a dynamic duo. Yes, gadgets and treasures along with character abilities combine but the real clincher is the pathing and alert system. Guards can be re-routed by tripping alarms, so the best teams take heat for each other. Two-player stealth doesn’t get much better than this.

Onitama


Developer: Asmodee Digital
Platforms:  iOS, Android
Price: Free (with expansions, content packs as optional DLC)

onitama2

Onitama is a game primarily about not losing. Sounds like weak, roundabout praise, I know, but what this means in practice is thinking many steps in advance, reasoning recursively to move from point B to point A, something surprisingly difficult. Woah there, let’s back up a little and actually talk about the game. Onitama is a two-player abstract game played on a two-dimensional square grid, much like chess. Players win by either capturing their opponent’s ‘King’ piece or alternatively by moving their own respective King onto the other player’s start space. The twist is how movement patterns work, for they are dictated by cards which can be used once, then eventually become playable by the opponent. There are only five given movement pattern cards (of a larger set) in a specific game, and this larger flow between good positioning and a good hand of cards makes the game quite intense. The app is free and as well-polished as any of Asmodee’s releases.

Neuroshima Hex


Developer: Portal Games
Platforms: iOS, Android
Price: $4.99, 2.99

neuroshima

This one features asymmetrical factions trying to control the board by selecting two of three tiles (six-sided hexes, that is) each turn. The post-apocalyptic setting and wildly divergent playstyles of the groups make it an unusually colorful strategy game, but these flourishes of variety do nothing to detract from the game’s balance. The base game only includes four races, but that alone is plenty to start with and the rest are available as paid DLC. Tile-laying madcap fun.

Glow Hockey 2


Developer: Natenai Ariyatrakool
Platforms: iOS, Android
Price: $0.99, Free.

Glow Hockey 2

Arcade- or action-style two player games are the epitome of beer-and-pretzel fun. Crystal clear consequences, nothing to overthink or overanalyze just quick wrists instead of quick wits. Pure impulse and reaction make for some reliable fun, and Glow Hockey is a passable digital dupe for Air Hockey, minus the constant click-clack of the pucks. The physics are satisfying, the controls responsive. It works well in an understated and way that is impossible to hype, but it still entirely worth recognizing.

Bounden


Developer: Adriann de Jongh
Platforms: iOS, Android
Price: $2.99, $1.99

bounden

Tech ads for phones would have you believe that the latest and greatest upgrade will enliven your social life, expand your horizons and altogether transform day-to-day existence. Innovative games and designs do as much to transform the mundane as any simple hardware upgrade would, and Bounden is the result of a marriage between both kinds of ingenuity. It’s a couple’s dance lesson, led by a delicate gyroscope and some nifty programming which mapped out the choreography, as guided by professionals. Like Twister, but artsy, and surprisingly effortless, though you will undoubtedly feel bashful trying it out. Poetry in motion, and action.

Developer: Versus Evil
Platforms: iOS, Android
Price: $4.99

antihero

There is no high road in Antihero. Mischief and misfortune rule in its Victorian, Dickensian setting which makes the sooty and sullen into something fun. (The art direction and design are majorly on point with this game). Plus, the game itself is incredibly intense and stressful, always putting players in a race for victory points over a shockingly brief time. The game still manages to have a distinct beginning, middle, and end while allowing for a non-trivial variety of build paths and playstyles. It’s fog-of-war and bluff systems inject just enough tension to keep the game from becoming deterministic, and it’s one of the best original digital games to come out within recent memory. Oh, and it’s exclusively for two players, either through asynchronous or real-time play.

Ready Steady Bang


Developer: Cowboy Games
Platforms: iOS, Android
Price: $0.99, Free.

ready steady bang

A western showdown at sundown. Quick-draw, one-shot, one-kill. Ready, Steady, Bang is this experience, over and over, with variable countdown timing and a variety of death animations. Technically there’s also a short ‘campaign’ mode vs. AI with ironclad timing thresholds, but the meat of the game can be reduced to a single perfectly timed gesture. Dead simple, quick and satisfying. Just don’t be the other guy. 

Developer: DIGIDICED
Platforms: iOS, Android
Price: $2.99

patchwork2

Patchwork may be pint-sized compared to some of its juggernaut neighbors on this list, but what it lacks in player count or time commitment it makes up in charm and crystal-clear, razor sharp strategy. (Those two make for quite the odd couple) Patchwork is a variable-setup perfect information abstract for two players. Players work to fill up their empty boards by adding patches to them, of various polyomino sizing, with the ultimate goal of filling the whole swath and collecting as many covetous buttons along the way. It is almost instantly intuitive yet perplexing and sophisticated even after dozens of plays, with turns chained together or telegraphed from miles away. A sweet game that can also be a hardcore match of wits.

What are your favourite games to play between two people? Let us know in the comments! 

Print this item

  Run and Scale a Distributed Crossword Puzzle App with CI/CD on Kubernetes (Part 3)
Posted by: xSicKxBot - 10-18-2018, 07:42 AM - Forum: Linux, FreeBSD, and Unix types - No Replies

Run and Scale a Distributed Crossword Puzzle App with CI/CD on Kubernetes (Part 3)

In Part 2 of our series, we deployed a Jenkins pod into our Kubernetes cluster, and used Jenkins to set up a CI/CD pipeline that automated building and deploying our containerized Hello-Kenzan application in Kubernetes.

In Part 3, we are going to set aside the Hello-Kenzan application and get to the main event: running our Kr8sswordz Puzzle application. We will showcase the built-in UI functionality to scale backend service pods up and down using the Kubernetes API, and also simulate a load test. We will also touch on showing caching in etcd and persistence in MongoDB.

Before we start the install, it’s helpful to take a look at the pods we’ll run as part of the Kr8sswordz Puzzle app:

  • kr8sswordz – A React container with our Node.js frontend UI.

  • puzzle – The primary backend service that handles submitting and getting answers to the crossword puzzle via persistence in MongoDB and caching in ectd.

  • mongo – A MongoDB container for persisting crossword answers.

  • etcd – An etcd cluster for caching crossword answers (this is separate from the etcd cluster used by the K8s Control Plane).

  • monitor-scale – A backend service that handles functionality for scaling the puzzle service up and down. This service also interacts with the UI by broadcasting websockets messages.

We will go into the main service endpoints and architecture in more detail after running the application. For now, let’s get going!

Read all the articles in the series:

 

3di6imeKV7hPtEx3cDcZM3dUG6aW4CWOPmdGOIFA

This tutorial only runs locally in Minikube and will not work on the cloud. You’ll need a computer running an up-to-date version of Linux or macOS. Optimally, it should have 16 GB of RAM. Minimally, it should have 8 GB of RAM. For best performance, reboot your computer and keep the number of running apps to a minimum.

Running the Kr8sswordz Puzzle App


First make sure you’ve run through the steps in Part 1 and Part 2, in which we set up our image repository and Jenkins pods—you will need these to proceed with Part 3 (to do so quickly, you can run the part1 and part2 automated scripts detailed below). If you previously stopped Minikube, you’ll need to start it up again. Enter the following terminal command, and wait for the cluster to start:

minikube start

You can check the cluster status and view all the pods that are running.

kubectl cluster-info kubectl get pods --all-namespaces
Make sure the registry and jenkins pods are up and running. 
goO2T3gv5m_ehnoPadbP8Eww76Kgh9oUzsSGD7v9

So far we have been creating deployments directly using K8s manifests, and have not yet used Helm. Helm is a package manager that deploys a Chart (or package) onto a K8s cluster with all the resources and dependencies needed for the application. Underneath, the chart generates Kubernetes deployment manifests for the application using templates that replace environment configuration values. Charts are stored in a repository and versioned with releases so that cluster state can be maintained.
Helm is very powerful because it allows you to templatize, version, reuse, and share the deployments you create for Kubernetes. See https://hub.kubeapps.com/ for a look at some of the open source charts available. We will be using Helm to install an etcd operator directly onto our cluster using a pre-built chart.

1. Initialize Helm. This will install Tiller (Helm’s server) into our Kubernetes cluster.

helm init --wait --debug; kubectl rollout status deploy/tiller-deploy -n kube-system

2. We will deploy an etcd operator onto the cluster using a Helm Chart.  

helm install stable/etcd-operator --version 0.8.0 --name etcd-operator --debug --wait
goO2T3gv5m_ehnoPadbP8Eww76Kgh9oUzsSGD7v9

An operator is a custom controller for managing complex or stateful applications. As a separate watcher, it monitors the state of the application, and acts to align the application with a given specification as events occur. In the case of etcd, as nodes terminate, the operator will bring up replacement nodes using snapshot data.

3. Deploy the etcd cluster and K8s Services for accessing the cluster.

kubectl  create -f manifests/etcd-cluster.yaml
kubectl  create -f manifests/etcd-service.yaml

You can see these new pods by entering kubectl get pods in a separate terminal window. The cluster runs as three pod instances for redundancy.

4. The crossword application is a multi-tier application whose services depend on each other. We will create three K8s Services so that the applications can communicate with one another.

kubectl apply -f manifests/all-services.yaml

5. Now we’re going to walk through an initial build of the monitor-scale application.

docker build -t 127.0.0.1:30400/monitor-scale:`git rev-parse 
--short HEAD` -f applications/monitor-scale/Dockerfile
applications/monitor-scale
goO2T3gv5m_ehnoPadbP8Eww76Kgh9oUzsSGD7v9

To simulate a real life scenario, we are leveraging the github commit id to tag all our service images, as shown in this command (git rev-parse –short HEAD).

6. Once again we’ll need to set up the Socat Registry proxy container to push the monitor-scale image to our registry, so let’s build it. Feel free to skip this step in case the socat-registry image already exists from Part 2 (to check, run docker images).

docker build -t socat-registry -f applications/socat/Dockerfile 
applications/socat

7. Run the proxy container from the newly created image.

docker stop socat-registry; docker rm socat-registry; docker run 
-d -e "REG_IP=`minikube ip`" -e "REG_PORT=30400" --name
socat-registry -p 30400:5000 socat-registry
goO2T3gv5m_ehnoPadbP8Eww76Kgh9oUzsSGD7v9

This step will fail if local port 30400 is currently in use by another process. You can check if there’s any process currently using this port by running the command
lsof -i :30400

8. Push the monitor-scale image to the registry.

docker push 127.0.0.1:30400/monitor-scale:`git rev-parse --short HEAD`

9. The proxy’s work is done, so go ahead and stop it.

docker stop socat-registry

10. Open the registry UI and verify that the monitor-scale image is in our local registry.

minikube service registry-ui
_I4gSkKcakXTMxLSD_qfzVLlTlfLiabRf3fOZzrm

11. Monitor-scale has the functionality to let us scale our puzzle app up and down through the Kr8sswordz UI, therefore we’ll need to do some RBAC work in order to provide monitor-scale with the proper rights.

kubectl apply -f manifests/monitor-scale-serviceaccount.yaml
ANM4b9RSNsAb4CFeAbJNUYr6IlIzulAIb0sEvwVJ

In the manifests/monitor-scale-serviceaccount.yaml you’ll find the specs for the following K8s Objects.

Role: The custom “puzzle-scaler” role allows “Update” and “Get” actions to be taken over the Deployments and Deployments/scale kinds of resources, specifically to the resource named “puzzle”. This is not a ClusterRole kind of object, which means it will only work on a specific namespace (in our case “default”) as opposed to being cluster-wide.

ServiceAccount: A “monitor-scale” ServiceAccount is assigned to the monitor-scale deployment.

RoleBinding: A “monitor-scale-puzzle-scaler” RoleBinding binds together the aforementioned objects.

12. Create the monitor-scale deployment and the Ingress defining the hostname by which this service will be accessible to the other services.

sed 's#127.0.0.1:30400/monitor-scale:$BUILD_TAG#127.0.0.1:30400/
monitor-scale:'`git rev-parse --short HEAD`'#'
applications/monitor-scale/k8s/deployment.yaml | kubectl apply -f -
goO2T3gv5m_ehnoPadbP8Eww76Kgh9oUzsSGD7v9

The sed command is replacing the $BUILD_TAG substring from the manifest file with the actual build tag value used in the previous docker build command. We’ll see later how Jenkins plugin can do this automatically.

13. Wait for the monitor-scale deployment to finish.

kubectl rollout status deployment/monitor-scale

14. View pods to see the monitor-scale pod running.

kubectl get pods

15. View services to see the monitor-scale service.

kubectl get services

16. View ingress rules to see the monitor-scale ingress rule.

kubectl get ingress

17. View deployments to see the monitor-scale deployment.

kubectl get deployments

18. We will run a script to bootstrap the puzzle and mongo services, creating Docker images and storing them in the local registry. The puzzle.sh script runs through the same build, proxy, push, and deploy steps we just ran through manually for both services.

scripts/puzzle.sh

19. Check to see if the puzzle and mongo services have been deployed.

kubectl rollout status deployment/puzzle
kubectl rollout status deployment/mongo

20. Bootstrap the kr8sswordz frontend web application. This script follows the same build proxy, push, and deploy steps that the other services followed.

scripts/kr8sswordz-pages.sh

21. Check to see if the frontend has been deployed.

kubectl rollout status deployment/kr8sswordz

22. Check to see that all the pods are running.

kubectl get pods

23. Start the web application in your default browser.

minikube service kr8sswordz

Giving the Kr8sswordz Puzzle a Spin


Now that it’s up and running, let’s give the Kr8sswordz puzzle a try. We’ll also spin up several backend service instances and hammer it with a load test to see how Kubernetes automatically balances the load.   

1. Try filling out some of the answers to the puzzle. You’ll see that any wrong answers are automatically shown in red as letters are filled in.

2. Click Submit. When you click Submit, your current answers for the puzzle are stored in MongoDB.

EfPr45Sz_JuXZDzxNUyRsfXnKCis5iwRZLGi3cSo
3. Try filling out the puzzle a bit more, then click Reload once. This will perform a GET which retrieves the last submitted puzzle answers in MongoDB.

Did you notice the green arrow on the right as you clicked Reload? The arrow indicates that the application is fetching the data from MongoDB. The GET also caches those same answers in etcd with a 30 sec TTL (time to live). If you immediately press Reload again, it will retrieve answers from etcd until the TTL expires, at which point answers are again retrieved from MongoDB and re-cached. Give it a try, and watch the arrows.

4. Scale the number of instances of the Kr8sswordz puzzle service up to 16 by dragging the upper slider all the way to the right, then click Scale. Notice the number of puzzle services increase.

goO2T3gv5m_ehnoPadbP8Eww76Kgh9oUzsSGD7v9

If you did not allocate 8 GB of memory to Minikube, we suggest not exceeding 6 scaled instances using the slider.

r5ShVJ4omRX9znIrPLlpBCwatys2yjjdHA2h2Dlq

In a terminal, run kubectl get pods to see the new replicas.

5. Now run a load test. Drag the lower slider to the right to 250 requests, and click Load Test. Notice how it very quickly hits several of the puzzle services (the ones that flash white) to manage the numerous requests. Kubernetes is automatically balancing the load across all available pod instances. Thanks, Kubernetes!
P4S5i1UdQg6LHo71fTFLfHiZa1IpGwmXDhg7nhZJ

​6. Drag the middle slider back down to 1 and click Scale. In a terminal, run kubectl get pods to see the puzzle services terminating.

g5SHkVKTJQjiRvaG-huPf8aJmLWS19QGlmqgn2OI

7. Now let’s try deleting the puzzle pod to see Kubernetes restart a pod using its ability to automatically heal downed pods

a. In a terminal enter kubectl get pods to see all pods. Copy the puzzle pod name (similar to the one shown in the picture above).

 b. Enter the following command to delete the remaining puzzle pod. 
kubectl delete pod [puzzle podname]

c. Enter kubectl get pods to see the old pod terminating and the new pod starting. You should see the new puzzle pod appear in the Kr8sswordz Puzzle app.

What’s Happening on the Backend


We’ve seen a bit of Kubernetes magic, showing how pods can be scaled for load, how Kubernetes automatically handles load balancing of requests, as well as how Pods are self-healed when they go down. Let’s take a closer look at what’s happening on the backend of the Kr8sswordz Puzzle app to make this functionality apparent.  

Kr8sswordz.png

1. pod instance of the puzzle service. The puzzle service uses a LoopBack data source to store answers in MongoDB. When the Reload button is pressed, answers are retrieved with a GET request in MongoDB, and the etcd client is used to cache answers with a 30 second TTL.  

2. The monitor-scale pod handles scaling and load test functionality for the app. When the Scale button is pressed, the monitor-scale pod uses the Kubectl API to scale the number of puzzle pods up and down in Kubernetes.

3. When the Load Test button is pressed, the monitor-scale pod handles the loadtest by sending several GET requests to the service pods based on the count sent from the front end. The puzzle service sends Hits to monitor-scale whenever it receives a request. Monitor-scale then uses websockets to broadcast to the UI to have pod instances light up green.

4. When a puzzle pod instance goes up or down, the puzzle pod sends this information to the monitor-scale pod. The up and down states are configured as lifecycle hooks in the puzzle pod k8s deployment, which curls the same endpoint on monitor-scale (see kubernetes-ci-cd/applications/crossword/k8s/deployment.yml to view the hooks). Monitor-scale persists the list of available puzzle pods in etcd with set, delete, and get pod requests.

goO2T3gv5m_ehnoPadbP8Eww76Kgh9oUzsSGD7v9

We do not recommend stopping Minikube (minikube stop) before moving on to do the tutorial in Part 4. Upon restart, it may create some issues with the etcd cluster.

Automated Scripts


If you need to walk through the steps we did again (or do so quickly), we’ve provided npm scripts that will automate running the same commands in a terminal.  

1. To use the automated scripts, you’ll need to install NodeJS and npm.

On Linux, follow the NodeJS installation steps for your distribution. To quickly install NodeJS and npm on Ubuntu 16.04 or higher, use the following terminal commands.

 a. curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
b. sudo apt-get install -y nodejs

On macOS, download the NodeJS installer, and then double-click the .pkg file to install NodeJS and npm.

2. Change directories to the cloned repository and install the interactive tutorial script:

 a. cd ~/kubernetes-ci-cd
b. npm install

3. Start the script

npm run part1 (or part2, part3, part4 of the blog series)

4. Press Enter to proceed running each command.

Up Next


Now that we’ve run our Kr8sswordz Puzzle app, the next step is to set up CI/CD for our app. Similar to what we did for the Hello-Kenzan app, Part 4 will cover creating a Jenkins pipeline for the Kr8sswordz Puzzle app so that it builds at the touch of a button. We will also modify a bit of code to enhance the application and enable our Submit button to show white hits on the puzzle service instances in the UI.  

Curious to learn more about Kubernetes? Enroll in Introduction to Kubernetes, a FREE training course from The Linux Foundation, hosted on edX.org.

This article was revised and updated by David Zuluaga, a front end developer at Kenzan. He was born and raised in Colombia, where he studied his BE in Systems Engineering. After moving to the United States, he studied received his master’s degree in computer science at Maharishi University of Management. David has been working at Kenzan for four years, dynamically moving throughout a wide range of areas of technology, from front-end and back-end development to platform and cloud computing. David’s also helped design and deliver training sessions on Microservices for multiple client teams.

Print this item

  XONE - My Memory of Us
Posted by: xSicKxBot - 10-18-2018, 03:01 AM - Forum: New Game Releases - No Replies

My Memory of Us



My Memory of Us is a reminiscence of a friendship between a boy and a girl. A friendship made during tough times. Times of terror, pain, and exclusion in a world where people were forced to live in two artificially detached worlds.

Publisher: IMGN.PRO

Release Date: Oct 10, 2018

Print this item

  XONE - SoulCalibur VI
Posted by: xSicKxBot - 10-18-2018, 03:01 AM - Forum: New Game Releases - No Replies

SoulCalibur VI



History Hides Away More Than One Truth... SOULCALIBUR VI represents the latest entry in the premier weapons-based, head-to-head fighting series and continues the epic struggle of warriors searching for the legendary Soul Swords. Taking place in the 16th century, revisit the events of the original SOULCALIBUR to uncover hidden truths. [Bandai Namco]

Publisher: Bandai Namco Games

Release Date: Oct 19, 2018

Print this item

  News - Rocket League's Halloween-Themed Event Returns
Posted by: xSicKxBot - 10-18-2018, 03:01 AM - Forum: Lounge - No Replies

Rocket League's Halloween-Themed Event Returns

The annual Haunted Hallows has returned to Rocket League. This limited-time Halloween-themed event adds a new currency to Psyonix's game that allows you to buy special cosmetic items for your battle cars.

During Haunted Hallows, playing in and completing online matches allows you to earn Candy Corn currency. Candy Corn can be redeemed for Halloween-themed battle car decals, toppers, wheels, and other cosmetic items. One of the limited items, called a Golden Pumpkin, unlocks one random battle car customization from the Nitro, Turbo, or Player's Choice crates.

Haunted Hallows continues until November 5 at 2:00 PM PST / 5:00 PM EST / 10:00 PM BST. Even if you can no longer earn Candy Corn once the event ends, you'll still be able to spend any leftovers you might have for a limited time. You'll have until November 8 at 2:00 PM PST / 5:00 PM EST / 10:00 PM BST to spend your leftover Candy Corn before they're gone for good.

No Caption Provided
Gallery image 1Gallery image 2

We think Rocket League is superb. In our Rocket League review, Miguel Concepcion gave the game a 9/10, writing, "The joy of Rocket League rests on the countless plans that are conceived and discarded every other second in any given match. Trying to predict where and how the ball will bounce next is a game within the game. Despite the use of cars, Rocket League emulates the emotional surges typical of The Beautiful Game, such as the rush of an unexpected fast break or a well-timed header into a goal. With Rocket League, the promising concept of combining two wonderful things--cars and soccer--is equally magnificent in execution."

Rocket League is available on Xbox One, PS4, PC, and Nintendo Switch. The game supports cross-play between Xbox One, PC, and Switch.

Print this item

 
Latest Threads
(Indie Deal) Directive 80...
Last Post: xSicKxBot
1 hour ago
News - Palworld Dev On AI...
Last Post: xSicKxBot
1 hour ago
How to Save 50% on Your N...
Last Post: codestar83
3 hours ago
How to Save 50% on Your F...
Last Post: codestar83
3 hours ago
Shopping on Shein? Use Co...
Last Post: codestar83
3 hours ago
First Time Shopping on Sh...
Last Post: codestar83
3 hours ago
Shein Existing User Coupo...
Last Post: codestar83
3 hours ago
Shein New User Coupon 202...
Last Post: codestar83
3 hours ago
Working Shein Coupon Code...
Last Post: codestar83
3 hours ago
Shein Discount Code 2026:...
Last Post: codestar83
3 hours ago

Forum software by © MyBB Theme © iAndrew 2016