AWS |
AWS Database Blog |
Multi-user secrets rotation for Amazon RDS |
https://aws.amazon.com/blogs/database/multi-user-secrets-rotation-for-amazon-rds/
|
Multi user secrets rotation for Amazon RDSMost database deployments have multiple database users who have varying degree of privileges on the data stored in the database database structure and administrative operations In multi user database environments it s important to grant and limit the privileges of different users based on their roles and needs It s also a best practice to limit the lifespan … |
2022-04-22 14:18:19 |
python |
Pythonタグが付けられた新着投稿 - Qiita |
Drag And Drop with Django Rest API【Python】 |
https://qiita.com/DeepRecommend/items/ce9242bf444e0eabca79
|
assumptiondjango |
2022-04-22 23:20:33 |
js |
JavaScriptタグが付けられた新着投稿 - Qiita |
HTMLの文章を行ごとに分割して装飾をつける |
https://qiita.com/sujoyu/items/112a119841f5896c786c
|
tmpboxpositionabsolutelef |
2022-04-22 23:46:46 |
Linux |
Ubuntuタグが付けられた新着投稿 - Qiita |
Apacheでオレオレ証明書を発行して自分で自分を証明したい(備忘録) |
https://qiita.com/cffnpwr/items/09995c5b19b01d7f1092
|
ubuntultsonvir |
2022-04-22 23:54:34 |
Linux |
Ubuntuタグが付けられた新着投稿 - Qiita |
今日からdockerイメージのubuntu:latestは22.04 LTSです! |
https://qiita.com/moritalous/items/d8b0f34abbfd93505292
|
dockerrunitrmpullalw |
2022-04-22 23:45:08 |
Docker |
dockerタグが付けられた新着投稿 - Qiita |
今日からdockerイメージのubuntu:latestは22.04 LTSです! |
https://qiita.com/moritalous/items/d8b0f34abbfd93505292
|
dockerrunitrmpullalw |
2022-04-22 23:45:08 |
技術ブログ |
Developers.IO |
[GitHub Actions] 三項演算子ライクな記述でブランチ名に応じて必要なシークレットのみ取得する |
https://dev.classmethod.jp/articles/github-actions-get-only-necessary-secrets-according-to-branch-name-in-ternary-operator-like-description/
|
githu |
2022-04-22 14:53:22 |
海外TECH |
Ars Technica |
How EV technology is bringing hot rodding into the 21st century |
https://arstechnica.com/?p=1848756
|
centuryev |
2022-04-22 14:28:02 |
海外TECH |
Ars Technica |
Twitter board in a bind as Elon Musk makes his move |
https://arstechnica.com/?p=1849832
|
company |
2022-04-22 14:21:14 |
海外TECH |
Ars Technica |
NASA is supporting some seriously risky missions to the Moon—it’s about time |
https://arstechnica.com/?p=1848747
|
strengths |
2022-04-22 14:19:54 |
海外TECH |
MakeUseOf |
How to Change the Color of an Image in Photoshop: 3 Ways |
https://www.makeuseof.com/photoshop-how-to-change-color-of-image/
|
photoshop |
2022-04-22 14:30:13 |
海外TECH |
MakeUseOf |
The Best Gadgets to Protect You Against Natural Disasters |
https://www.makeuseof.com/tag/gadgets-protect-natural-disasters/
|
blizzards |
2022-04-22 14:21:25 |
海外TECH |
DEV Community |
Best Practices for Discord Server Moderation |
https://dev.to/janeth/best-practices-for-discord-server-moderation-84f
|
Best Practices for Discord Server ModerationModeration is an important part of building a great Discord community where people will want to hang out As moderators of Autocode s Discord server we know how tough online moderation can be That s why we want to share the tools we use to moderate our community While there are thousands of Discord moderation bots installing a bot won t solve all your moderation needs You need human intervention to ensure your server s moderation strategy is appropriate and fair You as a server owner and moderator need to create the environment for moderation bots to work as intended We hope that the following tips will help you and your team create this environment to build an effective moderation system Table of Contents Define Server RulesSet up channels roles and permissionsConfigure Discord tools Build a Discord bot Install features to assist with server moderationInstall pre built moderation bots from bot gg Define server rulesModeration begins with clear and concise rules that will guide and shape your community as it grows These rules define how your community engages with each other and allow your staff moderators and community leaders to intervene adequately when community guidelines are broken We recommend that you consider setting expectations around the following topics in your server Safety and Harassment As your public server grows you will be interacting with people from all walks of life Make sure your community is a safe and positive environment for people and discourage harassment surrounding AgeRace and ethnicityReligionGender identitySexual orientationEconomic and social statusJokes memes comments and bullying around any of the above mentioned should never be tolerated in a healthy and supportive community ️Appropriate Content Define the content topics and conversations that are not acceptable This will create a community that is inclusive of all ages Remind your community to follow Discord s content policy as well as any other TOS that are relevant to your community ️Channel Usage Keep your server and conversations organized by highlighting what channels are for and encouraging people to keep chats relevant to the channel s purpose ️Getting Support Explain how your community can request support It is also a good idea to point towards existing resources so that your community can be self supportive You may also consider introducing roles staff moderators and community leaders that are available to help Set expectations for how extensive support is You ll likely also need to tailor rules specific to your type of community For example if you run a Discord server focused on photography what kind of photos aren t allowed to be shared If you run a gaming server do you allow off topic discussion The answer to questions such as these should be codified within your rules Set up channels roles and permissionsAs a Discord server moderator you will need to have a private space to communicate with your team and with the leaders in your community Discord s moderation tools allow us to create channels that are only accessible to specific members and roles via permissions Permissions allow you to control who can view a channel send messages in the channel manage app commands and more To learn how to set up super secret channels and modify the permissions check out this guide You should also think about how public channels permissions are set up For example consider whether it would be best to enable slow mode on some channels Configure Discord toolsOnce you ve defined your rules and set up your channels you will be ready to properly enforce these rules and protect your server We recommend that you begin by configuring Discord s built in tools Select Server Settings to find the Moderation Menu Discord s Moderation Menu allows you to quickly set up basic protection for your server to discourage malicious people or bots from joining and causing trouble We recommend setting a Medium or High verification level This will require that any member joining your server have a verified email address on their Discord account They must also wait a certain amount of time before they are allowed to send messages in channels Encourage new members to use the waiting period to read the community guidelines and learn about the different channels We encourage public servers to enable the setting that “Scans media content from all members This will prevent malicious people from posting NSFW content on your server You should also enable the two factor auth requirement Your moderators will need to have two factor authentication on their account in order to use moderation actions like banning kicking users and deleting messages This will help prevent hackers from taking over a moderator account to cause trouble on a server Build a Discord botWhile the moderation menu offers basic moderation abilities as your community grows you will want to further protect your server Users may try to disrupt your server by sending spam posting unwanted text in channels raiding your server and more Fortunately we can solve many of these problems with help from a little bot friend At Autocode we recommend building a Discord moderation bot to help assist you and your team Remember Discord bots are meant to complement human moderation not replace it You can easily set up your Discord bot with Autocode by following this step by step tutorial “How to build a free Discord bot with Node js You don t need to install anything or pay anything to build and host your bot it s free and easy to set up Install features to assist with server moderationOnce you have completed the step by step tutorial you will be able to customize your bot You can easily add custom commands and moderation features like member verification anti spam anti raid verification systems and more One of the main advantages of creating a custom bot is that you can have a single bot handle everything rather than having to manage multiple bots At Autocode we make it super easy to add features to one bot with our large library of Snippets Snippets allow you to use others code inside your project making adding features to your Discord bot super quick Here is a short minute video that explains how to install snippets into your Discord bot project And here is a list of the Snippets we recommend for moderation Anti spam Keep your channels clean from unwanted invite links messages and mentions Anti Discord Invite links Delete messages that have or contain discord gg or https discord gg so that no one can send invite links in your server The bot will post a warning message after deleting invite links Anti Token Grabber Links Auto Moderation Checks if the message that was sent contains any known token grabber Links If it does it deletes the message sends a warning in the chat and assigns a muted role Anti Caps Spam Delete any message with more than characters in all caps The bot will post a message asking the user to not use all caps Anti mentions When a member of your server tries to mention here your bot will remove their chat permissions for an hour This will not affect the server owner or other members with admin permissions since timeouts cannot be set on those users Admins can remove timeouts by right clicking the member s icon and selecting the option that appears Text filters Keep your server clean from profanity Automatically delete messages containing a word in the bad word listAnti Swear System Profanity Filter Automatically detects profanity and deletes messages containing profanity Anti raid Raids are when a large number of users enter your Discord server at once to cause trouble One way to stop raids is by protecting your server with a verification system Server captcha verification bot Verify new members who join your server via the captcha verification system Verification System This app will make sure people have to click a button before getting access to your server Prevents bots from accessing your serverRaid purge command remove messages after a raid with a simple command ex purge Install pre built moderation bots from bot ggYou can invite a Discord moderation bot into your server instead of building one Head on over to bot gg and search through our growing list of bots A popular moderation bot we recommend is Spectre This is a handy tool that will assist your moderators It s equipped with moderation features that allow admins to purge chats lock channels and lock down the server Your server members can easily make reports and suggestions via slash commands ConclusionModeration is a foundational part of any thriving community Making sure clear guidelines are established executed and enforced will keep everyone in your community safe and comfortable Remember that moderation starts with you and should always be taken seriously Moderate what you can manually with you and your moderator team and use bots to assist where you need it Your community will be grateful for it |
2022-04-22 14:17:45 |
海外TECH |
DEV Community |
Golang errors handing in JavaScript |
https://dev.to/fedyk/golang-errors-handing-in-javascript-e5
|
Golang errors handing in JavaScriptWhen it s came to exceptions try catch is the way to go in JS With introducing async await we can use try catch statement let greetingtry greeting hello World catch err greeting Hello World console log greeting async function hello name string string if name throw new RangeError name can t be empty return Hello name The code is not the most elegant When you have more errors to handle in your code it become hell with try catch As a result it s easier just assume that code is perfect and don t use try catch Also many of JS developers are scared to throw new Error After spending some time with golang I m amazed how well the language is designed in this matter Inspired by golang I have created a simple utility called go which drastically simplify the error handling function go lt T gt promise T return Promise resolve promise then result gt null result as const catch err gt err null as const Here the example from the begging let err greeting await go hello Andrii if err greeting Hello World console log greeting Perhaps this is the reason why most of JS developers are optimists and assume that their code never fail Error handling in async JS In JS it s difficult and code is not tidy as a result we just skip this part Inspiration from golang and explicit errors Example of code with difficult errors handling Example of solution with go helperlet err message await go hello Andrii if err message Hello world console log message async function hello name string string if name throw new RangeError name can t be empty return Hello name function go lt T gt promise T return Promise resolve promise then result gt null result as const catch err gt err null as const |
2022-04-22 14:17:37 |
海外TECH |
DEV Community |
Symfony Station Communiqué - 15 April 2022. A look at Symfony, PHP, and Cybersecurity News! |
https://dev.to/reubenwalker64/symfony-station-communique-15-april-2022-a-look-at-symfony-php-and-cybersecurity-news-3h2k
|
Symfony Station Communiqué April A look at Symfony PHP and Cybersecurity News This article originally appeared on Symfony Station your source for cutting edge Symfony and PHP news Welcome to this week s Symfony Station Communiqué It s your weekly review of the essential news in the Symfony and PHP development communities PHP news was slow this week so we added coverage to our Other section including the tech aspects of the war crimes in Ukraine Take your time and enjoy the items most valuable to you Thanks to Javier Eguiluz and Symfony for sharing our last communiqué in their Week of Symfony Please note that links will open in a new browser window My opinions will be in bold SymfonyAs always we will start with the official news from Symfony Highlight gt “This week the first beta of Symfony was released in preparation for its final release in weeks Meanwhile we published some blog posts about new Symfony features such as improved ExpressionLanguage syntax and the Locale Switcher Lastly the SymfonyWorld Online conference June announced its first speakers A Week of Symfony April They also announced the following Last days of Call for Papers for SymfonyCon Disneyland Paris SymfonyCasts finish their free look at Symfony This week on SymfonyCastsPlatform sh announced that “Each of your applications can define custom operations aka Source Operations which can be triggered manually or via an automation process for example a cron When those custom operations run they can change your codebase for example apply a security patch update a dependency or install a specific extension and push those changes live Automated code updates Featured ItemSymfonyCasts free Symfony tutorial is now fully released Be sure to take it or watch the individual chapters relevant to you Harmonious Development with Symfony This WeekWouter de Jong writes “Symfony has a very rigid release schedule since Symfony Predictable releases are often mentioned as a major advantage Did you know that this schedule also includes a month “stabilization phase This phase gives time to all libraries and bundles to catch up Testing pre releases is one of the best and least time consuming contributions you can make to Symfony Let s see how you can help Symfony by reserving minutes during these two months Stabilizing Symfony Testing out the pre releaseCoding says “Today I saw the Symfony BETA released a blog post and quickly scanned for updates regarding Enum support And yes a new feature was listed HttpKernel Add a controller argument resolver for backed enums I quickly set up a testing project to play around with this Symfony routing and PHP EnumsMarco Pfeiffer asks “You have a working project and you need to add a full text search But most databases SQL Document do not contain reasonable fuzzy searches so you need to bring a specialized database like Elasticsearch into your project But how Ways on How To Use ElasticSearch in a Symfony Project with ApiPlatformThe Codest writes “This article was created to show you the most useful and retrieving tips and tricks about Symfony Console Development PHP Development Symfony Console Component Tips TricksKrzysztof Lobermajer notes “Legacy code is something I do not want to deal with It is always not well written hard to read and very complicated The first thing we want to do when starting to work with a new legacy project is to rewrite everything from scratch A better approach is to rewrite step by step one module at a time Let legacy live with a new codebase arm in arm It can be achieved by using a strangler pattern Unfortunately such an approach is also not always possible Taming involves reducing refactoring activities and focusing more on introducing new features to make something improvements visible to the customers Legacy code strangle or tame The API Platform Conference is the only event dedicated to the API Platform and its ecosystem API Platform Conference Code Bilby has many short posts on the topic of the Twig templating engine Check them out TWIG Code BilbyWe covered CakePHP in our article Exploring the PHP Frameworks using Symfony Components In this article Stephen Pearl compares it to CodeIgniter The Most Significant Differences Between CakePHP and CodeIgniterBounteous has a look at Drupal Uncovering New Features and Benefits Last WeekRedfin Solutions explains its role in Leading Drupal s Project Browser Strategic InitiativeMeanwhile ImageX looks at The Easy Out of the Box Initiative for Drupal even more user friendliness See all the strategic initiatives Wim Leers covers the changes made in the CKEditor for Drupal during Dev Days Ghent Drupal Dev Days Ghent sprints FTW Alain Schlesser says “Bento is a relatively new high performance web components library that makes it easy to optimize your web properties for an excellent page experience It was initially conceived to make the AMP project s performance insights and engineering expertise available to more people and with fewer strings attached Bento components are self contained and can be used in a gradual mix and match approach Bento components are packaged as React or Preact components for seamless integration into any framework using such a stack However they are also provided as standardized Web Components so that they can be used anywhere else where P React might not be available This could include the Gutenberg Module in Drupal Using Bento Components in Gutenberg Blocks PHP This weekSimply Stef is starting a series of articles called PHP Fundamentals It includes this helpful one PHP Understanding FunctionsKinsta has this extensive and insightful comparison article for us Node js vs PHP A Head to Head ComparisonJordi Bassaganas writes “I ll be sharing a series of posts that show how similar PHP and TypeScript are ーthey re probably more similar than you d initially think I will explain helpful tips on how to do object oriented programming OOP in both of them More specifically I m transcribing a statically typed object oriented PHP codebase into TypeScript from scratch Why TypeScript and PHP Are Good FriendsFig announced that “that starting in version it now supports over a dozen new terminals and IDEs including PhpStorm Fig now supports JetBrains IDEsOn a related note JetBrains shows us how to Create PHP Courses Inside PhpStorm With EduTools Last WeekAhmet Özışık looks at PHPUnit failing with exit code OtherPlease visit our Support Ukraine page to learn how you can help kick Russia out of Ukraine eventually The cyber response to Russia s War CrimesTechCrunch has An inside look at a Ukrainian fintech startup adapting to life during wartimePolitico Pro reports that Russia s propaganda machine takes another hitThe Next Web covers How Russia and Ukraine are using social media as the war drags onPCMag notes that the Pentagon is Impressed by Starlink s Fast Signal Jamming Workaround in UkraineMSN reports “Cybersecurity experts representing NATO members are fighting a digital war this week to defend a fictional island country in the northern Atlantic Ocean Though “Berylia is fake experts involved hope the lessons learned from the staged attack will better prepare them for the possibility of a Russian attack as war ravages Ukraine NATO Plays Cyberwar to Prep for a Real Russian Attack The Evil Empire Strikes BackReuters have an exclusive Senior EU officials were targeted with Israeli spywareTech Monitor reports “Critical national infrastructure is at “increased risk of malicious cyber activity perpetrated by Russia according to a warning by the UK and its allies in the Five Eyes security alliance A rare joint advisory from the Five Eyes nations states that the war in Ukraine and the sanctions imposed on Russia mean the threat to infrastructure has increased in recent days A storm on the horizon Five Eyes issue Russian cyberattack warningGizmondo reports that FBI Says North Korea Behind Biggest Crypto Theft in History Against Axie InfinityThe Guardian has this depressing story Facebook posts disputing Bucha atrocities were shared times in a week CybersecurityExplore our article on Symfony Security VentureBeat reports that Ransomware targeting virtualization platforms is on the rise Mandiant saysTech co reports “Ransomware as a service RaaS group BlackCat has already compromised entities worldwide according to a FLASH warning issued by the Federal Bureau of Investigation FBI this week The report confirms that the recently established BlackCat group are typically requesting ransom payments of several million dollars and are carrying out their attacks using Rust a highly advanced coding language FBI Warning as BlackCat Ransomware Breaches at Least Organizations MoreMake Use Of shows us How to Use Flex to Align HTML ElementsDave Rupert shares Web Component TricksTechRepublic covers why Why Web s promises of decentralization fall flatMSN opines Obama s plans to fight disinformation are better than mostThe NewStack provides An Introduction to JSONInfoWorld reports on The steady march of general purpose databasesMuhammed Hilmi Koca writes “In this short series of or articles I will try to talk about the most useful interesting and fun “sentinel feature of Redis Distributed Cache Systems and High Availability on Redis vol Vladimir Khorikov looks at Modeling Relationships in a DDD WayTomasz Dobrowolski has a good What and Why look at TDD Test Driven Development What Is It And Why You Should Be Using It as a Developer to Reduce Your BugsVentureBeat also reports that Postman API platform hits M users helps drive the API economy That s it for this week Thanks for making it to the end of another edition I look forward to sharing next week s Symfony and PHP news with you on Friday Please share this post Also be sure to join our newsletter list at the bottom of our site s pages Joining gets you each week s communiquéin your inbox a day early And follow us on Twitter at symfonfystation Do you own or work for an organization that would be interested in our promotion opportunities If so please get in touch with us We re in our infancy so it s extra economical More importantly if you are a Ukrainian company with coding related products we can offer free promotion on our Support Ukraine page Or if you know of one get in touch Keep going Symfonistas Author Reuben WalkerFounderSymfony Station |
2022-04-22 14:15:01 |
海外TECH |
DEV Community |
OpenBSD Upgrade 7.0 To 7.1 |
https://dev.to/nabbisen/openbsd-upgrade-70-to-71-4mke
|
OpenBSD Upgrade To SummaryThe OpenBSD project released of their OS on Apr It was their nd release OpenBSD openbsd The OpenBSD project celebrates its release See what s new here openbsd org htmlRead the announcement here marc info l openbsd ann… PM Apr What s NewThis post shows how to upgrade OpenBSD to The steps are based on their official great guide TutorialHere is a step by step guide for the upgrade with a set of the commands to run Pre upgrade Validate and customizeThe official tutorial includes Before using any upgrade method section Using sysupgrade is perhaps a good choice Validate available disk size usr should be greater than GB df hFilesystem Size Used Avail Capacity Mounted on dev sdx G G G usr Validate it s compatible with the current usageCheck Configuration and syntax changes and Special packages Customize upgrade optional auto upgrade conf and upgrade site are available Upgrade with sysupgradeNo problem left You might have to take some backups Caution It is unable to stop sysupgrade on the way once run Let s just run the command if ready doas sysupgradeIt will print like this Fetching from SHA sig Signature VerifiedINSTALL amd base tgz MB bsd KB bsd mp KB bsd rd KB comp tgz KB game tgz KB man tgz KB xbase tgz KB xfont tgz KB xserv tgz KB xshare tgz KB Verifying sets Fetching updated firmware intel firmware v gt v okvmm firmware gt p okRead shared items okUpgrading The sysupgrade process reboots the machine automatically The process will continue like this Rebooted again sysmerge will follow automatically What I got was running rc sysmerge gt Updating etc changelist gt Updating etc fbtab gt Updating etc newsyslog conf gt Updating etc X xenodm GiveConsole gt Updating etc X xenodm TakeConsole gt Updating etc syslog conf gt Linking etc fonts conf d hinting slight conf gt Linking etc fonts conf d lcdfilter default conf gt Linking etc fonts conf d generic conf gt Linking etc fonts conf d generic conf etc login conf unhandled re run sysmerge to merge the new versionThen the daemons such as sshd will be started as usual Then syspatch will follow as well as sysmerge Checking for available binary patches Well in my case it failed syspatch Error retrieving Not FoundIt seems because no patches on amd had been provided After all you will see the login message including OpenBSD GENERIC Post upgrade sysmerge if necessaryThe official documentation describes on them and helps a lot rc sysmerge ran automatically in the previous process as shown But running this command may be necessary It sometimes requires manually merging conf files such as etc login confRun the command doas sysmergeYou will view the diff results first Then you will be asked Use d to delete the temporary etc login conf Use i to install the temporary etc login conf Use m to merge the temporary and installed versions Use v to view the diff results again Default is to leave the temporary file to deal with by handHow should I deal with this Leave it for later Each of the top options work like d to preserve the current file i to overwrite it with the new file sysupgrade brought m to merge them manually and interactively When you type m and start merge mode you can type l to choose the left diff and r to choose the right After all the diffs are merged you will be asked Use e to edit the merged file Use i to install the merged file Use n to view a diff between the merged and new files Use o to view a diff between the old and merged files Use r to re do the merge Use v to view the merged file Use x to delete the merged file and go back to previous menu Default is to leave the temporary file to deal with by hand gt How should I deal with the merged file Leave it for later If you type e editor will run with the merged file If you type i the merged file will be installed directly gt Merging etc login conf running cap mkdb needs a relog The two tasks below are usual just in order to update the system too Apply syspatch skippable syspatch is an important command to install binary patches officially provided by OpenBSD successively as found to be needed Well sysupgrade runs syspatch in the process Therefore it must not be necessary to run it manually here must be skippable doas syspatch Update packagesWhat s new section in the release page also shows Some highlights in Ports and packages For example PHP was instroduced as well as and This command will update all of the packages installed in the machine doas pkg add uIt will print a lot but you should be careful to read especially its tail which may tell there are some important changes or tasks to do Besides one of them was python p Python is end of life and no longer receives security updates Thank you and farewell Python Remove old filesThis is a simple step All what to do is just follow Files to remove in the official tutorial This time No files need to be cleaned up for this release No task Sweet Special packagesCheck Special packages in the official tutorial You may use some of lang pythongames multimcBesides special notes on Python are shown The default Python x flavor has changed to Python Python is planned to be removed prior to the release RebootAlmost done doas rebootThat s it Hope the new system brings you another happiness With great appreciation to the OpenBSD project and the community |
2022-04-22 14:14:51 |
海外TECH |
DEV Community |
My first small game with Python |
https://dev.to/mohammadalnajar/my-first-small-game-with-python-2cea
|
My first small game with PythonAs a part of my computer science study at Codecademy we have to build a terminal game The choice was not easy at all but I decided to take one of the suggestions they gave us in the project description which was the connect four game The game looks easy to build if I used Javascript which I am more familiar with but using python was a really challenge for me Game description The game is called Connect Four The game is played on a grid that has six rows and seven columns It has two players X and Y who alternate turns Each player has a different color Red and Green When a player drops a piece it lands in the lowest available space in the column The next player continues until either four of the same pieces are connected vertically horizontally or diagonally The game ends when either player has four in a row The game also ends when the board is full and neither player has four in a row When the game ends the game can be restarted Win vertical Win diagonal The game has also validations The most tricky part was checking for diagonally win but at the end was fixed using the following function def check circles in row angle player letters list A B C D E F G numbers list global is won is won False circles player circles circles sort key lambda circle circle letter sort circles by letter string circles f circle letter circle number for circle in circles if len circles gt for circle in circles letter circle letter number circle number global compare one compare one True list to compare list to compare global letters list to compare global numbers list to compare if number lt numbers list to compare numbers list numbers list index number elif number gt numbers list to compare numbers list numbers list to compare numbers list to compare numbers list to compare index number letter lt D if letter lt D letters list to compare letters list letters list index letter i while i lt list to compare append f letters list to compare i numbers list to compare i i letter gt D if letter gt D letters list to compare letters list letters list to compare letters list to compare letters list to compare index letter i while i lt list to compare append f letters list to compare i numbers list to compare i i letter D if letter D letters list to compare letters list letters list index letter i while i lt list to compare append f letters list to compare i numbers list to compare i i letters list to compare letters list letters list to compare letters list to compare letters list to compare index letter i while i lt list to compare append f letters list to compare i numbers list to compare i i x global all in all in True while x lt len list to compare if not list to compare x in string circles all in False break x if all in is won True return is won if len list to compare gt y while y lt len list to compare if not list to compare y in string circles all in False break y if all in is won True return is won return is won Conclusion Building this small game was really helpful for me to understand a lot of concepts in programming in addition to learning a lot of python Source code GitHub |
2022-04-22 14:12:48 |
海外TECH |
DEV Community |
Drawing a Triangle with WebGPU |
https://dev.to/carmencincotti/drawing-a-triangle-with-webgpu-1mk3
|
Drawing a Triangle with WebGPUWebGPU is part of the new generation of rendering created for the web If you re experienced in other graphics APIs such as Vulkan you ll probably find that WebGPU isn t so so different However if you come from a WebGL background you ll need to wrap your head around the non state machine esque behavior of WebGPU…and if you re completely new to D rendering inside the browser welcome I propose that we create a triangle to introduce ourselves to the WebGPU API The GoalWe want to draw this bad boy in a browser that supports WebGPU rendering The awesome triangle that we would like to draw The CodeHere s the code for those that just want to copy and paste I ll be walking through it and providing descriptions of each section later down this post ️To run the code you must use a browser with the WebGPU flag enabled as it is still not enabled by default it s that brand spanking new See this resource for more information Click here to view a Demo Adapter and DeviceWe first start by ensuring the availability of WebGPU in our browser in the first few lines of the script If it is available we then initialize WebGPU s adapter and device and the HTML Canvas What is an adapter and a device Adapter is like VkPhysicalDevice if you are experienced in Vulkan WebGPU allows us to get a list of all the GPUs in our computer You can also pass an argument to the function to select a GPU of a certain type For example you may want to select from multiple GPUs in your system like a low power GPU for battery powered use and a high powered GPU for plugged in use Device is like VkDevice This is the GPU driver on the hardware graphics card and our method of communicating with it I think of it as the API of the graphics card Swap ChainAfter creating the Canvas context we configure it These lines may look weird and abstract…we are setting up the swap chain and the Canvas context at the same time ️If you read a WebGPU tutorial from the past you might see the use of a deprecated method where you explicitly set up the swap chain What is a swap chain The main role of the swap chain is to synchronize the presentation of our generated images with our screen refresh rate It is a queue that contains images waiting to be displayed VerticesWe have to pack our array of vertices into a single giant array buffer Each vertex consists of six floats in this case three to represent position and three to represent color If we want to include other attributes we must add more floats to each vertex After defining our vertices we create the vertexBuffer which is the buffer that will live in the GPU We are responsible for filling it at this point The act of “mapping a buffer is important to its operation A mapped buffer means that the CPU can write to it and the GPU cannot Conversely if the buffer is unmapped the GPU will be able to read it and the CPU will be prohibited This is why we designate mappedAtCreation as true during the creation stage We can then invoke set to copy our vertices into the buffer Finally we remove the CPU s write access and grant GPU read access by calling vertexBuffer unmap The vertexBuffersDescriptors are instructions telling the GPU how to decode the buffer In our case we use bytes to describe all attributes of a vertex In our shaders the GPU will be able to find the position vector at offset and the color vector at offset The Vertex and Fragment ShaderThese shaders are simple We define them using WGSL which is like Rust There are no surprises in this code and I invite you to review shader code tutorials in order to follow this bit of code The Rendering PipelineFinally we define the rendering pipeline which is just a simple and sort ve boilerplate y configuration We combine our shaders and vertex attributes while defining the type of primitive that will be generated The Animation Frame and Command BuffersWe start our animation Another difference from WebGL is this idea of a command buffer We use a command buffer to pre record all drawing operations so that WebGPU can process them more efficiently The advantage is that it will reduce the bandwidth between CPU and GPU and therefore performance will improve and we can fill this buffer in parallel using multiple threads if we choose to do so The commandEncoder is responsible for receiving our render commands To create a command buffer that can be submitted to the GPU we call finish on the encoder The received command buffer is passed to the device to be executed then our triangle will be rendered Finally the image of our triangle will be written to the swap chain then displayed on the canvas What you should see Resources that Definitely Helped Me web dev WebGPU Vulkan Tutorial WGSL ーW WebGPU Explainer Intro to WebGPU ーKhoronos The Pipeline Learn Wgpu sotrh github io |
2022-04-22 14:12:19 |
海外TECH |
DEV Community |
My 27 Favourite Programming Quotes |
https://dev.to/muthuannamalai12/my-27-favourite-programming-quotes-18bg
|
My Favourite Programming QuotesIn order to stay motivated to program consistently a programmer must crave motivation for consistency We all look for compelling reasons to learn programming No matter if you re a beginner or an expert Programming requires motivation and inspiration I ve compiled my favorite programming quotes to inspire make you laugh or make you thinkLet us get startedIf debugging is the process of removing bugs then programming must be the process of putting them in First learn computer science and all the theory Next develop a programming style Then forget all that and just hack Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you liveA program is never less than complete and never more than completeDebugging is twice as hard as writing the code in the first place Therefore if you write the code as cleverly as possible you are by definition not smart enough to debug itCopy and Paste was programmed by programmers for programmers actuallyThere are two ways to write error free programs only the third one worksWalking on water and developing software from a specification are easy if both are frozen Programming is like sex One mistake and you have to support it for the rest of your life Code is like humor When you have to explain it it s badControlling complexity is the essence of computer programmingYou might not think that programmers are artists but programming is an extremely creative profession It s logic based creativity Measuring programming progress by lines of code is like measuring aircraft building progress by weightMost good programmers do programming not because they expect to get paid or get adulation by the public but it is fun to program little bugs in the code little bugs in the code Take one down patch it around little bugs in the code …We have to stop optimizing for programmers and start optimizing for usersThe trouble with programmers is that you can never tell what a programmer is doing until it s too lateThe best thing about a boolean is even if you are wrong you are only off by a bitIt s not a bug ーit s an undocumented featureThe only way to learn a new programming language is by writing programs in itProgramming isn t about what you know it s about what you can figure outTesting leads to failure and failure leads to understandingThe question of whether computers can think is like the question of whether submarines can swimIf builders built buildings the way programmers wrote programs then the first woodpecker that came along would destroy civilizationProgramming today is a race between software engineers striving to build bigger and better idiot proof programs and the universe trying to build bigger and better idiots So far the universe is winning When I wrote this code only God and I understood what I did Now only God knowsAny fool can write code that a computer can understand Good programmers write code that humans can understandI hope these programming quotes inspire you or motivate you in some way But you will only succeed if you love what you do Do not underestimate your potential even yourself I hope you found this article useful Do share you favourite quotes in the comments below Happy Learning You can now extend your support by buying me a Coffee Thanks for Reading |
2022-04-22 14:11:13 |
海外TECH |
DEV Community |
Screencast: Setting up a GraphQL server in Rails |
https://dev.to/phawk/screencast-setting-up-a-graphql-server-in-rails-13pc
|
Screencast Setting up a GraphQL server in RailsIn this video I m going to walk you through setting up a GraphQL server in Ruby on Rails We will install the graphql gemGenerate some graphql types for our modelCreate mutations for login registerCreate a query for fetching info about the current user |
2022-04-22 14:02:32 |
海外TECH |
DEV Community |
News Archiver |
https://dev.to/anujssstw/news-archiver-42a7
|
News Archiver Overview of My SubmissionArchives headlines content from news websites selected news website which are for now New and IndiaToday it can be change every hr which allows users to historically see the news and how it s reported on different sites By using a package node schedule to run background job every hr and puppeteer for scraping the content from a website and this date will be saved in Appwrite database Render this data on a client side application website Submission Category Web Wizards Link to CodeFrontend Client Side Application New ArchiverBackend Server Side Application AnujSsStw appwrite backend Additional Resources InfoDo check it out in x for a quick walkthrough on my application and how it works A quick walk through of my Application and basically how it worksPS I didn t focus on security so that s why my id is still shows in main app And if I have to I can just set it the envBackendRun node index jsCron schedule can be set to any time for now let say every min After that it Scrape data mainly img and headlineNow coming up it check the collection listBasically for thingsDoes a collection exit with current date it if not then create a collection with given attributes If collection exits then create the document in that collection with the scraped data That s it for the BackendFontendRenders the data that was in collectionAnd how it render the data of the selected date Well it s easy To start of I created the collection with Date idFor more info you can connect with me on Twitter OoOThe backend can be hosted on digitalocean so it can always keep running with appwrite droplet If you are wondering |
2022-04-22 14:02:21 |
海外TECH |
DEV Community |
Serverless para Startups |
https://dev.to/julietaansola/serverless-para-startups-47j2
|
Serverless para Startups Quick resumen Las Startup se centran en mejorar la experiencia de usuario y las iteraciones entre desarrollo y las implementaciones deben ser agiles La arquitectura serverless no solo mejora el tiempo de salida al mercado sino que le permite a las startup centrarse en el desarrollo del producto al no tener q preocuparse por la gestion de recursos En pocas palabras que es serverless Básicamente utiliza un proveedor de nube para administrar completamente su infraestructura No tienes que preocuparte por servidores escalabilidad tolerancia a fallos etc Todo estágestionado por el proveedor de la nube Referencia de AWS Un poco de historia Si bien se venia hablando de arquitecturas serverless el hito que marca el nacimiento de lo que hoy conocemos fue el lanzamiento de Lambda en Anteriormente los equipos de operaciones asignaban los recursos en función de la previsión de la demanda que tenía problemas generales y los cálculos no debían exceder las capacidades del sistema AWS Lambda lo ayuda a manejar las capacidades restrictivas del sistema al ofrecer recursos informáticos que se amplían o reducen en tiempo real Según Martin Fowler hay dos áreas superpuestas que abarca serverless Serverless se utilizópor primera vez como un concepto que describe la aplicación con servicios integrados de terceros y aplicaciones alojadas en la nube que administran la lógica del lado del servidor Dichos servicios a menudo se describen como el Backend móvil como servicio o BaaS Serverless también se puede describir como una arquitectura en la que la lógica del lado del servidor se escribe desde cero y se ejecuta en contenedores de cómputo sin estado que se desencadenan por eventos y se administran completamente por servicios de terceros A menudo se lo conoce como Funciones como servicio o FaaS y uno de los ejemplos más significativos de su implementación es AWS Lambda Ventajas de la arquitectura sin servidorReduccion de costos la principal ventaja de la arquitectura sin servidor es que no pagamos por el hardware o cuando no se utilizan nuestros servicios Parches y updates Con la arquitectura serverless esto corresponde completamente a su proveedor de nube Revisiones más rápidas una arquitectura serverless puede reducir el tiempo necesario para la implementación de salir al mercado Simplificacion del codigo al usar FaaS los desarrolladores pueden crear funciones simples que se realizan de forma independiente para lograr un solo rol Escalabilidad planea crear una aplicación que es muy popular y después de una campaña de marketing explota Nada de quépreocuparse allí La arquitectura sin servidor tiene la capacidad de escalar automáticamente según el volumen de tráfico actual Pero no todo es color de rosas Menor control su proveedor de la nube controla toda su infraestructura lo que puede causar problemas si tienen algún problema por su parte Problemas como tiempo de inactividad del sistema límites inesperados cambios de costos pérdida de funcionalidad actualizaciones de API forzadas y más Migracion de proveedores los proveedores de la nube no son intercambiables pueden tener los mismos servicios pero lo más probable es que se implementen de manera diferente Si desea pasar de un proveedor a otro se veráobligado a realizar algunos cambios de código o incluso cambios de arquitectura Complejidad las cosas se vuelven complejas cuando tienes muchas funciones La complejidad puede surgir en el código la arquitectura o incluso simplemente en la depuración Pruebas las funciones de prueba unitaria no son tan difíciles porque no tienen estado y están aisladas La dificultad viene cuando hay que hacer pruebas de integración entre dos o más funciones Entonces serverless es el futuro de las startups Serverless es el presente Cada vez son mas las empresas que optan por este modelo de arquitecturas y los proveedores que les facilitan el camino AWS tiene su programa Startups y AWS en el cual brinda asesoramiento y apoyo para poder empezar |
2022-04-22 14:01:44 |
海外TECH |
DEV Community |
Build a Product Recommendation Quiz App with Shopify, Gadget, and Vercel |
https://dev.to/alida/build-a-product-recommendation-quiz-app-with-shopify-gadget-and-vercel-3lpe
|
Build a Product Recommendation Quiz App with Shopify Gadget and VercelTime to build approx hourTechnical RequirementsTo get the most out of this tutorial you will need A Shopify Partner account and a connected test store with the online store channel and a recently installed Shopify developed theme A reasonable familiarity with Shopify online store themes and are comfortable navigating theme architecture Comfort with Next js React and Javascript IntroductionProduct recommendation quizzes are a powerful tool to build engaging sales experiences for shoppers on online stores by allowing them to map their problems or concerns to a product that best meets their needs For Shopify merchants this can be an appealing proposition with an app that lets them build dynamic quizzes they can present their shoppers with a tailored experience that can result in more conversions and higher satisfaction by matching the right shopper with the right products In under an hour we can create a lightweight customizable product recommendation quiz app using Gadget connect the results to products in a Shopify merchant s store and build both an embedded in theme quiz and a stand alone quiz web application hosted on Vercel This app will allow a merchant to create quizzes quickly and then serve a quiz or quizzes to their shoppers wherever they may be In our example we will build a product recommendation quiz that recommends the appropriate skincare bundle from four options based on the shopper s answers We can also configure the app to track the conversion state of each response to any quiz giving the merchant rich information about the effectiveness of their quiz or quizzes Proposed Solution DesignWe need a way to create serve and record quiz responses in our app The recording of responses enables us to track the conversion state we discussed above effectively making a response to a quiz a snapshot of a session that a shopper has with our quiz Going forward to distinguish between the models and the concepts they represent we ll refer to the models in the title case e g a Result model vs result in reference to an outcome In terms of object relationships a Quiz itself has one to many Questions and each Question can have one to many Answers As an instance of taking the Quiz a Response belongs to a Quiz has one to many Answers and has one Result based on the selected Answers But how do the Answers lead to a Result We can build a mapping interface to allow us to select which Answers link to which Result as a part of our app s admin UIHere s a diagram to demonstrate what relationships our models will have with each other Let s build Getting Started with Gadget What is Gadget Gadget is a tool that allows developers to build and run a robust backend quickly by reducing the menial repetitive work involved in building software freeing you up to focus your time on business logic not boilerplate From hosted database to CRUD and custom API endpoints Gadget provides you with simple yet powerful building blocks that you can leverage to save time Gadget is in open beta right now and is free to try Who is Gadget for Gadget is for developers who want to ship fast If you find yourself frustrated by building the same features over and over or spending more of your time on glue code as opposed to what matters then Gadget is for you Gadget is for people who like to code While Gadget has artfully reduced the need to write endless code through our abstraction Gadget still believes that coding is the best way to express complex business logic So you will still code in Gadget just not as much What Gadget gives youGadget is a full featured application development platform with many tools features and integrations that help you build things quickly Here s what Gadget gives you A place to store dataA place to run back end JavaScript codeA shuttle for data in other systems like ShopifyA rich API and API Client and auto generated documentationA place to store images and other filesA high performance expression language GellyAn authentication systemA secure environment andHosting and a URL Starting your appHead over to app gadget dev and authenticate with Google Github or create log in to your account Next Gadget will prompt you to create a new application Click “Create App and Gadget will bring you into your new application Connecting to ShopifyTo recommend products to shoppers we ll need product data in our app that we can map to the results of a product recommendation quiz Using Gadget s Connections feature we can connect our app to a Shopify store and pull product data right from the shop What Shopify gives usThe Shopify connection provides us with access to any of the models surfaced in Shopify s Admin API as well as an authenticated client and webhook consumption This connection also allows us to sync data between Shopify and Gadget both scheduled and on demand Scopes and ModelsTo use the Shopify connection navigate to the Connections view in Gadget via the left hand navigation Then at the top right of the Connections view select “Add Connection Gadget allows you to select only the models you need from Shopify for your application Each of the scopes listed can grant you access to read or write to many related resources or models When Gadget receives webhooks relating to your selected resources it converts the incoming payload into records and maps them to the corresponding model in Gadget For our app we re going to choose the Products scope with write permissions and within the scope we need the Product Product Image and Product Variant models You ll note that selecting the write permissions will give us read as well automatically Now that we have our scope and models selected we can scroll to the bottom of the Shopify Resources modal to get the connection set up between Gadget and Shopify Now we can go over to the Shopify Partner Dashboard and create a new custom app Shopify prompts us for our app s name URL and redirection URL Gadget provides URLs for you as seen at the bottom of the Shopify Resources modal Copy those values from Gadget to Shopify and select “Create app to save your changes and generate your API keys Once your app is created Shopify generates the API key and API secret key that Gadget needs to complete the connection Copy these values back over to Gadget and then you can select “Add app to complete the connection The last step to connecting Gadget and Shopify for our app is to install our app on the shop we wish to sync product data from In the Shopify Partner Dashboard click “Select store under “Test your app and choose the applicable Shopify store Follow the prompts and you should arrive at this screen you re now connected Now we can trigger a manual sync between our connected Shopify store and Gadget by selecting “Sync on the listed connected store You ll notice now on the left hand side under Models Gadget lists all of the Shopify models you ve selected These models are perfect copies of the corresponding types and associations in Shopify Each model comes with a CRUD API create read update delete destroy automatically triggered by incoming Shopify webhooks or by running syncs These CRUD actions can also be triggered by interacting with the API giving you control over these records right in Gadget Additionally if you ve selected any Shopify resources you will also have a Shopify Sync model and a Shopify Shop model in your list of models Gadget automatically creates these last two models when you configure the Shopify connection representing the data syncs between Shopify and Gadget and the shop the app is installed on You can check out the Shopify connection documentation for more information on these models Now that we ve established our connection between Shopify and Gadget and we ve synced our data we can build our models for our app Building our Quiz models Models outlineWe need to create models for our app to represent the components of our Quiz Questions Answers Results Responses and the Quiz itself We need to connect these components by their relationships Gadget s built in relationship fields make this connection effortless Let s start with the Quiz model QuizThe Quiz model is the backbone of our application In our concept our app can have many instances of Quiz each representing a unique product recommendation quiz created through the app s interface Our Quiz model needs a couple of properties or fields to get started a title maybe a description or body content and some identifying information like an ID Creating a new model in Gadget will take care of some of these fields for us automatically Each model in Gadget comes with four fields ID State Created At and Updated At If we click the in the Models section of the side nav we can start our Quiz model Up at the top of this schema view we ve named the model Quiz and Gadget has created the API Identifier corresponding to the model s name From here we can add our first field Title Title is a string and we cannot create an instance of Quiz without it So let s select “Add Field and create our Title field Again naming the field will automatically generate the API Identifier We can then select the type of data we re storing in this field whether or not it has a default value and any validations we may want to run against this field on object creation In the case of Title we want to select the required validation We can also add a string length range validation to give Title a minimum and maximum length and a uniqueness validation if we want to ensure no two Quizzes have the same title Let s add a uniqueness validation You may have noticed that adding a uniqueness validation triggered an action by Gadget to scan through any existing Quiz records for Title field data to ensure the constraints are met This is because you can add new fields to models at any point not just during creation this allows you to grow and extend your models with your business needs as your app evolves Gadget will then take care of any migrations or underlying schema changes for you behind the scenes Let s now add another field to represent the optional body description text for the Quiz model For simplicity s sake we ll set the type to String with no validations But what is happening as we create these models and add these fields Behind the scenes Gadget automatically generates a CRUD API for each created model and updates this API with any new fields you add modify or remove This means you can quickly test and consume your API immediately after changing your models Gadget also creates API documentation for your API and a type safe JavaScript client for you to consume all in the background as you work With that our Quiz model is done for now and we can move on to Question QuestionLet s create another new model and call it Question This model will represent a single Question in a given Quiz We need just a few fields to get this model going for now a title and a body just like Quiz we also will add three new fields a sequence an image URL and a required field To start let s add Title and Body to Question Like Quiz Title is a required string field though the uniqueness constraint is unnecessary Likewise Body is a string field with no validations Once added let s move to Sequence The Sequence field allows us to declare where this Question will appear in the series of Questions The Sequence field is technically optional you could simply sort Questions based on the order they are created alphabetically or on another field However we ve chosen to add a Sequence field to give you more control The Sequence field is going to be a Number field When you set a field to the Number type you can declare the number of decimals you anticipate the values stored in this field to contain As we re just working with integers we ll leave this field as is We re going to declare the default value of this field as to guard against null values in the unlikely case that Sequence may not get set Finally we re going to add the Required validation to prevent us from creating instances of Question without a Sequence value The next field we ll add is Required which is a Boolean field that lets us indicate if responding to the given Question is required or not Finally we ll add the Image URL field This field uses the URL type which comes with a special URL validation that parses the input and ensures it is in a valid URL format As this field will be optional that s the only validation we ll need Now that Question is set we re going to need some Answers On to the next model AnswerBy now you should be getting a feel for how the Gadget schema editor works and how quickly you can build expressive models with exactly the fields and logic you need Next on our list our Answer model needs just two type based fields a Text field and a Sequence field Our Text field will be a String type field with the Required validation as our Answer needs to have a text body for users to identify which Answer to choose Our Sequence field is identical to how we configured it for the Question model a Number field with no decimals a default value of and the Required validation Take a moment to add those two fields to our Answer model and we can move right along to the Result model ResultOur Quiz now has a Question model and an Answer model which means we can now create the Result model to represent the outcome of a given set of Answers for a Quiz The Result model is also how we ll connect outcomes to product recommendations once we make our relationship connections Result has just two type based fields a required Body string type field to represent the outcome and an optional Image URL URL type field with the URL validation if you wish to provide an image as part of the Result ResponseOur final model for our Quiz app is the Response model As discussed at the beginning of this tutorial the Response model represents an instance of taking the Quiz and allows us to track the progress of any given user who has begun taking the Quiz It will also be a wrapper model that lets us serve a Result to a user by storing the Answers a user has selected and calculating the appropriate Result We re going to add two fields to this model an Email field to log emails for marketing purposes and a Conversion State field which will hold what stage of the Quiz the given Response has progressed to As in the above screenshot our Conversion State field is a String type field and we re going to give the field a default value of “New and make this field required This way we have the state for each Response from the start through to the finish The Email field type just like the URL field type has a built in validation to ensure the value supplied to this field is in the correct format Therefore we ll leave this field as optional In the last few screenshots you ll have noticed that we have other fields on our models that we haven t talked about yet that reference other models in our app Thinking back to our app s relationship diagram we know we need to link our models together to represent the conceptual connections they share This brings us to our next step Bringing it all together RelationshipsNow that our models are all established we can connect them using Relationship fields First let s navigate back to the Quiz model in the schema editor Then let s add a Questions field to represent the connection of instances of the Question model to an instance of Quiz Adding a Relationship field is much like adding a Type based field Near the bottom of the selection list for the field type we see Relationships listed These Relationships and their definitions are similar to the Active Record concept of Associations If you want to dive deeper into how Relationships work in Gadget you can read our Relationship and Relationship Fields documentation For now we can move forward with the understanding that we can declare a relationship and Gadget takes care of linking the models together for us without us needing to create and manage foreign keys In the case of Questions we know already that one Quiz has many Questions So we can model this relationship using the “Quiz has many Children Relationship field Selecting this relationship type allows us to then select what model is the child model Once we select Question as the child of Quiz the schema editor allows us to model what the inverse of the relationship looks like giving us finer control of the API identifier for this relationship in the generated schema We ll just refer to the inverse of the relationship as Quiz so the relationship is then Quiz has many Questions and Question belongs to Quiz The other two relationships to model on Quiz are Result and Response Exactly like Question a Quiz has many Result objects through a Results field and a Quiz has many Response through a Responses field You can call the inverse field for both of these relationships Quiz If we move over to the Question model now we ll see that Gadget has created a Quiz field on Question for us linking a Question to one Quiz In addition to being a child of Quiz Question is a parent model to the Answer model A Question can have one to many Answers so we can add an Answers field to our Question model that represents this relationship Go ahead and add this field now Answers as a model is a child of multiple models We ll model these relationships through the parent models so we can leave Answers as is and proceed on to Result Result is another model that is both a child and a parent in our relationship mapping We ll model the parent side of these relationships A Result has many Answer objects as described by an Answers field and has many Response objects through Responses This second relationship may seem strange if we know that Response is an object that wraps and returns Result why is Result the parent This allows us to model that a given Result can be linked to many Responses as every completed instance of Response does return a Result Otherwise we d have to generate a unique Result record for every Response record The other relationship to highlight here is a field called Product Suggestion This field represents the link between a Result and the Shopify Product Variant we re recommending based on the Answers in a given Response We can declare this relationship from the child side First we select the belongs to Relationship type and find Shopify Product Variant in the Parent selection Once selected Gadget requires us to create the inverse relationship field on the Shopify Product Variant model For our app we re going to pick has many Result via a Results field and that will complete the connection Interestingly this means we ve now extended the Shopify Product Variant model beyond what Shopify provides These additional fields on this connected model are only visible on the Gadget side of the connection and do not sync back to Shopify Instead these fields allow us to decorate connection based models with whatever additional information or logic we may need for our apps such as relationships For more on how you can extend Shopify provided models with Gadget check out our guide on the Shopify connection Finally let s look at the Response model s relationships We already have two established for us as Response belongs both to a Quiz and a Result We can add one more relationship here to complete our relationship mapping Response has many Answer records via Answers With our models all connected the schema of our app is complete We have all the fields and relationships needed to build out our app s UI which we will do in a minute First however is one last puzzle piece how does a Response get a Result To answer this we re going to need to look at the behaviour of the Response model and employ the use of a Code Effect Code Effects Calculating the ResultsWe discussed earlier that Gadget creates a CRUD API for you as you generate and decorate your models While this is useful sometimes you need more than just CRUD to build your app Gadget allows you to extend the CRUD actions with logic through code effects enabling these actions to unlock more functionality for your app as needed Looking at the sidebar menu we ll see that our currently selected model for the schema editor has two icons a head with gears and a server stack The head with gears is our Behavior icon and the server stack is our Data icon linking to the data viewer Let s select the Behavior icon and open the Behavior editor The Behavior editor has two panes the State Machine on the left and the Actions and States menu on the right Together these allow us to add extra logic to standard CRUD actions or add new states and API actions to the model s interface For our app what we re concerned with behavior wise is the Update action In our app the Response record will update through a few user actions starting the quiz submitting a response to a quiz and receiving a result We can use the Conversion State field on the Response model to represent these states that the Response has arrived at by listening on the Update action for a specific value in that field and then execute some logic to attach a Result record to the Response record However we only want to do this if we successfully commit this Response record to Gadget which we can do through the Success Effect Let s open up the Update action and add a Run Code Snippet effect on Success and name it calculateResult js A new page icon will appear click that and we ll be redirected to the code editor to build our effect Our code snippet will look like the following Effect code for Update on Response typedef import gadget server UpdateResponseActionContext UpdateResponseActionContext param UpdateResponseActionContext context Everything for running this effect like the api client current record params etc module exports async api record params logger gt if record conversionState quiz completed const potentialResults await api answer findMany filter response isSet true select id true result id true response id true const filteredResults potentialResults forEach p gt if parseInt p record id parseInt record id amp amp p result filteredResults push parseInt p result id In the case where the mode of filteredResults is bi modal or multi modal select the first result as our successful result arbitrary selection const result mode filteredResults if result const updatedRecord await api response update record id response result link result toString conversionState result mapped return updatedRecord return true function mode numbers as result can be bimodal or multi modal the returned result is provided as an array mode of const modes const count let i let number let maxIndex for i i lt numbers length i number numbers i count number count number if count number gt maxIndex maxIndex count number for i in count if count hasOwnProperty i if count i maxIndex modes push Number i return modes Copy and paste the above code into your calculateResult js and let s walk through this snippet at a high level We check that the updated record has a specific conversion state of “quiz completed This is one of the conversion states we ll specify through the API and represents a response state where the user has selected their answers and submitted their response for a result Then we find the applicable Answers for the given Response and Find the most common Result ID between the Answers to declare as the Response Result We then link this Result to the Response record Then we update the conversion state on the Response record to reflect the mapping of the Result to the Response Finally return the updated Response record The mode function below our exported module is the math we use to calculate the most common Result in the list of potential Results With our snippet in place our models created and relationships connected we re ready to consume our app s API and build our front end Building the UI Consuming the Gadget Client with Next jsPart of what makes Gadget so powerful is how it automatically generates API client packages for you in both JavaScript and TypeScript making the job of consuming and interacting with your app s backend nearly effortless We re going to consume our API in two ways for our app a freestanding app hosted on Vercel with both admin and customer facing views headless and a customer facing UI embedded in our Shopify shop s theme Headless Build Getting started with the UIWe will build our freestanding app using React and Next js and use the Polaris library for our components You can copy the following app into an empty Github repo to get you started This app provides both the admin facing and customer facing UIs you ll just need to take a few steps to get up and running Product Recommendation Quiz App UIOnce you ve copied the app into your own empty Github repo you ll need to update the following In the package json remove the gadget client alida quiz app dependencyLocally in your app s product quiz ui folder install React Gadget s React bindings NPM package npm install gadgetinc react react and your client s NPM package and ensure it is now in the package json as a dependency In the env file you ll need to replace YOUR API KEY with your app s API key for writing to production which you can find in Gadget under Settings gt API KeysIn api js you ll need to update the client import declaration to reference your client package import Client from gadget client YOUR CLIENT HERE on line Ensure your env file is added to the project s gitignore Once that s complete you may want to run a quick npx next in your terminal to boot your app locally and ensure you ve replaced all values as expected Then when the app is running locally at http localhost we can test our app and make our first quiz Making our first QuizNow for the fun part making a quiz Take a moment and make a quiz with your app you can use our demo quiz as inspiration or create your own Once your quiz is complete with questions answers and results go ahead and take your quiz Now we can look at records in Gadget and see how our front end app connects with Gadget through the client and makes API calls against it If we look at the Quiz data by selecting the Data icon on the Quiz model in the left hand sidebar we should see at least one instance of Quiz including its ID title and body We can also inspect our other records to see how our pieces work together to create our quiz experience When you ve got a quiz that you re happy with note the ID of the quiz if you re planning on building the quiz right into your Shopify store Otherwise let s deploy our app to Vercel Deploying on VercelIf you ve never worked with it before Vercel is a front end deployment and hosting platform and is particularly useful for Next js projects like ours To begin let s head to and log in with our Github account Once you ve authorized Vercel for your account you should be able to see your app repo as an available option in Vercel Select your repo and you ll be able to configure your environment for your first deployment For your Framework Preset select Next js Next ensure that the chosen Root Directory is the root of your app s directory and then select Environment Variables Finally you ll add your API key the same one in your env file so your app can authenticate your client at runtime Once you ve added your API key hit Deploy and in a moment your app should be deployed on Vercel For more on Vercel check out their excellent Get Started guide Shopify Build Installing in the Shopify themeWhile we used an NPM package to install our client into our freestanding app we ll need another method of calling the client in our Shopify shop s theme Gadget allows us to call our API client directly with a script tag We only need the client to run to serve the desired product recommendation quiz In this case we ll make a new template for the Page resource and then use it on a page we ll create to hold the quiz In your Shopify admin for your shop head to Online Store gt Themes and select Edit Code under the Actions menu for the theme you wish to edit Under Templates select “Add a new template and add a template called page quiz json Replace the generated file with the following JSON sections main type quiz page settings order main Next under Sections create a new section called quiz page liquid This will be the content that the page quiz json file returns We re going to replace this page with the following code lt link rel stylesheet href section main page css asset url media print onload this media all gt lt link rel stylesheet href component rte css asset url media print onload this media all gt lt script src YOUR DIRECT SCRIPT TAG URL HERE gt lt script gt lt script gt window GadgetClient new Gadget authenticationMode apiKey YOUR API KEY lt script gt lt script src product quiz js asset url defer defer gt lt script gt lt noscript gt section main page css asset url stylesheet tag lt noscript gt lt noscript gt component rte css asset url stylesheet tag lt noscript gt lt div class page width page width narrow gt lt h class main page title page title h gt page title escape lt h gt lt div class rte gt page content lt div gt lt div gt lt product quiz class quiz gt lt form action post class form novalidate validate gt lt h class product quiz title gt Loading lt h gt lt div class product quiz body gt lt span gt lt span gt lt div gt lt div class product quiz questions id questions gt lt div class product quiz question gt lt span class product quiz question answer gt lt span gt lt div gt lt div gt lt button type submit class product quiz submit button button secondary gt Get my results lt button gt lt form gt lt product quiz gt lt div gt lt div gt schema name t sections quiz page name tag section class spaced section endschema We just need to replace the YOUR DIRECT SCRIPT TAG URL HERE with your script tag and YOUR API KEY with your API key and we re ready for the last step using our client to return a selected quiz Using our client with JavaScriptUnder the Assets section in the sidebar select Add a new asset and create a new JavaScript file called product quiz js You can then add the following to that file async function updateAnswers answers response const updatedAnswers await answers forEach answer gt GadgetClient mutate mutation id GadgetID answer UpdateAnswerInput updateAnswer id id answer answer success answer id response id state conversionState createdAt email result id state body createdAt imageUrl productSuggestion id price title quiz id state body createdAt title updatedAt updatedAt sequence text id answer answer response link response id return updatedAnswers async function createResponse quiz const response await GadgetClient mutate mutation response CreateResponseInput createResponse response response success errors message on InvalidRecordError validationErrors apiIdentifier message response typename id state answers edges node id state createdAt question id state body createdAt imageUrl required sequence title updatedAt conversionState createdAt email quiz id state body createdAt title updatedAt updatedAt response quiz link quiz id conversionState in progress return response async function updateResponse response const updatedResponse await GadgetClient mutate mutation id GadgetID response UpdateResponseInput updateResponse id id response response success errors message on InvalidRecordError validationErrors apiIdentifier message response typename id state conversionState createdAt email quiz id state body createdAt title updatedAt result id state body createdAt imageUrl productSuggestion id price title product title handle body images edges node source quiz id state body createdAt title updatedAt updatedAt updatedAt id response id response conversionState quiz completed return updatedResponse async function fetchQuiz const quiz await GadgetClient query query getOneQuiz quiz id YOUR QUIZ ID id title body questions edges node id title body imageUrl required sequence answers edges node id text sequence question id results edges node id state body imageUrl productSuggestion id price title product title handle return quiz let selectedAnswers function selectAnswer answer selectedAnswers push answer let elId event srcElement id let parent document getElementById elId parentNode parent innerHTML lt h gt Answer selected lt h gt fetchQuiz then function quiz const quizData quiz quiz const questions quizData questions edges if customElements get product quiz customElements define product quiz class ProductQuiz extends HTMLElement constructor super this form this querySelector form this heading this querySelector form h this heading innerHTML quizData title this body this querySelector product quiz body span this body innerHTML quizData body this questions this querySelector product quiz questions const questionContainer this querySelector product quiz question const answerContainer this querySelector product quiz question answer let renderedQuestions questions sort a b gt a node sequence b node sequence forEach question i gt let clonedDiv questionContainer cloneNode true clonedDiv id question i clonedDiv insertAdjacentHTML beforeend lt div gt lt h gt question node title lt h gt lt br gt lt div gt this questions appendChild clonedDiv let answers question node answers edges answers sort a b gt b node sequence a node sequence forEach answer j gt let clonedSpan answerContainer cloneNode true clonedSpan id answer i j clonedSpan insertAdjacentHTML beforeend lt span gt lt a class button answer id clonedSpan id onClick selectAnswer answer node id gt answer node text lt a gt lt br gt lt span gt lt br gt clonedDiv appendChild clonedSpan this form addEventListener submit this onSubmitHandler bind this onSubmitHandler evt evt preventDefault const submitButton this querySelector product quiz submit submitButton setAttribute disabled true submitButton classList add loading createResponse quiz then function response const currentResponse response createResponse response updateAnswers selectedAnswers currentResponse then function results updateResponse currentResponse then function updatedResponse const finalResponse updatedResponse updateResponse response if finalResponse const result finalResponse result console log finalResponse if result const imgUrl result productSuggestion product images edges node source const productLink result productSuggestion product handle const resultHTML lt div gt lt h gt result body result productSuggestion product title lt h gt lt br gt lt p gt lt img src imgUrl width height gt lt br gt lt p gt result productSuggestion product body lt p gt lt br gt lt a class button href products productLink gt Check it out lt a gt lt div gt document getElementById questions innerHTML resultHTML submitButton classList remove loading submitButton classList add hidden You ll need to make one adjustment here in the quiz query you just need to replace id YOUR QUIZ ID with the ID of the quiz you want to return Save your changes and we re ready to go Head over to the Pages section of the Shopify admin and create a new page for your quiz You can add whatever title and body content you may want for the page and then set the template to use your new quiz template Once you save this page you re all done View the page to see your quiz right in your Shopify store ready to recommend products to your shoppers ConclusionToday you ve learned how Gadget and Shopify can work together to create engaging buying experiences for your shoppers while providing an approachable platform to build your app in a fraction of the time it takes to do so from scratch Feel free to expand on this app since we have the Product Variant ID of the recommended product we can construct a cart for the shopper on the front end using Javascript enabling a faster buying experience Additionally you could use Gadget s built in authentication to add a login layer to the admin UI add editing functionality to the quiz builder and more Want to know more about building effortless expressive apps with Gadget Check out their Guides and get building today Need support Join Gadget s Discord or book office hours with Gadget s Developer Advocate team |
2022-04-22 14:01:20 |
Apple |
AppleInsider - Frontpage News |
Daily deals April 22: $600 off MSI GE66 Raider Gaming Laptop, up to $200 off 13-inch M1 MacBook Air, $66 off HyperX Cloud Alpha S PC Gaming Headset, more |
https://appleinsider.com/articles/22/04/22/daily-deals-april-22-600-off-msi-ge66-raider-gaming-laptop-up-to-200-off-13-inch-m1-macbook-air-66-off-hyperx-cloud-alpha-s-pc-gaming-headset-more?utm_medium=rss
|
Daily deals April off MSI GE Raider Gaming Laptop up to off inch M MacBook Air off HyperX Cloud Alpha S PC Gaming Headset moreFriday s best deals include discounts on a great gaming laptop an M MacBook Air and a gaming headset to help you keep on comms with friends If you ve been waiting for a reliable gaming PC this is your sign And you never need an excuse to pick up a new M MacBook Air ーespecially at up to off MSI GE Raider Gaming Laptop inch M MacBook Air and HyperX Cloud Alpha S PC Gaming Headset are on sale todayEvery day we set off on our own special scavenger hunt across the internet to find the best series of discounts we possibly can We collect several options in terms of discounts including deals on Apple products smartphones software and plenty of other gear all so you can save some cash If an item is out of stock you may still be able to order it for delivery at a later date Many of the discounts are likely to expire soon though so act fast Read more |
2022-04-22 14:29:21 |
Apple |
AppleInsider - Frontpage News |
Apple is switching its virtual Apple Cash cards to the Visa network |
https://appleinsider.com/articles/22/04/22/apple-is-switching-its-virtual-apple-cash-cards-to-the-visa-network?utm_medium=rss
|
Apple is switching its virtual Apple Cash cards to the Visa networkApple is in the midst of switching its Apple Cash virtual debit cards to the Visa network just days after the company rolled out new fraud protections for Apple Pay transactions Credit AppleThe transition is being hinted at by updated images on the Apple Cash webpage as well as in support documents Some of the images have been swapped to reflect Apple Cash cards that are now Visa debit cards The switchover which apparently took place on April was first spotted by Twitter user Kanjo Read more |
2022-04-22 14:20:24 |
海外TECH |
Engadget |
What we bought: How a portable monitor made working from home a lot easier |
https://www.engadget.com/asus-rog-strix-xg17ahp-portable-monitor-irl-143018893.html?src=rss
|
What we bought How a portable monitor made working from home a lot easierEven for someone like me who likes working from home the pandemic has made things a challenge especially in my small square foot two bedroom apartment You see when my wife and I welcomed our first child last year dedicated working spaces became scarce So I addressed the situation the best way I know how with tech In this case an ASUS ROG Strix XGAHP portable monitor Before my son arrived we actually had a pretty good setup going I used our second bedroom as an office and very occasional guest room And when all the office buildings closed in early due to Covid we managed to find room for another desk in our bedroom It wasn t ideal because even though I m a gadget nerd we try to keep the bedroom free of unnecessary screens and distractions But we each had our own dedicated working space with dual monitors and enough room between our desks that we could jump on video calls without disturbing one another It was awkward but acceptable The Asus ROG Strix XGAHP included stand means you can position it above your laptop s display which does a ton to help prevent neck strain Note For the photos I swapped my inch MacBook Pro work laptop in for my wife s machine for privacy Sam Rutherford EngadgetBut then our little bundle of joy threw a drool covered wrench into those plans Now just to be clear I don t begrudge him one bit Parents often have to make sacrifices for kids and more often than not we re happy to do so But I think it s fair to say that an office nursery just isn t a good combo So after my son outgrew his bassinet and stopped sleeping in our room I had to move my gear out well most of it anyway so he could have a real bedroom of his own What made this a bit more challenging is that my main computer at home is a desktop I ve always been a big PC person and I love the speed and flexibility you get with a custom built rig Side note With work from home becoming a more permanent thing I feel like there are a lot of people that would benefit from switching to a desktop Assuming you have the space for it of course The downside of this is that I m pretty limited in where I could put my PC Big shock I know but a desktop sort of necessitates having a desk Thankfully my wife graciously offered to let me use the one in our bedroom which I honestly can t appreciate enough while she moved her workspace out to our dining table in the living room While the Asus ROG Strix XGAHP does look seem of puny compared to regular monitors its much easier to pack up and move when you need that space for other stuff Sam Rutherford EngadgetAt this point you re probably envisioning a host of issues Since we eat dinner there setting up dual monitors isn t really an option This meant my wife was completely reliant on her inch MacBook Pro which doesn t offer a lot of screen space and messes with her posture Looking down at a laptop screen for eight or more hours a day is a surefire recipe for chronic neck and back pain That s where the ASUS ROG Strix XGAHP portable monitor comes in At first glance it seems like overkill for general productivity and it is It has a Hz refresh rate and support for AMD FreeSync which are great for gaming but don t do much when you re looking at spreadsheets There s even a built in mAh battery so you can use it completely untethered for four to five hours And with a price of the ROG Strix XGAHP is two to three times more expensive than a lot of competitors particularly the traditional business oriented ones Sam Rutherford EngadgetBut honestly I feel like that money has been well spent My personal philosophy is that for something you re going to use a lot it s better to spend a little extra than pinch pennies and end up with an unsatisfactory device Unlike most of its rivals the ROG Strix XGAHP comes with a stand and I m not talking about a simple kickstand It s a full on detachable tripod which means you can position the screen so it sits above your laptop s display instead of off to the side No need to crane your neck Important apps live up top on the portable monitor while less critical stuff like Slack live down below The ROG Strix XGAHP also measures inches across which makes it one of the largest portable monitors you can buy Most enterprise focused alternatives top out at or inches and while we probably would have gone even larger if we could there aren t really any inch or larger portable monitors that offer the same level of specs and features Sure the monitor s brightness of nits could be better but its matte coating makes it easy to look at all day even in sunny rooms with lots of reflections The ROG logo even lights up if you re into that sort of thing Sam Rutherford EngadgetMeanwhile thanks to support for video and power delivery over USB C setting up the monitor only requires a single cable This makes it super easy to break down and pack away when friends or family come over And during the week when we re too lazy to do that the whole kit is slim enough we can just push it to the side and still have plenty of room for food I also want to give ASUS props for including a bunch of useful accessories The monitor comes with a carrying bag and a foldable screen protector that doubles as a kickstand along with a USB C cable a USB C to USB A adapter a power brick and even an HDMI to micro HDMI cable in case your PC doesn t support video over USB My only gripe is that the locking mechanism for its height adjustment isn t super secure So if I press hard even when it s locked the monitor still moves up and down One of the best things about the Asus ROG Strix XGAHP are all the included accessories Sam Rutherford EngadgetBut this one demerit doesn t really detract from all its positives That s because while the ROG Strix XGAHP isn t as good as a regular monitor it s way more than simply adequate It s flexible and it fits in my life and on my table in a way that a regular desktop display can t It even has a lot of potential as a handy companion for my Switch while traveling Though due to the pandemic I haven t had a chance to test that out yet And while my wife and I are thinking about getting a bigger place with the housing market the way it is moving isn t in our immediate future So until we upgrade to a larger home ASUS portable gaming monitor is filling an important role when it comes to making a cramped work from home situation a lot more tolerable |
2022-04-22 14:30:18 |
海外TECH |
Engadget |
iRobot's Roomba 694 drops to $180, plus the rest of the week's best tech deals |
https://www.engadget.com/irobot-roomba-694-drops-to-180-best-tech-deals-this-week-140058892.html?src=rss
|
iRobot x s Roomba drops to plus the rest of the week x s best tech dealsMother s Day is quickly approaching and if you re looking to get mom a piece of new tech you can do so right now while saving some money in the process Apple s latest AirPods remain on sale for and you can pick up the Apple Watch Series for as low as depending on the color you choose A few robot vacuums have been discounted including the already affordable Roomba plus Ninja s in multicooker is still off and down to Here are the best tech deals from this week that you can still get today Roomba Valentina Palladino EngadgetiRobot s affordable Roomba is still on sale for right now which is a record low This is one of our favorite budget friendly robot vacuums thanks to its easy to use mobile app good cleaning power and sleek design Buy Roomba at Amazon AirPods rd gen Apple s newest earbuds are close to their record low price right now You can grab the third gen AirPods for or off their normal rate We gave them a score of for their improved design much better audio quality and longer battery life Buy AirPods rd gen at Amazon AirPods ProApple s AirPods Pro are back on sale for which is percent off their normal price We gave them a score of for their improved fit good audio quality and solid ANC Buy AirPods Pro at Amazon Apple Watch Series Many color options of the mm Apple Watch Series are down to or off their normal price We gave the wearable a score of for its bigger screen faster charging and handy watchOS features Buy Apple Watch Series at Amazon inch iPadBoth Amazon and Walmart have the entry level iPad for right now or off its normal price We gave the slab a score of for its improved performance excellent battery life and Center Stage capable front cameras Buy inch iPad at Amazon Buy inch iPad at Walmart AirPods MaxEngadgetA couple of colors of the AirPods Max are off and down to We gave the premium headphones a score of for their excellent sound quality solid ANC and reliable onboard controls Buy AirPods Max at Amazon Roomba j Valentina Palladino EngadgetThe Roomba j robo vac and the Roomba s are both off right now and down to and respectively These are both advanced machines from iRobot with the j sporting a pet poop detection feature while the s has the strongest suction power of all of the company s robot vacuums Both also come with clean bases so you won t have to empty their dustbins manually after each cleaning job Buy Roomba j at Amazon Buy Roomba s at Amazon Eero routerseero LLCA bunch of Eero router packs are on sale right now including a three pack of the Eero Pro which is off and down to You save spend a bit less money and opt for the two pack which is off and down to These are the latest WiFi systems from the Amazon owned brand and many of the come with built in Zigbee smart home hubs Shop Eero sale at AmazonFitbit Charge Valentina Palladino EngadgetThe Fitbit Charge tracker is down to which is only more than its record low price We gave the device a score of for its accurate onboard GPS slim design standard Fitbit Pay and long battery life Buy Fitbit Charge at Amazon Ninja Foodi in multicookerNinjaNinja s in multicooker is off and down to which is close to its all time low price This is a solid alternative to an Instant Pot as it has a bunch of cooking modes including pressure cook slow cook steam yogurt and even air fry Buy Ninja in multicooker at Amazon Google Nest Video Doorbell BatteryGoogleA handful of Google smart home devices are on sale right now including the Nest Video Doorbell Battery which is off and down to This gadget will let you keep an eye on what s going on outside your door from your phone and there are no wires to fuss with when you install it You can also pick up the Nest Cam Indoor and Outdoor for less coming in at and respectively Buy Nest Cam Indoor at Adorama Buy Nest Cam Outdoor at Adorama Buy Nest Cam Outdoor at B amp H Buy Nest Video Doorbell Battery at Adorama Buy Nest Video Doorbell Battery at B amp H Amazon smart thermostatAmazon s smart thermostat is back on sale for which is percent off its regular price The Energy Star certified device uses Honeywell s Home Thermostat tech to help you save on energy costs ーand like other Amazon devices it works with Alexa so you can use voice commands to control the temperature in your home Buy smart thermostat at Amazon Google Nest thermostatsBoth Google s standard Nest Thermostat and the more advanced Learning model remain discounted right now You can pick up the regular version for while the Learning Thermostat is still on sale for They share most of the same features but you ll get a slicker design a higher res display and the ability to connect with Nest Temperature Sensors with the Learning model Buy Nest Thermostat at Amazon Buy Nest Learning Thermostat at Amazon New tech dealsNordVPNNordVPN s latest deal lets you save percent off the price of a two year subscription so you ll pay only for that time period After the first two years the price goes up to per year NordVPN is one of our favorites thanks to its speed its no logs policy the thousands of servers it has to choose from and that one account supports up to six connected devicesSubscribe to NordVPN years JBL Xtreme This midrange Bluetooth speaker is off and down to which is the cheapest we ve seen it It earned a spot in our portable Bluetooth speaker guide for its dynamic yet balanced sound quality IP rated design and relatively compact size Buy JBL Xtreme at Amazon inch Sony AJ Bravia XR OLED smart TVThis massive OLED TV from Sony is less than usual bringing it down to It s the model and it supports XR Motion Clarity the Google TV interface voice commands with Alexa HDMI and more Buy inch Sony AJ OLED at Amazon Follow EngadgetDeals on Twitter for the latest tech deals and buying advice |
2022-04-22 14:00:58 |
Cisco |
Cisco Blog |
Working Backwards to Drive Forward Progress |
https://blogs.cisco.com/innovation/working-backwards-to-drive-forward-progress
|
domain |
2022-04-22 14:04:16 |
海外TECH |
CodeProject Latest Articles |
Driving Multiple Screens With GFX and an ESP32 |
https://www.codeproject.com/Articles/5330372/Driving-Multiple-Screens-With-GFX-and-an-ESP32
|
driving |
2022-04-22 14:34:00 |
海外科学 |
NYT > Science |
Tucker Carlson Has a Cure for Declining Virility |
https://www.nytimes.com/2022/04/22/health/tucker-carlson-testosterone.html
|
treatment |
2022-04-22 14:44:18 |
金融 |
金融庁ホームページ |
「金融商品取引業等に関する内閣府令及び金融サービス仲介業者等に関する内閣府令の一部を改正する内閣府令(案)」等に対するパブリックコメントの結果等について公表しました。 |
https://www.fsa.go.jp/news/r3/shouken/20220422/20220422.html
|
仲介業者 |
2022-04-22 16:00:00 |
金融 |
金融庁ホームページ |
中島長官による第13回SAAJ国際セミナー「2050年ネットゼロカーボン社会に向けた資産運用業のあり方」での講演について掲載しました。 |
https://www.fsa.go.jp/common/conference/danwa/index_kouen.html#Commissioner
|
資産運用 |
2022-04-22 15:00:00 |
金融 |
金融庁ホームページ |
「ESG評価・データ提供機関等に係る専門分科会」(第5回)議事次第について公表しました。 |
https://www.fsa.go.jp/singi/esg_hyouka/siryou/20220411.html
|
評価 |
2022-04-22 15:00:00 |
金融 |
金融庁ホームページ |
「米国及び欧州のオープンエンドファンドの運用パフォーマンス調査」について公表しました。 |
https://www.fsa.go.jp/common/about/research/20220421_1.html
|
運用 |
2022-04-22 15:00:00 |
金融 |
金融庁ホームページ |
「国内運用会社の運用パフォーマンスを示す代表的な指標(KPI)の測定と国内公募投信についての諸論点に関する分析」について公表しました。 |
https://www.fsa.go.jp/common/about/research/20220421_2.html
|
運用会社 |
2022-04-22 15:00:00 |
金融 |
日本銀行:RSS |
【講演】黒田総裁「日本における物価変動と金融政策の役割」(米国・コロンビア大学、4月22日) |
http://www.boj.or.jp/announcements/release_2022/rel220423a.htm
|
金融政策 |
2022-04-23 00:00:00 |
ニュース |
BBC News - Home |
Ukraine war: Russia 'plans to seize southern Ukraine' |
https://www.bbc.co.uk/news/world-europe-61188943?at_medium=RSS&at_campaign=KARANGA
|
moldova |
2022-04-22 14:49:09 |
ニュース |
BBC News - Home |
Hakeem Hussain: Mum guilty of manslaughter over fatal asthma attack |
https://www.bbc.co.uk/news/uk-england-birmingham-61165786?at_medium=RSS&at_campaign=KARANGA
|
hakeem |
2022-04-22 14:48:47 |
ニュース |
BBC News - Home |
Pension fraudsters jailed after £13m scam |
https://www.bbc.co.uk/news/business-61181938?at_medium=RSS&at_campaign=KARANGA
|
lifetime |
2022-04-22 14:25:12 |
ニュース |
BBC News - Home |
Tyson Fury v Dillian Whyte: Champion Fury weighs in 12lb lighter than previous fight |
https://www.bbc.co.uk/sport/boxing/61187270?at_medium=RSS&at_campaign=KARANGA
|
Tyson Fury v Dillian Whyte Champion Fury weighs in lb lighter than previous fightWBC champion Tyson Fury weighs in lb lighter than his previous fight before Saturday s heavyweight bout against Dillian Whyte |
2022-04-22 14:24:14 |
ニュース |
BBC News - Home |
Mike Tyson punched plane passenger 'after bottle thrown' |
https://www.bbc.co.uk/news/world-us-canada-61192417?at_medium=RSS&at_campaign=KARANGA
|
boxer |
2022-04-22 14:20:17 |
ニュース |
BBC News - Home |
Stowaway cat rescued on North Sea platform |
https://www.bbc.co.uk/news/uk-scotland-north-east-orkney-shetland-61187052?at_medium=RSS&at_campaign=KARANGA
|
north |
2022-04-22 14:33:31 |
北海道 |
北海道新聞 |
春季高校野球 56チーム熱戦 支部予選、5月7日開幕 |
https://www.hokkaido-np.co.jp/article/672534/
|
高校野球 |
2022-04-22 23:04:07 |
北海道 |
北海道新聞 |
コロナ禍から回復鮮明 道内採用計画 エネや流通、業績改善 |
https://www.hokkaido-np.co.jp/article/673034/
|
北海道新聞 |
2022-04-22 23:01:05 |
コメント
コメントを投稿