AWS |
AWS Big Data Blog |
Visualize data using Apache Spark running on Amazon EMR with Amazon QuickSight |
https://aws.amazon.com/blogs/big-data/visualize-data-using-apache-spark-running-on-amazon-emr-with-amazon-quicksight/
|
Visualize data using Apache Spark running on Amazon EMR with Amazon QuickSightOrganizations often need to process large volumes of data before serving to business stakeholders In this blog we will learn how to leverage Amazon EMR to process data using Apache Spark the go to platform for in memory analytics of large data volume and connect business intelligence BI tool Amazon QuickSight to serve data to end users QuickSight … |
2021-07-29 19:14:57 |
AWS |
AWS Database Blog |
Architect a disaster recovery for SQL Server on AWS: Part 4 |
https://aws.amazon.com/blogs/database/part-4-architect-a-disaster-recovery-for-sql-server-on-aws/
|
Architect a disaster recovery for SQL Server on AWS Part In this series of posts Part Part Part and Part we compare and contrast the disaster recovery DR solutions available for SQL Server on Amazon Elastic Compute Cloud Amazon EC and help you understand the nature of these trade offs and the cost and complexity of implementing DR for SQL Server … |
2021-07-29 19:49:47 |
AWS |
AWS Database Blog |
Architect a disaster recovery for SQL Server on AWS: Part 3 |
https://aws.amazon.com/blogs/database/part-3-architect-a-disaster-recovery-for-sql-server-on-aws/
|
Architect a disaster recovery for SQL Server on AWS Part In this series of posts Part Part Part and Part we compare and contrast the disaster recovery DR solutions available for Microsoft SQL Server on Amazon Elastic Compute Cloud Amazon EC and help you understand the nature of these trade offs and the cost and complexity of implementing DR for SQL Server … |
2021-07-29 19:49:19 |
AWS |
AWS Database Blog |
Architect a disaster recovery for SQL Server on AWS: Part 2 |
https://aws.amazon.com/blogs/database/part-2-architect-a-disaster-recovery-for-sql-server-on-aws/
|
Architect a disaster recovery for SQL Server on AWS Part In this series of posts Part Part Part and Part we compare and contrast the disaster recovery DR solutions available for Microsoft SQL Server on Amazon Elastic Compute Cloud Amazon EC This post introduces three methods for implementing DR for SQL Server on AWS SQL Server backup and restore SQL Server … |
2021-07-29 19:48:56 |
AWS |
AWS Database Blog |
Architect a disaster recovery for SQL Server on AWS: Part 1 |
https://aws.amazon.com/blogs/database/part-1-architect-a-disaster-recovery-for-sql-server-on-aws/
|
Architect a disaster recovery for SQL Server on AWS Part In today s world it s just a matter of time before disaster happens and when it happens it s essential to recover your SQL Server databases and bring the systems online with minimal data loss and downtime To respond to and recover from an outage of SQL Server database access high availability HA and disaster recovery DR … |
2021-07-29 19:47:18 |
AWS |
AWS - Webinar Channel |
Achieving High Availability and Durability with Multi-AZ on Amazon RDS - AWS Online Tech Talks |
https://www.youtube.com/watch?v=QFdpvJ4aM-Q
|
Achieving High Availability and Durability with Multi AZ on Amazon RDS AWS Online Tech TalksTwo important considerations when working with databases is availability and durability Amazon RDS Multi AZ deployments provide enhanced availability and durability for Amazon RDS database DB instances making them a natural fit for production database workloads In this tech talk learn about how Multi AZ deployments on Amazon RDS work how Amazon RDS helps you achieve high availability and durability for your workloads through Multi AZ and how to enable Multi AZ for your Amazon RDS workloads Learning Objectives Learn about Amazon RDS Multi AZ deployments and how they work Learn about the benefits of Multi AZ including high availability and durability See how you can easily enable Multi AZ for your Amazon RDS workloads To learn more about the services featured in this talk please visit |
2021-07-29 19:05:05 |
js |
JavaScriptタグが付けられた新着投稿 - Qiita |
【JavaScript / jQuery / 非同期処理】「$(async function() {...})」と書いて良いのは jQuery 3.3系 以降っぽい |
https://qiita.com/shimamura_io/items/57e18f11d3cc0faaefce
|
【JavaScriptjQuery非同期処理】「asyncfunction」と書いて良いのはjQuery系以降っぽい前段function内で、ある非同期処理をawaitで待機する処理を書こうとしてハマった話です。 |
2021-07-30 04:59:30 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
pythonスクレイピングでページ内のリンク先のページのテキストを取り出したい場合(投稿ミスです) |
https://teratail.com/questions/351922?rss=all
|
pythonスクレイピングでページ内のリンク先のページのテキストを取り出したい場合投稿ミスですサイトにスクレイピングしたいページがページあったとしてそのページにリンク先が個ありそのリンク先の中に取り出したいテキストがあります。 |
2021-07-30 04:38:38 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
windowsにてproxyのインターネットオプション自動検出のレジストリで有効方法 |
https://teratail.com/questions/351921?rss=all
|
gtlan |
2021-07-30 04:31:49 |
海外TECH |
Ars Technica |
How one game’s delisting pokes a hole in the Xbox Game Pass promise |
https://arstechnica.com/?p=1783927
|
licenses |
2021-07-29 19:30:06 |
海外TECH |
DEV Community |
Images are hard. Is there a simpler way? |
https://dev.to/robole/images-are-hard-is-there-a-simpler-way-3cfa
|
Images are hard Is there a simpler way Using images on the web is deceptively complicated To give simple concise advice on the best way to use images on the web is tricky We all would like to avoid creating bulky slow webpages but it is a battle sometimes Images are at the forefront of that battle because they typically make up about of a page s weight The best coverage of images I read is a part series by Jason Grigsby from called Responsive Images which provided a thorough tutorial on responsive images it is dated in some respects but stil worth a read Also Jason wrote an article in called Guidelines and Rule for Responsive Images that provides some guidelines I haven t seen a worthy up to date predecessor to either of these articles Even MDN s guide to responsive images defers to Jason s article on background images and media queries Putting images on the web is not just about making them responsive there are other design and implementation considerations There are changes to responsive design too Recently some people are heralding the beginning of the new responsive era I wouldn t get too caught up in that but maybe it is a time to reassess The biggest issue for me right now is that things are convoluted and we should be looking for a simpler way There isn t a good set of guidelines for dealing with images in a holistic manner We are reaching for tools to whisk the complication away instead Today I d like to discuss some of these issues and provide some of that missing guidance Where doth the difficulty lie There are a lot of different considerations with images You bump into a heap of questions when you re using images such as What s the difference between the image formats Which should I use and when What is the browser support like now How do I load images in the most performant manner Should I preload some images Should I use lazy loading everywhere Do I need to use JavaScript for lazy loading What about that new content visibility property What about optimization What sizes do I use How do I automate the process Addy Osmani wrote a whole book on image optimization recently What should I do to make images accessible Do I use an alt attribute on all images What do I do with background images Can I make them responsive Chris Coyier also discussed this topic in his recent article Images are hard and said Putting images on websites is incredibly simple yes Actually yes it is You use lt img gt and link it to a valid source in the src attribute and you re done Except that there are counts fingers things you could and some you really should do that often go overlooked Chris goes on to list approximately of these things There are some bits that come to my mind also that Chris did not mention I m not going to make a complete list It s too much It makes me sad that things are like this There have been improvements in some areas better tooling is available to cover some of it but some of it is impractical I imagine it would feel overwhelming for someone who wants to build a website who is not a web developer but would like to or a beginner who wants to do things the right way We should reassure people that it is OK to just use an lt img gt with one appropriately sized image when you are starting out Your website will work fine You are breaking no laws You can learn more and improve on this later As I discuss later many of us are pretty loose with how we use images anyway so he who has not sinned should cast the first stone In particular I say this because it seems to me that that there is more pressure to make everything fast now Web performance is being hyped up People are talking more about Lighthouse scores The marketing guys are linking improvements in performance to revenue gains And there is the spectre of SEO reaper lurking SEO rankings are inexplicably being linked to performance now through Google s core web vital metrics But but I just want to build a small fan site for BTS Maybe that s why some people prefer to build discord bots instead of websites now For me there isn t a cohesive and clear narrative on how to do things well It s an accumulation of stuff that is not synthesized well I think it s important to look at what people are actually doing rather than what people are saying or suggesting to cut through the rhetoric Rereading Jason s article on guidelines from he says No one knows what the future of responsive images holds A few years from now we will probably look back on the hacks we re using and laugh at our naivety What do you think I m still waiting for holographic personal devices Where s the D CSS How are images really used on the webLet s look at the Web Almanac to see what is really happening The Web Almanac is an annual report which combines the raw stats and trends of the HTTP Archive with the expertise of the web community Let s look at last year s report with regard to images and performance In the median page weighted approximately MB for desktop and MB for mobile and a shocking MB for desktop and MB for mobile at the th percentile The median page weight contains approxmiately MB of images and approxmiately KB of JavaScript This is why people point at images as the lowest hanging fruit for reducing page weight Images are still the most requested type of resource though JavaScript is closing in The thing is it s not just the size of the resources It s the amount of requested resources This is the distribution of requests by content type The numbers seem bonkers to me It is common to have images on page The number of requests on desktop for the media page is the same as last year yet the page weight has increased by KB Pages are getting bigger In terms of performance it is hard to summarise This is the most succinct summary directly from the report On the surface we have seen optimistic signals about the new Core Web Vitals performance metrics At least half of the experiences are good across both desktop and mobile devices if we don t narrow down to consistently poor experiences on slower networks for Largest Contentful Paint While the newer metrics might suggest that there s an ongoing uptake in addressing performance issues the lack of significant improvements in First Contentful Paint and Time to First Byte is sobering Here the same network types are most disadvantaged as with Largest Contentful Paint as well as fast connections and desktop devices The Performance Score also portrays a decline in speed or perhaps a more accurate portrayal than what we measured in the past What the data shows us is that we must keep investing in improving performance for scenarios such as slower connectivity that we often don t experience due to multiple aspects of our privilege middle to high income countries high pay and new capable devices It also highlights that there s still plenty of work to be done in the areas of speeding up initial paints LCP and FCP and asset delivery TTFB Let s just say there is room for improvement What would you recommend Do the basic things well Ship less images Don t serve images for your average webpage This article has images Show restraint be selective This made me think of this quote from Dickens Subdue your appetites my dears and you ve conquered human nature Inline SVG iconsPasting SVG icons into your HTML will reduce the amount of requests In the age of static site generators and web components it is easier to do this in one place and avoid duplication Use a rule of thumb to set the maximum image resolution for your imagesYou can pick the maximum image size for your page based on its content For example if you have a blog and the maximum width of your blog post is px then serve images with a maximum width of px This will cover high resolution screens with x pixel density Jake Archibald mentions this as the lazy way in his article Halve the size of images by optimizing for high density displays Provide alternative textFor the sake of accessibility give a text alternative for an image in the alt attribute You should add alt text to most images unless it is considered decorative Eric Bailey discusses when you can skip altnerative text in the article Your Image Is Probably Not Decorative Spoiler altert it s not that often Stick to using one image format with img if you are inexperiencedFor a beginner I would suggest sticking with a single image format with lt img gt You don t need to learn a static site generator or JavaScript to get started making websites but it will make it easier in the longer run Use JPEG for photos and use either a PNG or SVG preferably for more graphical images such as icons and diagrams Maybe next year you can start using WEBP instead of JPEG and PNG At the moment WEBP is only partially supported in Safari If I follow this recommendation for this page I use images in the article totaling KB I did run images through squoosh to reduce their size That s already quite good Set dimensions for images to reduce layout shiftsDefine the dimensions of images through the width and height attributes or the aspect ratio property This will prevent parts of your page moving around when an image loads This is called cumulative layout shift CLS and is one of Google s core web vitals metrics I prefer to use aspect ratio but it has only just made it to Safari So now it is in all major browsers but keep this in mind if browser support is an issue for you If you want to learn more about the ins and outs of this you can read the article Setting Height And Width On Images Is Important Again It s a min read yowzer Lazy load images below the foldFor any images below the fold by below the fold I mean any image that would not be seen when the page is loaded you can lazy load these images This will defer loading of images that are off screen until the user scrolls near them You can do this by adding this attribute loading lazy to lt img gt This attribute is supported in of browsers now but looking at the most recent data Jan Jun on the HTTP Archive it is used by just of websites If I add lazy loading to this page only the the main image needs to be loaded that s just KB Learn the basics of SVG and use SVG for graphical images as often as you canI would recommend that you learn the basics of SVG Using SVG instead of PNG is an easy win Since SVG is a text based vector format files can be very small For example the main image for this article is a SVG and is KB SVGs can scale up and down without any loss of quality Effectively you can have image that looks good on any screen By Yug et al from Wikimedia Commons CC BY SA Optimize your imagesYou can use a web app like tinypng or squoosh to resize and reduce the file size of your images You can use SVGOMG for SVGs As I mentioned I would only to need to optimize PNGs for this post The rest were not that big or wide In any case I can drop them all into tinypng and get an optimized set in a zip If you don t use a lot of images then this is a quick process We will discuss automation of this in the next section If you do this much you will be ahead of the median website Test your website in your favourite auditing tool such as Webpagetest or Lighthouse to see where you re at I followed the steps above for this post and got for performance in PageSpeed Insights check it out for yourself When loaded for the first time the initial page weight is KB it is KB when requested a second time with caching This score reflects other implementation decisions I made but you can see that images ain t an issue Look at what browsers you need to support to see if you need to polyfill the loading attribute Beyond this you are getting into more technical territory but through automation you can take some of the work off your plate The extra yards and automationThe next biggest win is to use different versions of images for different screen sizes resolution switching and next gen formats for browsers that support them You can choose to do it yourself or use an Image CDN If you have a small website a manual process is manageable Just find a GUI app or command line tool whatever you are comfortable with one that will give do bulk resizing and optimization of your images for you You just want to point to a folder and have it spit out all of the alternative versions for you You can add the markup to your page yourself albeit this can become a bit tedious You can automate the insertion of this markup with some tools If you use a static site generator or a backend platform like Wordpress there are integrated options to do this for you such as There is Eleventy Image which is made for Eleventy but can be used outside of Eleventy also Nuxt related to Vue has nuxt image Gatsby related to React has gatsby plugin image Wordpress has plugins such as Jetpack To use these plugins some JavaScript may be required You could muddle through with Eleventy Image without knowing that much JavaScript It only makes sense to venture into Nuxt if you already know Vue and Gatsby if you already know React It s just to demonstrate that this is something that platform frameworks are treating as an important concern now which is good What about background images Background images are specified in CSS with background image For now it s probably best to stick with media queries if you want to swap out background images for different screen resolutions There is image set which can take multiple resolutions of an image and let the browser make the best decision about which one to use It is not quite ready for prime time yet there are caveats If you want to explore this further you can read this article Using Performant Next Gen Images in CSS with image set I would think you re in an excellent state if you have done this much Of course there are other optimizations you can do You have to draw a line somewhere Test your website out and see if more is necessary What about the new responsive era I don t know I prefer to focus on today ConclusionThis was meant to be a quick article Anyway I hope I shed some light on a few bits and bobs with regard to images on the web Images shouldn t be hard We shouldn t feel like we are spinning plates when we are building websites Happy coding Image AttributionThe featured distribution graphs are courtesy of the HTTPArchive with rights reserved under a Apache License |
2021-07-29 19:39:11 |
海外TECH |
DEV Community |
Haskell - The Most Gentle Introduction Ever |
https://dev.to/mpodlasin/haskell-the-most-gentle-introduction-ever-32ho
|
Haskell The Most Gentle Introduction Ever Who Is This Article For This article is the first in hopefully a series on functional programming in Haskell It doesn t assume any previous knowledge of Haskell or even functional programming for that matter It does however assume that you can already program in some programming language If you feel fairly comfortable in a language like JavaScript Python Java C C or anything similar you are more than capable of going through this tutorial You can rest assured that everything will be explained slowly and carefully The main point of this series will be to highlight the differences between Haskell and those typical languages that I ve mentioned So the less you know about Haskell and or functional programming the more illuminating and mindbending those articles will be for you I will also be showing you how learning Haskell can benefit you in writing better code even when using other more mainstream languages If you feel stuck when it comes to your programming skills and if you feel like you haven t been stretching your coding muscles lately Haskell will be perfect for you Whether you are a senior coding veteran or a junior dev that barely started your career Haskell will push you to be an all around better programmer If you need more convincing in the past I ve written about why it is beneficial to learn Haskell even if you don t plan to code in it professionally Are you ready Let s go then Installing Haskellers ToolbeltIf you are on this journey with me we ll begin by installing some software needed to run Haskell But if you are still unsure unconvinced you don t have to do even that I will be keeping all the examples as simple as possible so it will be enough to just use a REPL like this one The only thing you need to do there is to empty the file in the REPL we will start from scratch and run ghci command in the terminal You are ready now so if you don t want to install Haskell tools on your computer you can safely omit the rest of this section Still here All in on learning Haskell Awesome The download section on haskell org can be a bit confusing so I would recommend you to go straight to ghcup page You just have to copy the script from the website paste it to your terminal and run it ghcup is a Haskell toolchain installer This means that it allows you to easily install and manage various tools related to Haskell The installation process guides you by hand you will just have to answer a few questions The installer will ask you about installing secondary packages stack and hls hls is Haskell Language Server It allows IDE plugins and extensions to work seamlessly with Haskell So it s worth having it since the very beginning stack is a build tool that allows you to create isolated Haskell projects easily This would be massive overkill for simple one file scripts that we will be writing at the beginning However once we move on to writing more complex programs Stack will be extremely helpful Whether you prefer to install it now or later it s up to you After running the script you can test if everything went well by running the ghci command in your terminal We ve mentioned quite a few tools so far but ghci is the one that we will actually use in this article It is an interactive environment for running Haskell code ghc no i at the end stands for Glasgow Haskell Compiler ghc is in fact its own command that will allow us to compile code into binary executables However if we just want to play around with code and test some stuff an interactive ghc called ghci is perfect for that because it allows us to run Haskell code without the compilation step On top of that it has some handy commands which we will use today If you type in ghci in the terminal and get an error it likely means that your terminal doesn t know how to find the ghci binary You might have to close and reopen the terminal window after finishing the installation If it s still not working then depending on the environment you are using you will have to edit your bashrc or zshrc file Luckily ghcup is very tidy it just installs everything in a single directory in my case Users mateusz podlasin ghcup In that directory there is a bin folder You need to point the terminal you are using to that folder So in my case I had to add the following line to my zshrc file export PATH Users mateusz podlasin ghcup bin PATH After closing the terminal and opening it again running ghci should now result in the following output GHCi version for helpPrelude gt If you see this you are ready to begin our Haskell adventure Playing With BooleansA boolean in Haskell named Bool is one of the simplest and most familiar types that a programmer encounters regularly No matter what programming language you ve used previously you likely know booleans very well That s why they will be perfect for learning the basics of Haskell In Haskell boolean values are written starting with a big letter so we have True and False In ghci you can type in t True t is a ghci command for checking the type of a value Note that this command is not a part of Haskell itself just a ghci functionality After clicking enter as a result you will see True BoolYou can read as has type So this line says that the value True has type Bool Just to make sure we understand that correctly let s check the type of value False t FalseWe see False BoolAs you probably anticipated the value False has type Bool as well So True and False are of the same type And in Haskell quite reasonably True and False are the only values of the type Bool Contrary to t the lt value gt lt type gt syntax is a part of Haskell language And this should already hint at something to you If a language has a dedicated syntax to express the sentence lt value gt has type lt type gt it means that this language probably treats types fairly seriously As we will soon see types are at the very heart of programming in Haskell As a matter of fact sometimes when coding in Haskell you will be thinking about types more than about actual values And while we are here note that the name of the type Bool is also written starting with a big letter in Haskell just like the names of values This will be important later Let s now start writing some actual code We will still use ghci to run it but we need to write it in an actual file Create a file called lesson hs in REPL I linked the file is already created for you and is called main hs Note the hs suffix which represents Haskell source code files You can create that file anywhere you want You can also edit it with any text editor you desire I would recommend using Visual Studio Code After installing VS Code immediately go to the Extensions tab on the left and install the Haskell extension It will give you many handy features It will for example start displaying the types of values you hover over If you have trouble with the extension not detecting ghc remember to edit the PATH in the bashrc zshrc file just like I described in the setup section After that restart the editor After you ve created the file make sure to be using the terminal in the same directory where the file is located To do that you can leave ghci by running q Then switch directories to a proper one and run the ghci command once again In ghci try loading the file by running l lesson hsEven though your file doesn t have any code in it just yet you should see a success message like this of Compiling Main lesson hs interpreted Ok one module loaded If you don t see that you ve likely run ghci in a different directory than your file is located But if you see the message you are ready to begin coding So we have types Bool and values True and False What can we do with them The most basic thing known from other languages would be to assign a value to a variable Write the following line in lesson hs x TrueNow load it again in ghci with the same command as before l lesson hs remember to save the file beforehand In ghci you can now type xAs a response you will see TrueThis shows that indeed we assigned the value True to the variable x Now let s do something that might surprise you and that will show you just like radically different Haskell is from regular languages In lesson hs file let s write x Truex FalseLoad it again in ghci You will see the following output of Compiling Main lesson hs interpreted test hs error Multiple declarations of x Declared at lesson hs lesson hs x False The most important part of that error message says that there are Multiple declarations of x It turns out that in Haskell once you ve assigned a value to a variable you can t overwrite it or change it in any way Ever If it s a Bool you can t change it from True to False If it s a number which we will cover in future articles you can t change its value For example you can t even increase the value of a numeric variable by one This sounds incredibly radical to someone used to traditional imperative programming Idioms like i orsomeBoolean someBoolean etc are so prevalent in those languages that thought of only assigning a value to a variable once sounds well frankly just crazy Is it even possible to write actual real world programs with a language like this The answer is absolutely and we will see that quite soon But for now you just have to accept that once assigned a value you can t ever change that variable anymore You ve likely heard about immutability at this point I already wrote about immutability in JavaScript for example That s the thing though In those other imperative languages immutability has to be introduced via some library or specific programming approach It s exactly the reverse in Haskell Here immutability is the default and you have to use libraries or certain methods to achieve mutable variables state That might sound cumbersome but it s not an accident that the principle of immutability became so popular even in the mainstream mutable by default languages It really makes your code less buggy safer and more predictable Ok enough of talky talk So we know that once created we can t alter that variable But it is by no means useless We can now call some functions using it Remove the x False line from your file so that loading the file in ghci works again and x has the value True Then run the following in ghci not xAs an answer you will see FalseNow if you ve coded in Python or a language with similar syntax you might think that not is some special reserved keyword for negating booleans No In Haskell not is just a regular function In a typical language a function call would look something like that not x But this is not the case in Haskell In Haskell you write the function name and then instead of parenthesis you provide arguments by separating them with a single space So to call a function f on a variable x you would write f xIf f accepted two parameters instead of typical f x y you would write f x yIf f accepted three parameters you would write f x y zAnd so on You get the idea Let s go back to our not function We called it on a variable but nothing is preventing us from calling it on values directly In ghci type not Trueand you will see FalseTyping not Falseresults in the response TrueNow just as values functions have types as well We can investigate the type of not function in the same way we investigated the types of True and False using the t command in ghci Type t notand you will see the following answer not Bool gt BoolWe again see the symbol which means has type We see the Bool type mentioned twice The only new symbol here is gt As you probably expect lt something gt gt lt something else gt reads as function from lt something gt to lt something else gt So the output that we got from ghci can be read as not has the type of function from Bool to Bool Or more naturally not is a function from Bool to Bool This shouldn t be surprising When we call not on a Bool value we expect to see the Bool value as a result the opposite of what we ve passed If we called not True and got as an answer we would be extremely confused wouldn t we Writing FunctionsAt this point I would like to prove to you that there is nothing magical about not If it s just a regular function you should be able to write it by yourself right Yup and that s exactly what we will do right now We will write our first Haskell function We will do that in our lesson hs file Under the x definition write the following line myNot x if x then False else TrueLet s break down what is happening here a little bit First we have something that looks exactly like a call of a function beginning with the name myNot and later the parameters of the function separated by spaces In this particular case we have only one parameter which we named x Next we have an assignment character after which we write the actual function the part which we call function body In this case the function body is just a simple if then else expression Let s break it down Right after the if keyword we have to provide a condition Our condition is really x True You probably recognize from other languages In Haskell it means the same thing it s an equality operator But x True is equivalent to simply writing x After all if x True evaluates to True this means that x itself has the value of True So we can just write x as our condition for brevity If the condition in if then else our x evaluates to True the function will return the value after the then keyword If it evaluates to False the function will return the value after the else keyword Quite simple Note that in Haskell if then else is an expression This means that in the end it evaluates to a value one of the two provided after then and else keywords In JavaScript for example this means that it has more common with a ternary operator rather than regular if else statement The following code in JavaScript const someVariable condition firstValue secondValue would be therefore equivalent to the following in Haskell someVariable if condition then firstValue else secondValueLet s return to the definition of our function myNot x if x then False else TrueI will admit that I ve used x as a parameter name here just to confuse you a little bit For a second you might think that there is a naming conflict between x that we defined earlier and the x from the function You can however convince yourself that that s not true by loading the file again in ghci It loads properly without any errors On top of that our newly defined function myNot actually works Calling in ghci myNot TruereturnsFalseand vice versa We can even use the function on our x variable defined above it Running myNot xresults in FalseThat is correct because in the file we assigned x to True So there is no naming conflict but it is true that we are shadowing the x variable If we now wanted to use it in the function body we couldn t because we decided to give the same name to the function parameter So just for clarity let s change the name of the function parameter to b as in boolean The whole file looks now like this x TruemyNot b if b then False else TrueThis will help us not get confused Perhaps the function definition that we came up with is not at all what you expected We moaned for so long about the importance of types but now we ve written something that borderline looks like untyped Python What s going on Where are those scary types It turns out that Haskell s type system is so powerful that most of the time it can infer what should be the type of a function or a value you ve written Save the file load it in ghci and write t myNotYou will see myNot Bool gt BoolSo indeed your custom myNot function has the same type as the original not But how Haskell came to that conclusion It s quite straightforward Since you wrote if x then using x as a condition Haskell knew that parameter x had to be a Bool That s because Haskell is again quite strict here and only the value of type Bool can be used as a condition in the if then else construct Note that we ve written as a condition here It s completely fine to provide values of other types after then and else keywords we will see that in future articles And at the same time you wrote then False else True Here in both cases then case and else case you are returning a Bool Therefore the output of your function has type Bool as well Those two facts combined bring us to a conclusion that the type of myNot has to be Bool gt Bool Haskell inference is extremely good and the compiler may only have problems if you write something that is inherently vague And yet it is still recommended to put the type signature of the function in the code You will see that in the vast majority of Haskell codebases the types are always written explicitly You can do it by writing the type of the function above its definition myNot Bool gt BoolmyNot x if x then False else True Writing down the type in the code has some major advantages First of all it increases the readability of the code Types are incredibly useful as documentation of what your function does In Haskell you will often be able to find out what a given function does simply by looking at its name and type signature No need to read the implementation Function called not that has type Bool gt Bool It surely must be a function negating the booleans Second of all it s valuable to write the type of the function before writing the function definition itself If you do that Haskell s type system will guide you and help validate that your code works as expected After all inferred type of a function may differ from what you have intended Writing the type beforehand is almost like sketching or designing a function before actually writing it Personally I find that writing down the type first often gives me a better idea of how to implement the function This is an example of a skill that Haskell teaches you that you can easily transfer to other languages Even when I m writing untyped JavaScript I still always start by thinking about what kind of type signature my function will have This helps me to write code faster and make fewer bugs even though I have to be my own type checker in that case So we have successfully replicated the not function myNot has the same type and behaves in the same way Running myNot True evaluates to False running myNot False evaluates to True But let s stay on this topic a bit longer and try to write the same function in a completely different manner Let s write myNot Bool gt BoolmyNot True FalsemyNot False TrueYou can check for yourself that this loads properly in the ghci You can also test that myNot still behaves the same as before What is happening here We used what is known as pattern matching Instead of declaring the parameter of the function as a variable named b we can avoid naming it entirely and simply substitute it with a value that will be provided to the function once it s called When we make a call myNot True Haskell looks for a definition that fits such a call In this case it s the first line not counting the type signature If we make a call myNot False then it s the second line that matches that call Hence the name pattern matching Hopefully it s clear that if you call myNot with a variable not an actual value pattern matching will still work just fine In that case Haskell simply evaluates the value of the variable and performs pattern matching then So with this new definition calling myNot xStill properly returns FalseSo we have two versions of the same function myNot Bool gt BoolmyNot b if b then False else TruemyNot Bool gt BoolmyNot True FalsemyNot False TrueFor all intents and purposes these two functions behave in the same way and have the same type Which one you prefer depends entirely on you Do you want to see yet another way to write the same function Here you go myNot Bool gt BoolmyNot b b False otherwise TrueArguably this way of writing the function looks the most exotic It uses what is known as guards A guard is basically a condition which is placed between and characters When the condition is satisfied a function body that is defined after gets executed In our case the first guard is b True But just as before we can write the same condition as simply b If b is True this condition is satisfied and the function body that returns False will be executed Otherwise so when b is not True the function body that returns True will be executed Interestingly there is nothing magical about the keyword otherwise Are you noticing a pattern here where some feature of the language is not really a feature but simply something coded in that language You can convince yourself that this is true by writing otherwise in the ghci console As a response you will see TrueYup otherwise is nothing more than a regular variable holding the value True Just as our x is So without the otherwise our guarded version of the function would look like this myNot Bool gt BoolmyNot b b False True TrueJust as in if then else a condition has to be a Bool value If the last condition is set to True like it s the case here it will always hold and therefore it will act as a catchall case if the guards above it fail Calling it otherwise is just done to make this a bit more readable One more thing to mention here is that we used indentation You see that lines starting with characters are moved a bit to the right If we didn t do it and wrote the code like this myNot Bool gt BoolmyNot b b False True Truewe would get an error while loading that file in ghci test hs error parse error on input b False Indenting code makes it more readable for humans and as you can see also helps the compiler understand that a given line is still a part of the definition that began in the previous line How much you indent the code is not important to the compiler it has to be at least one space But adding a few more spaces is better to keep the code nicely formatted for humans So we have written myNot in different ways Which one you prefer depends on you Nevertheless it s extremely valuable to get to know all constructs that we ve used if then else pattern matching and guards because they appear almost all the time in Haskell code We used them in separation here but in the future you will see that you can mix those constructs in various ways especially when writing more complex code Creating Types and ValuesSo far we have written a custom not function for the Bool type But what if we could recreate the Bool type itself as well as its values Is it even possible Indeed it s possible and even simple Let s create a MyBool type It will have two values MyTrue and MyFalse It might seem that we are getting a bit possessive here wink wink but that s only to avoid conflicts with already existing names At the top of our lesson hs file let s write data MyBool MyTrue MyFalseEasy right After you load that file in the ghci you can run t MyTrue to doublecheck that MyTrue has type MyBool mirroring how True has type Bool MyTrue MyBoolThe same is true for MyFalse MyFalse MyBoolUnfortunately I lied to you a bit If you type this in ghci MyTrueYou will see a mysterious message lt interactive gt error •No instance for Show MyBool arising from a use of print •In a stmt of an interactive GHCi command print itIt happens because ghci tries to simply print the value but It doesn t know how This is part of the language that will cover in future articles Luckily we don t have to worry about it for now Haskell can create sane default for printing you just have to command it to do that by adding the following line to type definition data MyBool MyTrue MyFalse deriving Show If you now call ghci MyTrueIt will simply print back MyTrueAs I said a sane default In the future we will learn how to customize that printing capability but for now it s perfectly fine You can now write functions that operate on this brand new type just as we wrote a function for the built in Bool type So if we wanted myNot to work on that custom MyBool type we would do it like that myNot MyBool gt MyBoolmyNot MyTrue MyFalsemyNot MyFalse MyTrueWe simply replaced all occurrences of Bool with MyBool all occurrences of True with MyTrue and all occurrences of False with MyFalse We now have both a built in version Bool and a custom version MyBool of a boolean type Wouldn t it be convenient to write functions to switch between them Let s do it First let s write a boolToMyBool function It will take a regular Haskell Bool and transform it to our custom MyBool boolToMyBool Bool gt MyBoolboolToMyBool b if b then MyTrue else MyFalseAnd let s write a function that will do the reverse myBoolToBool MyBool gt BoolmyBoolToBool MyTrue TruemyBoolToBool MyFalse FalseWe used two different ways to write a function on purpose here Note that we wouldn t be able to use if then else with MyBool type as a conditional because it works only on the built in Bool type But on the other hand we can use pattern matching in both because pattern matching works with custom defined values without any problems Great We can now transform back and forth between built in and custom types Let s try that Load the file in ghci with both definitions and run boolToMyBool TrueYou will see MyTrue as a response Now let s try to transform the same value back Let s write myBoolToBool boolToMyBool True You will see True as the response What happened here is that we converted True to MyTrue using the boolToMyBool function inside the parenthesis and then we took that result and converted it back to True using the myBoolToBool function all in a single expression Is it a bit nonsensical example Perhaps but it shows us how we can chain multiple function calls In fact the brackets around the first function call are important Try to run the following in ghci myBoolToBool boolToMyBool TrueThe compiler will show a fairly elaborate error message but if you read it carefully you will find the following sentence The function myBoolToBool is applied to two arguments but its type MyBool gt Bool has only oneHa so we found what is the problem Indeed our code looks as if we are trying to apply the myBoolToBool function to two parameters boolToMyBool and True Remember how f x y was representing calling a function f on two parameters That s exactly what we are doing here In that case f is myBoolToBool x is boolToMyBool and y is True We have to show the compiler that we want to apply the myBoolToBool function to a single parameter And that parameter is a result of calling boolToMyBool on True So we wrap that call in parenthesis to make that clearer both to the compiler and us myBoolToBool boolToMyBool True Can we use those conversion functions for something more practical than needlessly translating booleans back and forth Absolutely we can use them to rewrite our myNot implementation once again We can use the fact that the Bool type has already the not function defined It works exactly how we want it just operates on different types So let s take a MyBool value convert it to Bool use not on it and then convert it back to MyBool myNot MyBool gt MyBoolmyNot mb boolToMyBool not myBoolToBool mb Let s review step by step how that function works Since it s a function of type MyBool gt MyBool its argument is a MyBool that s why we called it mb We pass that variable to a function myBoolToBool mb and as a result we are getting something of type Bool Then we are applying not on it by writing not myBoolToBool x Note that at this step the type doesn t change we are feeding not a Bool and getting a Bool again since not is of type Bool gt Bool At the end we convert back to MyBool by writing boolToMyBool not myBoolToBool x which is the return value of our function This could be again summarised as follows mb MyBool myBoolToBool mb Bool not myBoolToBool mb Bool boolToMyBool not myBoolToBool mb MyBoolThis technique of tracking which value has which type is extremely valuable especially when just starting with Haskell Whenever you feel lost about how a certain function works I would encourage you to analyze all the types of all the values in that function You will discover that when you know all the types well it s much easier to understand how the code works and what it does This is the second example of a skill that Haskell teaches you which is immediately transferable to programming in other languages Even if your day to day language is loosely typed and doesn t have types in its actual syntax you can still use this way of thinking to better understand functions while reading code In time you will discover that this allows you to understand code much faster especially the code that you haven t written yourself ConclusionSo we played with Bools in Haskell serving as our introductory lesson in that language We ve learned the basics of Haskell s syntax we ve seen how to create and use functions and even how to create some simple datatypes In future articles we will elaborate on those ideas quite a bit so if you are hooked on Haskell by now as I hope you are I would recommend to follow me on Twitter I don t run any kind of newsletter email or anything like that so that s the best way to get notified when a new article drops If you have any questions or comments regarding the article you can reach me there as well I would like to keep improving this article so that it serves others as best as possible Thanks for reading and see you soon |
2021-07-29 19:13:49 |
海外TECH |
DEV Community |
Hey Android, Where's my Process? |
https://dev.to/_nikhi1/hey-android-where-s-my-process-4f0e
|
Hey Android Where x s my Process Sometimes good guys gotta do bad things to make the bad guys pay Harvey SpecterThis article is a followup on this medium article written by my friend Calvin I would highly recommend you to go through it as it lays the foundation for this article We would be particularly dealing with process kill scenarios and explore potential solutions to mitigate Android App LifecycleEvery app runs in its own sandbox environment i e its own process Every process is allotted some amount of RAM from the existing available RAM by the OS Nowadays Android is becoming more and more battery friendly and it s doing that partly by aggressively killing background apps that are not in the foreground after a relatively small amount of time This of course depends on various other factors happening on the device like available RAM etc Check out this site for more information about how different manufacturers deal with background apps restrictions So it s the developer s responsibility to test his her app for such scenarios for optimal user experience How to simulate a process kill Now that we have established the reason to test these edge cases its time to simulate a process kill scenario The Naive wayThe camera app on your phone is resource intensive and requires a lot of RAM to run Once you start the app this results in the systematic killing of your background apps almost instantly Mind well this might not be true for every scenario Only opt for this approach if you are lazy The Nerdy way Let s get our hands dirty and run some terminal commands Assuming an Android emulator is available and you have the sample project running with applicationId com processkill example go to terminal and type this command these commands have been tested on Android emulator running P adb shell pidof com processkill exampleThis should output the ProcessID in which the app is running Now go ahead and minimize the app by pressing the HOME button This is needed to be done as Android would not kill a user focused activity app process adb shell am kill com processkill exampleBy running this command we have in principle simulated a process kill scenario If you run the earlier command again you should see an empty string being printed on console meaning the process has been actually terminated Time for retrospectiveGo ahead and test your app by running the above commands and see how it behaves in different scenarios If you have a well crafted app and it works well in the above scenario then you should be proud of yourself achieving such a feat If you are facing some issues then read on Who s the culprit And I don t mean it s you There could be a number of reasons for this Maybe the way you have implemented the app architecture without giving careful thought about the state of the app in such scenarios You were short on time which is mostly the case in fast pace driven development Android itself Add your own reason The issue feature about Android is that it will automagically re create the last Activity and also re attach the Fragments if any from your Task Stack if the user resumes the app after it has been killed by OS This is different from iOS behaviour wherein the OS doesn t restore the last ViewController automatically Though the intention from Android seem correct resulting in better UX it throws a challenge for us developers to handle these scenarios and think of it while designing apps Let s see what we can do here and strike a balance between UX and state of the app But first repeat after me Static and or member variables defined in the Application or any Singleton class won t survive the process kill and will reset to their default values which could be null Remember NullPointerException Scenario You don t have any caching persistence strategy implemented for your app In such scenarios the easiest way out would be to start from a clean slate Here is the code that can potentially go inside the BaseActivity class Developer Warning️Use this solution only as a last resort override fun onCreate savedInstanceState Bundle super onCreate savedInstanceState if savedInstanceState null val currentProcessId android os Process myPid toString if currentProcessId savedInstanceState getString PID KEY val intent Intent applicationContext SplashActivity class java intent flags Intent FLAG ACTIVITY NEW TASK or Intent FLAG ACTIVITY CLEAR TASK startActivity intent finish override fun onSaveInstanceState outState Bundle super onSaveInstanceState outState outState putString PID KEY android os Process myPid toString What this piece of code is doing is that if we detect our app has been recreated because of the process kill then we re direct the app to the launcher activity which in this case is the SplashActvity At first you would be tempted to use this solution in every app you have built But this would be bad for UX as the user expects to start off from where he she left your application Scenario Let s try to put everything in Bundle gt objects that are intended to be used across process boundaries such as with IPC Binder transactions between activities with intents and to store transient state across configuration changes Please refer to this github repo for a sample project Checkout the master branch for the project if you want to follow along The code is very simple to understand and is pretty much a boilerplate with classical MVC I m using sample json files packed inside assets folder to keep things simple and readable The json file holds some randomly generated data to be consumed by the app The main components of the app are DataProviderThis is a simple interface to abstract the source from where the data is coming from In our case it s a file read from assets MainFragmentListing page of all the users DetailFragmentDetail page about a particular user Now if you place around with the app it should work fine in every scenario including process death Do verify it by running the terminal commands to simulate a process death scenario we discussed above Now follow these steps Checkout branch scenario Run the appMinimize itLook at logcat for some suprises com processkill example E AndroidRuntime FATAL EXCEPTION main Process com processkill example PID java lang RuntimeException android os TransactionTooLargeException data parcel size bytes at android app servertransaction PendingTransactionActions StopInfo run PendingTransactionActions java at android os Handler handleCallback Handler java at android os Handler dispatchMessage Handler java at android os Looper loop Looper java at android app ActivityThread main ActivityThread java at java lang reflect Method invoke Native Method at com android internal os RuntimeInit MethodAndArgsCaller run RuntimeInit java at com android internal os ZygoteInit main ZygoteInit java Caused by android os TransactionTooLargeException data parcel size bytes at android os BinderProxy transactNative Native Method at android os BinderProxy transact BinderProxy java at android app IActivityTaskManager Stub Proxy activityStopped IActivityTaskManager java at android app servertransaction PendingTransactionActions StopInfo run PendingTransactionActions java This is because when we communicate across different process boundaries there is limit on the data we can share with the other process wiz MB In our case it s a bit over MB and hence the exception TransactionTooLargeException which results in process being killed when in background Therefore always carefully examine what you are going to put in Bundle and size implications Save the smallest amount of data possible which could be one of the following primary column id when reading from database or file path when reading from disk or some other souce from where you can reliably re create app state somehow ortry try try orfallback to Scenario Side note on FlutterFlutter apps run inside a single activity These apps would by default start from the first widget defined in case of Don t keep activities process death scenarios unless explicitly handled This first widget would be the one defined by home property inside MaterialApp widget That s It for this time Thank you for hanging around Hope you learned something new Feel free to reach out on twitter nikhi for any questions feedback you have Further ReadingProcesses and ThreadsParcels and BundlesAndroid Lifecycle CheatsheetTransactions Too Large ExpectionSave State Module for ViewModelFlutter Native State Plugin |
2021-07-29 19:13:30 |
海外TECH |
Engadget |
Twitter Spaces updates makes it easier to share and discover live audio |
https://www.engadget.com/twitter-spaces-share-discover-195041240.html?src=rss
|
Twitter Spaces updates makes it easier to share and discover live audioTwitter s Spaces is getting another update that makes the audio feature easier to share and discover Now users will be able to compose a new tweet directly from the Space which will link to the audio chat and any accompanying hashtags While it was previously possible to compose new tweets while listening to a Space having the composer directly in the space will allow participants to more easily tweet about the conversation as it s happening On iOS Twitter is also adding new “guest management controls that allows hosts to more easily view who is in a Space and who has requested to speak Finally the company is adding a new search feature to the Spaces tab it started testing in June Now instead of just a curated list of active Spaces users with access to the tab will also be able to search for Spaces by title or the name or handle of a host No update on when more people will have access to the Spaces section of the app though on iOS updated the guest management put the control bar for participants on top of the guest management page so it is always accessible added section state for Host to better see what type of participants they have in their space including pending speaker requests pic twitter com IgFGIuVEーSpaces TwitterSpaces July Twitter has been steadily updating Spaces since introducing the Clubhouse competitor late last year The company has recently added support for a web version of the feature and has started experimenting with allowing hosts to sell tickets to the conversations |
2021-07-29 19:50:41 |
海外TECH |
Engadget |
‘Stanley Parable’ and ‘Gone Home’ devs team up to form Ivy Road studio |
https://www.engadget.com/davey-wreden-karla-zimonja-stanley-parable-gone-home-ivy-road-annapurna-interactive-194504904.html?src=rss
|
Stanley Parable and Gone Home devs team up to form Ivy Road studioAlong with showing off a bunch of upcoming games during its showcase on Thursday Annapurna Interactive announced some developer partnerships One of them is with a new studio called Ivy Road from powerhouse indie developers Davey Wreden and Karla Zimonja I am thrilled to announce that zusty C and I have started a new video game studio called Ivy Road We are working with A i on an unannounced game and I can t wait until we re able to finally show it to all of you pic twitter com NjBFvrVーDavey Wreden HelloCakebread July Wreden is best known as the writer and designer of The Stanley Parable Zimonja previously worked at Fullbright and is the co creator of indie hits Gone Home and Tacoma They re now combining their talents at Ivy Road which is based in Vancouver The duo didn t reveal any details about the first game they re working on for AI However they did note that composer Daniel Rosenfeld aka C of Minecraft fame is part of the team along with severalotherdevelopers |
2021-07-29 19:45:04 |
海外TECH |
Engadget |
‘Sound Shapes’ creator Jessica Mak is making a game with Annapurna Interactive |
https://www.engadget.com/annapurna-jessica-mak-partnership-193524928.html?src=rss
|
Sound Shapes creator Jessica Mak is making a game with Annapurna InteractiveThe last time Jessica Mak released a game was in when they worked with Sony s Santa Monica Studio to create Sound Shapes The game went on to become one of the PlayStation Vita s standout gems in part thanks to an unforgettable soundtrack that featured contributions from Shaw Han Liem of I Am Robot and Proud fame Indie Game The Movie composer Jim Guthrie and Beck soothing moments from the game i m making everything s drawn procedurally with c and shaders no models or textures screenshotsaturdaypic twitter com fMpmmSeーJessica Mak mango lychee June After nearly a decade since the release of Sound Shapes Mak is working with Annapurna Interactive on a new project the publisher announced on Thursday during its developer showcase The game doesn t have an official name or release date yet but Mak shared some details about the project nbsp Like Everyday Shooter and Sound Shapes music will play a central part in the experience and part of the reason Mak took a break from making games was to become a better musician quot The music for me is very much as important as the game part of it quot Mak said They went on to describe the game as an action adventure experience that they hope will surprise players |
2021-07-29 19:35:24 |
海外TECH |
Engadget |
'Outer Wilds: Echoes of the Eye' is an expansion of a modern classic |
https://www.engadget.com/outer-wilds-echoes-of-the-eye-dlc-announcement-trailer-193418035.html?src=rss
|
x Outer Wilds Echoes of the Eye x is an expansion of a modern classicHow do you create DLC for a game whose very purpose is to offer a confined looping world Honestly after watching the trailer for Outer Wilds Echoes of the Eye I still have no idea Outer Wilds was one of our favorite games of building an enthralling mystery into a non linear exploration game that effectively restarts every minutes Outer Wilds Echoes of the Eye the game s first and final DLC will build on the game with new narrative threads and locales Not much is known beyond that but based on the strength of the original I m down to play an expanded version Hopefully the expansion will persuade more people to try out this gem of a game which as Devindra Hardawar wrote in our nbsp quot Favorite games of quot article quot demands patience and an adventurous spirit quot but quot promises adventure like nothing else quot Echoes of the Eye will be available September th for PS Xbox One and PC via Steam and Epic Games Store for |
2021-07-29 19:34:18 |
海外TECH |
Engadget |
Cat simulator 'Stray' heads to PlayStation and PC in early 2022 |
https://www.engadget.com/stray-gameplay-trailer-2022-release-date-192712479.html?src=rss
|
Cat simulator x Stray x heads to PlayStation and PC in early The last time we saw Stray was in the form of a cinematic trailer Sony shared in that highlighted the game s futuristic neon soaked setting and adorable feline protagonist At the time we didn t get to see the game in action a fact that Annapurna Interactive has now remedied The publisher shared a slice of gameplay footage from the title during its recent showcase and said it would release Stray sometime in early In the opening moments of Stray our feline protagonist finds himself injured and separated from his family Gameplay involves using his physical abilities as a cat to navigate the environment and solve puzzles In the time honored tradition of duos like Ratchet and Clank partway through the adventure you ll meet a drone named B They will allow you to converse with the city s other robotic inhabitants and interact with certain objects in the environment The cat has a playful side to his personality and you can do things like scratch furniture interact with vending machines and rub up against the legs of the robots you meet Good stuff When Stray comes out next year it will be available on PlayStation PS and PC Developer BlueTwelve Studio promised to show off more of the game before then |
2021-07-29 19:27:12 |
海外TECH |
Engadget |
'What Remains of Edith Finch' will hit iOS on August 16th |
https://www.engadget.com/what-remains-of-edith-finch-ios-release-date-192428137.html?src=rss
|
x What Remains of Edith Finch x will hit iOS on August thAnnapurna Interactive is making lots of announcements today about its future but the publisher hasn t forgotten its roots either What Remains Of Edith Finch the very first game AI released is coming to iOS on August th The first person mystery which was developed by Giant Sparrow debuted on PC and PS in April AI brought it to Xbox One and Nintendo Switch later It s a well reviewed game that encapsulates much of AI s ethos of releasing quot personal emotional and original quot games Perhaps the iOS release will help it find a whole new audience |
2021-07-29 19:24:28 |
海外TECH |
Engadget |
'Skin Deep' is a stinky sci-fi shooter from indie icon Brendon Chung |
https://www.engadget.com/skin-deep-brendon-chung-new-fps-steam-annapurna-192141277.html?src=rss
|
x Skin Deep x is a stinky sci fi shooter from indie icon Brendon ChungBrendon Chung knows what people expect out of a first person shooter Guns Check Strafing Yep Ammo drops in strategic yet predictable locations You betcha A sneezing system Uh sure Noxious green clouds that follow you when you re smelly giving away your location Um Actually yes Skin Deep is the latest project out of Chung s studio Blendo Games and it s his first ever FPS title He s known for developing clever first person action and puzzle games including Gravity Bone Thirty Flights of Loving and Quadrilateral Cowboy and visually Skin Deep fits perfectly into his repertoire The only difference is the gun quot I d never done one where you just have a gun and you straight up shoot people quot Chung said quot I thought you know what This is something that I love This is a game genre that has been so important to me for a long time This is kind of my attempt at making a bunch of little things that I like in first person shooter games and putting them into a game that I think will be funny quot Annapurna InteractiveChung started coding back in elementary school when he would spend hours between classes customizing levels in FPS classics Doom and Quake and he continued modding as titles like Half Life Quake and Doom hit the scene He got a job at a mainstream studio in Los Angeles but continued working on his own projects and eventually went fully independent picking up a handful of accolades in the process Despite a deep personal connection to the FPS genre Chung hasn t released a shooter of his own ーbut that s going to change when Skin Deep hits Steam The actual release date is still up in the air a fact that may be concerning for anyone who remembers waiting for Quadrilateral Cowboy a game that was quot six months away quot for well over three years On the Skin Deep FAQ page one of the Qs reads quot Is Skin Deep going to take years of development time like your previous game Quadrilateral Cowboy quot and the accompanying answer is quot I hope not quot Regardless of a release date today publisher Annapurna Interactive showed off a new trailer for Skin Deep A new extra smelly trailer Skin Deep is a non linear espionage shooter set on a spaceship and played from the perspective of an armed cryogenically frozen insurance agent whose job is to protect the vessel from invading space pirates The game looks lighthearted yet sophisticated in classic Blendo fashion it involves shooting sneaking and solving puzzles and all of it is animated in Chung s signature cubist style This ties back to FPS history too ーSkin Deep and most of Blendo Games titles are built on a modified port of the Doom engine idTech quot I ve played like a bazillion FPS games because I just really enjoy them but I feel like there s so much that can be explored and that I wish these games would explore quot Chung said One of the many odd mechanics in Skin Deep is a sneezing function that appears in particularly dusty or peppery environments quot If you re crawling through a dusty vent your little sneezy air level will increase then you ll do a big sneeze noise quot Chung said quot And there s a bag of pepper that we have If you shoot it a big cloud of pepper flies out You can pick up a pepper bag and throw it at someone and they ll start sneezing quot And then there s the odor system which leaves literal clouds of stink behind the player alerting the space pirates and generally causing problems There s logic to this system The player becomes smelly only once they re expelled from the space ship s trash chute fish bones and all and then they climb back aboard The smell clouds disappear once the player figures out how to wash up All of this falls under a mission titled Protocol Being Smelly And What To Do About It Annapurna Interactive quot I love it when games just do things that you don t expect quot Chung said quot Like for me one of the big games that was important for me back in the day was Far Cry back in That game did so much cool stuff for the first person genre that was not technologically advanced but they just made design choices that were just interesting and funny Like you had this map that you had to pull out but it didn t pause and you had to look at a map while getting shot at with guns And so I thought there s so much space to do stuff like that Why not make people smelly quot All of Chung s games are part of the same cinematic universe so to speak and Skin Deep is closely tied to Flotilla a space based battleship game he published in quot They all kind of talk to each other they all kind of share characters quot Chung said quot We re still figuring out details but right now the character that we re playing as in this game is the character from a game I made before called Flotilla It s fun to make these little connections between the different games and have them all kind of share things between them quot There s no word on which of Chung s future projects will receive the smell clouds from Skin Deep |
2021-07-29 19:21:41 |
海外TECH |
Engadget |
'Solar Ash' brings surreal 3D platforming to PC, PS4 and PS5 on October 26th |
https://www.engadget.com/solar-ash-release-date-ps4-ps5-epic-games-store-october-191727611.html?src=rss
|
x Solar Ash x brings surreal D platforming to PC PS and PS on October thAs a kid Alx Preston spent a significant amount of time as a member of the audience watching his brother sing in choir and opera groups One night he found himself sitting in a pew at the heart of a large elegant church letting the sounds of yet another performance wash over him He was tired He also happened to be playing a lot of The Legend of Zelda Ocarina of Time at home “I kind of fell into a dream state Preston said “I was playing a lot of Ocarina of Time at the time and so the vocals of that mixed with this kind of fantastical vision of going through a forest I think for me that Ocarina of Time was one of those formative games that really allowed me to see what was possible within the medium Preston was the creative energy behind Hyper Light Drifter a pixelated D title that helped define a generation of neon coated indie hits in the mid s and he s the founder of LA based studio Heart Machine He and a growing team of developers have been working on their sophomore release Solar Ash since late It s a third person D game set in a dreamlike sci fi space called the Ultravoid Annapurna InteractiveTo put it in terms of Zelda titles Hyper Light Drifter is A Link to the Past and Solar Ash is Ocarina of Time “ Ocarina of Time was really the game that felt so much bigger and limitless in its scope and scale and adventures Preston said “It built a believable world that I could live in and it was D and so of course I always had some idea I might jump into D Today publisher Annapurna Interactive announced Solar Ash will hit PC and PlayStation platforms on October th five years after Heart Machine began working on it “Hyper Light was a way for me to get started it was a way for me to be more grounded and put together a crew and understand can I do this Can I actually make games Preston said “And so having answered that question then the natural next step for me was something in D Can I put something out there that really opens up the world and makes you feel like you can truly escape into something a creation that is otherworldly that you otherwise wouldn t have the experience of A lot of my childhood was spent escaping into those bigger experiences Hyper Light Drifter was a deliciously difficult D action RPG and at first glance Solar Ash looks like the third person D interpretation of that same game world It s bright and ethereal with an emphasis on massive enemies and rapid fire mechanics The protagonist Rei is a slender assassin on a journey to save her home from the Ultravoid a supermassive black hole hungry for whole planets Even though it s D Solar Ash looks so similar to Hyper Light Drifter that Preston has had to clarify whether it s a sequel a few times over To be clear it s not But to be fair Preston has personally contributed to the confusion Annapurna Interactive“I did ambiguously say it s in the same universe Preston said “Not like Marvel Cinematic Universe but literally in a universe So a million galaxies away technically sure It s still in a universe So it s kind of a goof way of saying it I would say that there are connected threads between the games because I am who I am as a creator as an artist but it s its own game it s its own identity in many ways It s not trying to say I m a sequel or anything like that to Drifter Solar Ash is an action platformer with Heart Machine s DNA baked into its code It doesn t attempt to do too much and the team instead has focused on implementing a handful of core mechanics and making them feel as perfect as possible Solar Ash is filled with radioactive environments and grotesque enemies and it s all about fluidity and agility surfing through the ruins of lost civilizations at the center of a black hole There are about people on the Solar Ash team including Hyper Light Drifter and It Follows composer Rich Vreeland otherwise known as Disasterpeace That s a bigger dev team than the original Hyper Light Drifter crew but then again Solar Ash is a bigger game “For Drifter and for Solar Ash there are similar threads of really focusing on the core elements that are impactful and getting as much mileage out of those as we possibly can Preston said “Because we have a small team making a big ass project and the team has been excellent in carrying through on everything that we could Everyone s done incredible heavy lifting and worn a lot of different hats as you have to do on this scale of team for this scale of project As Heart Machine s second game there s a lot riding on Solar Ash Preston has established his brand as an innovative thoughtful developer and Solar Ash is his chance to defend it ーnot only in the court of public opinion but in his own mind “Audience expectation absolutely factors into it but for me I m my own worst critic Preston said “Like any artist like any creative person you hate your own work until you don t and then you let it go I mostly focused on how do we feel we re succeeding internally Rather than what is the audience going to expect out of that Or what kind of score will you get on Metacritic Of course if Solar Ash ends up feeling like a trippy sci fi extrapolation of Ocarina of Time it should be a success on all fronts |
2021-07-29 19:17:27 |
海外TECH |
Engadget |
Jason Schwartzman plays a floating brain in musical adventure 'The Artful Escape' |
https://www.engadget.com/jason-schwartzman-artful-escape-release-date-xbox-pc-190522944.html?src=rss
|
Jason Schwartzman plays a floating brain in musical adventure x The Artful Escape x The Artful Escape is an idealized vision of everything the music industry could be straight out of the brain of Australian rockstar Johnny Galvatron In five years of development at least The Artful Escape has transformed into a psychedelic adventure game with a living soundtrack of original folk and rock music a cast of ridiculous characters otherworldly environments and a roster A list voice actors including Jason Schwartzman Lena Headey Michael Johnston Carl Weathers and Mark Strong The Artful Escape is set to hit Xbox One Xbox Series X and S and PC on September th priced at It ll hit Game Pass at the same time and it s being published by indie hit maker Annapurna Interactive Galvatron is the frontman of The Galvatrons a high energy Australian rock group that toured the continent and opened for bands like Def Leppard and Cheap Trick in the late s However for the past few years Galvatron has been a game developer first and foremost In the s he used YouTube videos to teach himself how to create a game in Unreal building off the D animation and coding courses he took back in college right before Warner Music signed him He then founded a studio rented some office space secured a deal with Annapurna and somewhere along the way he ended up in a recording booth with Jason Schwartzman quot We just hung out and spoke about David Bowie and Bob Dylan and video games and stuff quot Galvatron said quot And it was just like it was a moment for me He came into the studio and he had like a cape and he had a dressing gown and like an umbrella and a little tiny Korg synth He brought all these things and he put them all around him and he would like do the line with the cape and then he would throw the cape around another way and then he would hold the umbrella and do the line I was just on my feet the whole time quot Annapurna InteractiveIn The Artful Escape the main character Francis Vendetti goes on a multidimensional journey to discover his true stage persona ーwhich seems to be a David Bowie esque shred machine ーwhile at the same time reckoning with the legacy of his late uncle a Bob Dylan style folk icon He travels through strange and trippy worlds playing music and hunting for his true sound To give a sense of the game s oddball vibe Schwartzman plays a giant brain perched atop a pile of discarded fish parts quot He s a really funny comic support character quot Galvatron said quot Like a very lofty British alien like a brain floating in an aquarium on a flotilla of goldfish fins It ll make sense when you see it quot For Galvatron The Artful Escape is exactly that ーan escape His career as a mainstream rockstar was ultimately unfulfilling filled with red tape stagnant bureaucracy and awkward interactions In between shows he often found himself curled up in the corner of the tour bus reading Dune or writing his own novel watching the continent fly by nbsp As a game developer he s building the industry he actually wanted to be a part of one line of code at a time quot It s kind of what I dreamed the music industry would be this world of magical doors and these great experiences instead of like drinking Melbourne Bitter at an RSL in Wollongong trying not to get beaten up because you look like you re in Poison quot Galvatron said He laughed and without missing a beat added quot Can you use that quote in its entirety quot Sure thing Galvatron ーbut only because that sounds like a solid premise for a sequel to The Artful Escape |
2021-07-29 19:05:22 |
海外TECH |
CodeProject Latest Articles |
Building a Teams Power App Using a Custom Connector Part 3: Editing Data and Writing Back to the App |
https://www.codeproject.com/Articles/5309046/Building-a-Teams-Power-App-Using-a-Custom-Connec-3
|
Building a Teams Power App Using a Custom Connector Part Editing Data and Writing Back to the AppIn this article we learn how to edit data in your Power App and write it back to the app helping your organization s teams quickly and easily manage events with consistent information |
2021-07-29 19:38:00 |
海外TECH |
CodeProject Latest Articles |
Using Docker for Facial Identification |
https://www.codeproject.com/Articles/5305699/Using-Docker-for-Facial-Identification
|
docker |
2021-07-29 19:32:00 |
海外科学 |
NYT > Science |
Russian Science Module Fired Its Thruster After I.S.S. Docking |
https://www.nytimes.com/2021/07/29/science/russia-module-space-station.html
|
dockingthe |
2021-07-29 19:31:41 |
海外科学 |
NYT > Science |
Albert Bandura, Leading Psychologist of Aggression, Dies at 95 |
https://www.nytimes.com/2021/07/29/science/albert-bandura-dead.html
|
Albert Bandura Leading Psychologist of Aggression Dies at He was most known for his Bobo doll experiment in which children mimicked adults in attacking an inflatable doll The work challenged basic tenets of psychology |
2021-07-29 19:50:32 |
海外科学 |
NYT > Science |
Some Are Chasing Extra Vaccine Shots, While Scientists Debate |
https://www.nytimes.com/2021/07/29/science/covid-vaccine-booster-third-shot.html
|
ethical |
2021-07-29 19:03:21 |
海外TECH |
WIRED |
Simone Biles and the Unprecedented Olympic Pressure |
https://www.wired.com/story/simone-biles-olympic-pressure
|
psychological |
2021-07-29 19:27:31 |
医療系 |
医療介護 CBnews |
「適切なケアマネジメント手法」作成までを整理-20年までの第1期振り返り |
https://www.cbnews.jp/news/entry/20210728203517
|
厚生労働省 |
2021-07-30 05:00:00 |
ニュース |
BBC News - Home |
Daphne Caruana Galizia: Malta responsible for journalist death - inquiry |
https://www.bbc.co.uk/news/world-europe-58012903
|
murder |
2021-07-29 19:38:09 |
ニュース |
BBC News - Home |
Storm Evert: South West braces for 75mph winds and heavy rain |
https://www.bbc.co.uk/news/uk-england-cornwall-58010633
|
heavy |
2021-07-29 19:23:05 |
ニュース |
BBC News - Home |
Man Utd friendly at Preston called off after Covid outbreak |
https://www.bbc.co.uk/sport/football/58018041
|
Man Utd friendly at Preston called off after Covid outbreakManchester United s pre season friendly at Preston on Saturday has been called off after a small number of positive Covid cases were identified at the Premier League club |
2021-07-29 19:26:12 |
ニュース |
BBC News - Home |
Red Bull's Hamilton penalty request rejected |
https://www.bbc.co.uk/sport/formula1/58014629
|
lewis |
2021-07-29 19:18:43 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
大和証券社長がコロナ禍で確信したデジタルとリアルの「ベストミックス」戦略 - チェンジリーダーの哲学 |
https://diamond.jp/articles/-/278108
|
大和証券 |
2021-07-30 05:00:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
モノタロウが通販の超勝ち組、アスクルは6月実績が前年割れのベルーナより苦境 - コロナで明暗!【月次版】業界天気図 |
https://diamond.jp/articles/-/277941
|
前年割れ |
2021-07-30 04:55:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
ワークマン「エクセル経営」の極意は現場にあり、名物専務が実店舗で解説!【土屋哲雄・動画】 - ワークマン式「しない経営」 土屋哲雄 |
https://diamond.jp/articles/-/277742
|
解説 |
2021-07-30 04:50:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
ニトリvs無印良品、6月はそろって2桁減収も「本当にまずい」のはどっち? - コロナで明暗!【月次版】業界天気図 |
https://diamond.jp/articles/-/277940
|
前年同期 |
2021-07-30 04:45:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
日本の「賃金・消費低迷」の残念すぎる実態、世界との衝撃的格差はコロナ前から - 金融市場異論百出 |
https://diamond.jp/articles/-/278198
|
日本の「賃金・消費低迷」の残念すぎる実態、世界との衝撃的格差はコロナ前から金融市場異論百出年時点の「コロナとの戦い」では、米国は「負け組」、日本は「勝ち組」のような気がしたが、情勢は激変した。 |
2021-07-30 04:42:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
メダルとコロナの「Wラッシュ」で、日本に起こる3つのこと - 今週もナナメに考えた 鈴木貴博 |
https://diamond.jp/articles/-/278112
|
金メダル |
2021-07-30 04:40:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
中国人が寂しく感じた五輪開会式、過去の栄光に縛られた日本の「黄昏」 - 莫邦富の中国ビジネスおどろき新発見 |
https://diamond.jp/articles/-/277973
|
中国ビジネス |
2021-07-30 04:35:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
コロナの次は銃撃事件、米NY州が「緊急事態宣言」発令のわけ - DOL特別レポート |
https://diamond.jp/articles/-/278111
|
緊急事態 |
2021-07-30 04:30:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
老後資産を守りながらハイリスク投資を有効に活用する方法はある - 初心者のための「老後資金」対策講座 |
https://diamond.jp/articles/-/278028
|
新興企業 |
2021-07-30 04:25:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
富裕層の節税対策を封じ込める!?「相続税と贈与税の一体化」 - News&Analysis |
https://diamond.jp/articles/-/277971
|
newsampampanalysis |
2021-07-30 04:20:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
リモートワークで生まれた新たな福利厚生、全社でeスポーツ大会・1日の歩数を競う… - News&Analysis |
https://diamond.jp/articles/-/278109
|
newsampampanalysis |
2021-07-30 04:15:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
「成功した例外」に学ぶ、課題解決の成否を分ける決定的な差 - イノベーション的発想を磨く |
https://diamond.jp/articles/-/277923
|
課題解決 |
2021-07-30 04:10:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
テーパリング戦略、MBS先行論にパウエル氏は難色 - WSJ発 |
https://diamond.jp/articles/-/278227
|
難色 |
2021-07-30 04:06:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
子どもの「性教育」で、親が絶対にやってはいけないこと - 100倍明るい家族計画 |
https://diamond.jp/articles/-/277041
|
性的接触 |
2021-07-30 04:05:00 |
ビジネス |
ダイヤモンド・オンライン - 新着記事 |
スマホ画面がこうなったら詐欺のエサになる直前!危ない、引き返せ - それ、ネット詐欺です! |
https://diamond.jp/articles/-/278184
|
警告 |
2021-07-30 04:02:00 |
ビジネス |
東洋経済オンライン |
実は「五輪特需」で潤うタクシー、その内情と不安 ハイヤー不足で恩恵もさまざまな問題が表面化 | 世相をリアルに映し出す 流転タクシー | 東洋経済オンライン |
https://toyokeizai.net/articles/-/444295?utm_source=rss&utm_medium=http&utm_campaign=link_back
|
東京五輪 |
2021-07-30 04:30:00 |
コメント
コメントを投稿