AWS |
AWS Security Blog |
Protect APIs with Amazon API Gateway and perimeter protection services |
https://aws.amazon.com/blogs/security/protect-apis-with-amazon-api-gateway-and-perimeter-protection-services/
|
Protect APIs with Amazon API Gateway and perimeter protection servicesAs Amazon Web Services AWS customers build new applications APIs have been key to driving the adoption of these offerings APIs simplify client integration and provide for efficient operations and management of applications by offering standard contracts for data exchange APIs are also the front door to hosted applications that need to be effectively secured … |
2023-07-19 18:32:07 |
AWS |
AWS Security Blog |
Protect APIs with Amazon API Gateway and perimeter protection services |
https://aws.amazon.com/blogs/security/protect-apis-with-amazon-api-gateway-and-perimeter-protection-services/
|
Protect APIs with Amazon API Gateway and perimeter protection servicesAs Amazon Web Services AWS customers build new applications APIs have been key to driving the adoption of these offerings APIs simplify client integration and provide for efficient operations and management of applications by offering standard contracts for data exchange APIs are also the front door to hosted applications that need to be effectively secured … |
2023-07-19 18:32:07 |
海外TECH |
Ars Technica |
Netflix kills Basic plan, making its cheapest ad-free tier $15.49 |
https://arstechnica.com/?p=1955029
|
basic |
2023-07-19 18:30:09 |
海外TECH |
Ars Technica |
Nissan is the next automaker to adopt Tesla-style EV charging plugs |
https://arstechnica.com/?p=1955084
|
superchargers |
2023-07-19 18:11:42 |
海外TECH |
MakeUseOf |
How to Play Old Championship Manager for Free on Your Windows PC |
https://www.makeuseof.com/how-to-play-old-championship-manager-for-free-on-windows-pc/
|
championship |
2023-07-19 18:01:23 |
海外TECH |
DEV Community |
A complete guide to the Node.js event loop |
https://dev.to/logrocket/a-complete-guide-to-the-nodejs-event-loop-1ie2
|
A complete guide to the Node js event loopWritten by Joseph Mawa️Node js is a single threaded non blocking event driven JavaScript runtime environment The Node runtime environment enables you to run JavaScript outside the browser on the server side The asynchronous and non blocking feature of Node js is primarily orchestrated by the event loop In this article you will learn the Node js event loop so that you can leverage its asynchronous APIs to build efficient Node js applications Knowing how the event loop works internally will not only help you write robust and performant Node js code but it will also teach you to debug performance issues effectively Jump ahead What is the event loop in Node js The microtask queue in Node js Phases of the Node js event loop Timers phase Pending callbacks phase Idle prepare phase Poll phase Check phase Close callbacks The Node js event loop in practice FAQs about the event loop What is an event loop in Node js The Node js event loop is a continuously running semi infinite loop It runs for as long as there is a pending asynchronous operation Starting a Node js process using the node command executes your JavaScript code and initializes the event loop If Node js encounters an asynchronous operation such as timers files and network I O while executing a script it offloads the operation to the native system or the thread pool Most I O operations such as reading and writing to file file encryption and decryption and networking are time consuming and computationally expensive Therefore to avoid blocking the main thread Node js offloads these operations to the native system There the Node process is running so the system handles these operations in parallel Most modern operating system kernels are multi threaded by design Therefore an operating system can handle multiple operations concurrently and notifies Node js when those operations are complete The event loop is responsible for executing your asynchronous API callbacks It has six major phases Timers phase for handling setTimeout and setInterval Pending callbacks phase for executing deferred callbacks Idle Prepare phase that the event loop uses for internal housekeeping Poll phase for polling and handling events such as file and network I O Check phase for executing setImmediate callbacks Close phase for handling certain close eventsThough the above list is linear the event loop is cyclical and iterative as in the diagram below After the event loop s last phase the next iteration of the event loop starts if there are still pending events or asynchronous operations Otherwise it exits and the Node js process ends We will explore each phase of the event loop in detail in the following sections Before that let s explore the “next tick and microtask queues that appear at the center of the event loop in the above diagram Technically they are not part of the event loop The microtask queue in Node js Promises queueMicrotask and process nextTick are all part of the asynchronous API in Node js When promises settle queueMicrotask and the then catch and finally callbacks are added to the microtask queue On the other hand the process nextTick callbacks belong to the “next tick queue Let s use the example below to illustrate how the microtask and the “next tick queues are processed setTimeout gt console log setTimeout Promise resolve Promise then console log Promise reject Promise catch console log queueMicrotask gt console log queueMicrotask process nextTick console log nextTick setTimeout console log setTimeout setTimeout console log setTimeout Let s assume the three timers above expire at the same time When the event loop enters the timers phase it will add the expired timers to the timers callback queue and execute them from the first to the last In our example code above when executing the first callback in the timers queue the then catch and queueMicrotask callbacks are added to the microtask queue Similarly the process nextTick callback is added to a queue that we will refer to as the “next tick queue Be aware console log is synchronous When the first callback from the timers queue returns the “next tick queue is processed If more next ticks are generated while processing callbacks in the “next tick queue they are added to the back of the “next tick queue and executed as well When the “next tick queue is empty the microtask queue is processed next If the microtasks generate more microtasks they are also added to the back of the microtask queue and executed When both the “next tick queue and microtask queue are empty the event loop executes the second callback in the timers queue The same process continues until the timers queue is empty The process described above is not limited to the timers phase The “next tick queue and the microtask queue are processed similarly when the event loop executes JavaScript in all the other major phases Phases of the Node js event loop As explained above the Node js event loop is a semi infinite loop with six major phases It has more phases but the event loop uses some of the phases for housekeeping internally They have no direct effect on the code you write Therefore we won t cover them here Each major phase in the event loop has a first in first out queue of callbacks For example the operating system will run scheduled timers until they expire After that the expired timers are added to the timers callback queue The event loop then executes the callbacks in the timers queue until the queue is empty or when a maximum number of callbacks is reached We ll explore the major phases of the event loop in the sections below Timers phase Like the browser Node js has the timers API for scheduling functions that will execute in the future The timers API in Node js is similar to that in the browser However there are some slight implementation differences The timers API consists of the setTimeout setInterval and setImmediate functions All three timers are asynchronous The timers phase of the event loop is only responsible for handling setTimeout and setInterval On the other hand the check phase is responsible for the setImmediate function We will explore the check phase later Both setTimeout and setInterval have the function signature below setTimeout callback delay args setInterval callback delay args callback is the function to invoke when the timer expires delay is the number of milliseconds to wait before invoking callback It defaults to one millisecond args are the optional arguments passed to callbackWith setTimeout callback is invoked once when delay elapses On the other hand setInterval schedules callback to run every delay milliseconds The diagram below shows the event loop after removing all the phases except the timers phase For simplicity let s take three scheduled setTimeout that expire concurrently The steps below describe what happens when the event loop enters the timer phase The three expired timers are added to the timers queue The event loop executes the first setTimeout callback If next ticks or microtasks are generated while executing the first callback they are added to their respective queue When the first setTimeout callback returns the “next tick queue is processed If more next ticks are generated while processing the “next tick queue they re added to the back of the “next tick queue and processed immediately If microtasks are generated they are added to the microtask queue When the next tick queue is empty the microtask queue is processed If more micro tasks are generated they re added at the back of the microtask queue and processed immediately If both the next tick queue and microtask queue are empty the event loop will execute the second callback in the timers queue Steps two four are repeated for the second and third callbacks After executing all the expired timer callbacks or the maximum number of callbacks the event loop goes to the next phaseIn the steps above we used a queue of three expired timers However that will not always be the case in practice The event loop will process the timers queue until it is empty or the maximum number of callbacks is reached before moving to the next phase The event loop is blocked when executing JavaScript callbacks If a callback takes long to process the event loop will wait until it returns Because Node js mostly runs on the server side blocking the event loop will lead to performance issues Similarly the delay argument you pass to the timer functions is not always the exact waiting time before executing the setTimeout or setInterval callback It is the minimum waiting time The duration it takes depends on how busy the event loop is and the system timer used Pending callbacksDuring the polling phase which we will cover shortly the event loop polls for events such as file and network I O operations The event loop processes some of the polled events within the poll phase and defers specific events to the pending phase in the next iteration of the event loop In the pending phase the event loop adds the deferred events to the pending callbacks queue and executes them Events processed in the pending callbacks phase include certain TCP socket errors emitted by the system For example some operating systems defer the handling of the ECONNREFUSED error events to this phase Idle prepareThe event loop uses the idle prepare phase for internal housekeeping operations It doesn t have a direct effect on the Node js code you write Though we won t explore it in detail it is necessary to know that it exists Poll phaseThe poll phase has two functions The first is to process the events in the poll queue and execute their callbacks The second function is to determine how long to block the event loop and poll for I O events When the event loop enters the poll phase it queues pending I O events and executes them until the queue is empty or a system dependent limit is reached In between the execution of the JavaScript callbacks the next tick and microtask queues are drained like in the other phases The difference between the poll phase and other phases is that the event loop will sometimes block the event loop for a duration and poll for I O events until the timeout elapses or after reaching the maximum callback limit The event loop considers several factors when deciding whether to block the event loop and for how long to block it Some of these factors include the availability of pending I O events and the other phases of the event loop such as the timers phase CheckThe event loop executes the setImmediate callback in the check phase immediately after I O events setImmediate has the function signature below setImmediate callback args callback is the function to invoke args are optional arguments passed to callbackThe event loop executes multiple setImmediate callbacks in the order in which they are created In the example below the event loop will execute the fs readFile callback in the poll phase because it s an I O operation After that it executes the setImmediate callbacks immediately in the check phase within the same iteration of the event loop On the other hand it processes the setTimeout in the timers phase in the next iteration of the event loop When you invoke the setImmediate function from an I O callback like in the example below the event loop will guarantee it will run in the check phase within the same iteration of the event loop const fs require fs let counter fs readFile path to file encoding utf gt console log Inside I O counter counter setImmediate gt console log setImmediate from I O callback counter counter setTimeout gt console log setTimeout from I O callback counter counter setImmediate gt console log setImmediate from I O callback counter counter Any microtasks and next ticks generated from the setImmediate callbacks in the check phase are added to the microtask queue and “next tick queue respectively and drained immediately like in the other phases Close callbacksThis close phase is where Node js executes callbacks to close events and winds down a given event loop iteration When a socket closes the event loop will process the close event in this phase If next ticks and microtasks are generated in this phase they are processed like in the other phases of the event loop It is worth emphasizing that you can terminate the event loop at any phase by invoking the process exit method The Node js process will exit and the event loop will ignore pending asynchronous operations The Node js event loop in practice As hinted above it is important to understand the Node js event loop in order to write performant non blocking asynchronous code Using the asynchronous APIs in Node js will run your code in parallel but your JavaScript callback will always run on a single thread Therefore you can unintentionally block the event loop while executing the JavaScript callback Because Node js is a server side language blocking the event loop will make your server slow and unresponsive reducing your throughput In the example below I am deliberately running a while loop for about a minute to simulate a long running operation When you hit the blocking endpoint the event loop will execute the app get callback in the poll phase of the event loop const longRunningOperation duration gt const start Date now while Date now start lt duration app get blocking req res gt longRunningOperation res send message blocking route app get non blocking req res gt res send message non blocking route Because the callback is executing a time consuming operation the event loop is blocked for the duration the task is running Any request to the non blocking route will also wait for the event loop to first unblock As a result your application will become unresponsive Your requests from the frontend will become slow and eventually timeout To perform such CPU intensive operations you can take advantage of the worker thread Similarly do not use the synchronous APIs for the following modules on the server side because they can potentially block the event loop crypto zlib fs child process FAQs about the event loop Is Node js multi threaded As explained above Node js runs JavaScript code in a single thread However it has worker threads for concurrency To be precise in addition to the main thread Node has a thread pool comprised of four threads by default Libuv the C library that gives Node js its asynchronous non blocking I O capability is responsible for managing the thread pool Node js gives you the capability of using additional threads for computationally expensive and long lasting operations to avoid blocking the event loop Do promises run on a separate thread Node promises do not run on a separate thread The then catch and finally callbacks are added to the microtask queue As explained above the callbacks in the microtask queue are executed on the same thread in all the major phases of the event loop Why is the event loop important in Node js The event loop orchestrates the asynchronous and non blocking feature of Node It is responsible for monitoring client requests and responding to requests on the server side If a JavaScript callback blocks the event loop your server will become slow and unresponsive to client requests Without the event loop Node js would not be as powerful as it is now and Node js servers would be painfully slow How does asynchronous programming work in Node js Node js has several built in synchronous and asynchronous APIs Synchronous APIs block the execution of JavaScript code until the operation is complete In the example below we re using fs readFileSync to read file contents fs readFileSync is synchronous Therefore it will block the execution of the rest of the JavaScript code until the file reading process is complete before moving to the next line of code const fs require fs const path require path console log At the top try const data fs readFileSync path join dirname notes txt encoding utf console log data catch error console error error console log At the bottom On the other hand non blocking asynchronous APIs perform the operations in parallel by offloading them to the thread pool or the native system on which Node js is running When the operation is complete the event loop schedules and executes the JavaScript callback For example the async form of the fs module uses the thread pool to write or read file contents When the contents of the file operation are ready for processing the event loop executes the JavaScript callback in the poll phase In the example below fs readFile is async and non blocking The event loop will execute the callback you pass to it when the file read operation is complete The rest of the code will run without waiting for the file operation to complete const fs require fs console log At the top fs readFile path to file encoding utf err data gt if err console error error err return console log data data console log At the bottom When are microtasks executed in Node js Microtasks are executed between operations in all the major phases of the event loop Each major phase of the event loop executes a queue of JavaScript callbacks Between executions of successive JavaScript callbacks in the phase queue there is a microtask checkpoint where the microtask queue is drained How do you exit the Node js event loop The Node js event loop runs for as long as there are pending events for it to process If there isn t any pending work the event loop exits after emitting the exit event and the exit listener callback returns You can also exit the event loop by explicitly using the process exit method Invoking process exit will immediately exit the running Node js process Any pending or scheduled events in the event loop will be abandoned process on exit code gt console log Exiting with exit code code process exit You can listen for the exit event However your listener function must be synchronous because the Node js process will exit immediately after the listener function returns ConclusionThe Node runtime environment has APIs to write non blocking code However because all your JavaScript code executes on a single thread it is possible to block the event loop unintentionally An in depth knowledge of the event loop helps you write robust secure and performant code and effectively debug performance issues The event loop has about six major phases These six phases are the timers pending idle and prepare poll check and close Each phase has a queue of events that the event loop processes until it is empty or reaches a hard system dependent limit While executing a callback the event loop is blocked Therefore be sure your asynchronous callbacks don t block the event loop for long otherwise your server will become slow and unresponsive to client requests You can use the thread pool to perform long running or CPU intensive tasks s only Monitor failed and slow network requests in productionDeploying a Node based web app or website is the easy part Making sure your Node instance continues to serve resources to your app is where things get tougher If you re interested in ensuring requests to the backend or third party services are successful try LogRocket LogRocket is like a DVR for web and mobile apps recording literally everything that happens while a user interacts with your app Instead of guessing why problems happen you can aggregate and report on problematic network requests to quickly understand the root cause LogRocket instruments your app to record baseline performance timings such as page load time time to first byte slow network requests and also logs Redux NgRx and Vuex actions state Start monitoring for free |
2023-07-19 18:49:40 |
海外TECH |
DEV Community |
Intersection observer directive to add and remove classes in Angular |
https://dev.to/ayyash/intersection-observer-directive-to-add-and-remove-classes-in-angular-2n3g
|
Intersection observer directive to add and remove classes in AngularIn this series we want to create a directive or multiple directives in Angular to handle different features that employ the intersection observer mainly adapting classes of DOM elements lazy loading images and emitting events First the basics this directive needs to return if on SSR I borrowed the definition of isBrowser from Angular CDK platform file like The main layout of our directive looks like this I named it crUiio because io was wrong and iobs was even more wrong The final code can be found on StackBlitz cruiio directive Directive selector crUiio standalone true export class UiioDirective implements AfterViewInit Input crUiio string at least ElementRef platform and renderer constructor private el ElementRef Inject PLATFORM ID private platformId Object private renderer Renderer this is a nice property copied from Angular CDK isBrowser boolean this platformId isPlatformBrowser this platformId typeof document object amp amp document ngAfterViewInit if on server do not show image if this isBrowser return if intersection observer is not supported if IntersectionObserver do nothing return const io new IntersectionObserver entries observer gt there is only one entry per directive application entries forEach entry gt if entry isIntersecting in view else out of view observe the native element io observe this el nativeElement According to this excellent blog post on the possible performance drag of multiple observers versus one per document it looks to me that having one observer per element for less than elements should be fine Let us try both ways and choose the more convenient One observer per all windowWhere shall we save this global intersection observer I shall save in the window global scope To reference the window I ll create a const with type any so that VSCode would stop nagging me about type keep on observer on windowconst global any window Directive export class UiioDirective implements AfterViewInit private getIo if global crUiio return global crUiio else global crUiio new IntersectionObserver entries observer gt this call back is called once entries forEach entry gt if entry isIntersecting in view check which behavior to carry out else out of view return global crUiio ngAfterViewInit const io this getIo io observe this el nativeElement Since we want to use this directive to do other things as well let s create a property that identifies the behavior The obvious choice is the directive immediate value It is a string but we can change type to specific strings Input crUtil lazy class load etc We ll also create a private method for each and let s adapt the main caller to switch between different behaviors adapt getIo global crUiio new IntersectionObserver entries observer gt entries forEach entry gt switch this crUtil case lazy this lazyLoad entry observer break case load do something break case class default this classChange entry observer break Okay let s implement the class adapter Adapting css classesThe behavior to add a class to the element or remove a class We want to have both options On intersection add class on out of view remove class Or on intersection remove class on out of view add class The most flexible way is to just be explicit with the classes to add or remove like this example usage lt div crUiio class inview a b outofview c d gt lt div gt In addition to that I speak from experience we want to target a higher up container with the class list our best option here is the body I choose to be as flexible as I can not because I want to open up for future requirements that may or may not occur I have passed that level of arrogance but because I have been bitten by this too many times example use lt div crUiio class inview a b inviewbody x y gt lt div gt Now we have all the ingredients we need let s cook directive that s a whole lot of inputs and statementsprivate classChange entry IntersectionObserverEntry observer IntersectionObserver if entry isIntersecting in view separate then add tokens document body classList add this inviewbody entry target classList add this inView document body classList remove this outofViewBody entry target classList remove this outofView else out of view document body classList remove this inViewBody entry target classList remove this inView document body classList add this outofViewBody entry target classList add this outofView Let s test this thus far before we go on Find an example on StackBlitz a very simple page with ugly boxes we want to validate that the body and boxes get the right classes when requested Here are the issues that need fixing We need to process the class list before we use it we need to separate into multiple strings and remove empty strings since classList add would fail but classList add null won t We need to figure out a way to pass those values through the entry target since we have one shared observer that kicks in a callback with the first directive usedClass prepping We ll put them all in one object and prepare them on AfterViewInit Assuming they will not change after initialization I have yet to run into a requirement where I don t know my classes ahead of time but if you run into it you probably need to adapt this with a public method that changes the values We will also assign the default value to empty strings no harm in that One short statement to remove empty strings and the prep method looks like this directiveprivate allClasses any private prepClasses any split at spaces and remove empty ones const clean str string gt str split filter n gt n return inView clean this inview outofView clean this outofview inViewBody clean this inviewbody outofViewBody clean this outofviewbody ngAfterViewInit prep classes this allClasses this prepClasses Now the class change function will go through them expend the classes as required like this use by expanddocument body classList add this allClasses inViewBody Callback isolation Since the changeClass function is a callback to the globally setup intersectionObserver the classes passed are those that belong to the first directive That s not cool Instead we shall load the nativeElement that comes in Angular ElementRef with its own classes to be reused with entry target Loading information in HTML data attributes programmaticallyI kind of miss good old jQuery All we had to do back then is element data json and magic We can t do that straight out of the box in JavaScript We can use the dataset property which will need to be JSON stringified then JSON parsed There is an easier way however We can set the property directly to the HTML element like thisthis el nativeElement newprop this allClasses And read it like thisentry target newprop This feels like a cheat But I know JavaScript and DOM they are really that simple to deal with I m going to stick to that until it whines So after view initialization we add the classes and when observation is caught we retrieve them private classChange entry IntersectionObserverEntry observer IntersectionObserver load from props cast to magical any const c lt any gt entry target data classes if entry isIntersecting in view document body classList add c inViewBody the rest ngAfterViewInit prep classes this allClasses this prepClasses load classes to element this el nativeElement data classes this allClasses observe the native element const io this getIo io observe this el nativeElement ThresholdOf all intersection options available root rootMargin and threshold only threshold is the one that might make a difference in a globally applied directive From my experience I only ever needed two values or But it would be nice to be more specific It would be an overkill to pass an array so we shall not Side note having the rootMargin set to something that usually helps in catching intersections with edge components like the footer stuck to the bottom of the body But with threshold we can overcome the issue Thus no need to use rootMargin This however is where we part ways with a single observer per page The threshold property is initialized and is read only One observer per elementIn order to pass the threshold we need to change our code so that the observer is unique to every directive As we said above the performance gain of having a single observer is not huge The simplicity of the code of multiple observers is however astounding But first since we no longer have one observer there is no point in making our directive work for all behaviors we shall have multiple one for class adaption one for lazy loading and one for the house Etc We no longer need to go through the list of intersection elements the first one is good enough entries invew directive change intersection observer instanceconst io new IntersectionObserver entries observer gt this classChange entries observer threshold todoprop io observe this el nativeElement We also no longer have to pass the classes in data classes attribute the private member is good enough Refactor inputsIt is nice to place every input in its own in property but in the wild what are the odds of passing all classes What are the odds of changing the threshold Maybe we can live with this lt div crInview A B gt lt div gt Let s make our inputs a bit neater and let s name the directive to be used with the most common incident in view inview directive refactor Input options outofview string inviewbody string outofviewbody string threshold number have defaults outofview inviewbody outofviewbody threshold private prepClasses any return inView clean this crInview this is the main string outofView clean this options outofview inViewBody clean this options inviewbody outofViewBody clean this options outofviewbody A little bit of extra typing to make sure we don t flip and the directive is ready to serve Stop observingA last bit that might come in handy is to allow the directive to stop observing when intersection occurs Here is a new option property once directive new property Input options once boolean once false stop observing after first intersectionif entry isIntersecting if this options once observer unobserve entry target else out of view We might as well disconnect the whole intersection observer since we are watching one single entry but what if we want to resume observation This is a nice feature we ll keep for one fine Tuesday With this we have enough to create a lazy loading effect using css background images lt div class footer bg crInview footer bg inview options threshold once true gt here is the footer with initial image that changes to new image when in view then stops observing lt div gt The main class would have the small image and the footer bg inview class would have the full image Background images are usually cosmetic and SSR does not need to know about them So this shall work But we can be more intentful about images Let s dig deeper and create a different directive for lazy loading images next Tuesday inshallah Did you catch the hint of iobs RESOURCES Angular CDK platform property StackBlitz project IntersectionObserver API Performance Many vs Shared In Angular Intersection Observer API on MDN |
2023-07-19 18:14:13 |
Apple |
AppleInsider - Frontpage News |
Best MacBook for students: our top picks, and one to skip |
https://appleinsider.com/articles/23/07/19/best-macbook-for-students-our-top-picks-and-one-to-skip?utm_medium=rss
|
Best MacBook for students our top picks and one to skipIt s that time again ーgetting the best MacBook for back to school can help students crush their academic goals and exams Here are our top picks and one to avoid at all costs Best MacBook for StudentsAs a student you ll need a MacBook that can handle your assignments and fit your lifestyle You need to think about how big and light you want your notebook to be how much memory and storage you need and how much money you are willing to spend Read more |
2023-07-19 18:50:17 |
Apple |
AppleInsider - Frontpage News |
Intel's NUC line of small computers will live on with another vendor |
https://appleinsider.com/articles/23/07/19/intels-nuc-line-of-small-computers-will-live-on-with-another-vendor?utm_medium=rss
|
Intel x s NUC line of small computers will live on with another vendorWhile Intel itself has given up on the NUC form factor long time compact PC vendor Asus has been licensed to handle all the intellectual property associate with the line Intel s Nuc Extreme kitSmall form factor computers were never going away even after Intel announced it was getting out of that business Before Intel got into the business other companies were making machines like the Mac mini and Intel s Next Unit of Computing NUC before there was a Mac mini Read more |
2023-07-19 18:24:30 |
海外TECH |
Engadget |
The best gifts for coffee lovers in 2023 |
https://www.engadget.com/best-gifts-for-coffee-lovers-130018731.html?src=rss
|
The best gifts for coffee lovers in When it comes to gift giving there s no success like feeding a hobby someone on your list is already knee deep in Whether they re newly indoctrinated pour over lovers or obsessive over every brewing parameter we ve compiled a list of the best gear for coffee nerds that you can get right now Spanning brewing grinding and of course drinking we ve got a range of options that can help the java geek in your life expand their at home setup or just try something new AeroPress GoThe AeroPress is a fun way to make a single cup of coffee at home with an apparatus that doesn t take up much space in the cabinet It s a versatile brewer that allows you to experiment with different infusion times and strengths as you go I like to use it to brew a double strength cup directly over ice whenever I forget to make cold brew For the coffee nerd on your list that has a regular setup already the AeroPress makes a great gift And the AeroPress Go is even more compact It tucks neatly inside a cup that you can brew directly into and is perfect for camping and travel ーBilly Steele Senior News EditorFellow OpusWhile there are more affordable coffee grinders out there few of them have the mix of aesthetics and versatility of the Fellow Opus The company s second grinder the Opus in an all purpose canonical burr model with six blades and over settings Consistency is the key selling point here as the unit can prep whole beans for espresso pour over drip coffee makers French press AeroPress and cold brew The magnetic catch cup snaps into place and its spouted lid helps minimize mess There s also a quick reference guide inside the hopper lid so you can double check your settings while weighing your beans ーB S Cuisinart DBM You don t have to splurge for an Opus in order to get a reliable grinder for the coffee nerd on your list Before I upgraded I had a Cuisinart DBM that served me well for years and it was still doing so when I put it out to pasture It s a burr grinder so it provides a consistent grind size with different options to choose from spanning coarse to fine The hopper holds eight ounces of beans while the canister can accommodate enough ground coffee for cups Since you probably won t need that much often if ever there s a selector that will automatically grind between four and cups worth at the press of a button ーB S Fellow TallyYou certainly don t need to spend a lot on a coffee scale but some companies throw in extra features that make us reconsider Fellow s Tally is a good example of this combining weight accuracy with a Brew Assist Mode to help dial in the correct ratio for perfect pour overs There s also a Timer Mode for more experienced users that only need time and weight info for their brewing process Tally can be used in Weight Mode as a small kitchen scale that reads out grams ounces pounds and milliliters up to lbs The rechargeable battery should last around three months but you can still use the Tally when it s plugged in via a USB C port ーB S Cosori Gooseneck Electric KettleA good kettle is essential if you want to up your home brewing game and it can help make a bunch of other things too like tea ramen and more Cosori s Gooseneck Electric Kettle packs most crucial features into a relatively compact kettle that s also priced right at Goosenecks can be intimidating but they give you much more control when pouring over a Chemex and we think Cosori s with its matte black finish also looks pretty nice on most countertops It has a stainless steel interior and five presets so you can easily get the perfect temperature for things like green tea black coffee and more Plus the “hold temp option lets you set and forget the water for a bit you can turn it on before you start your morning routine and come back to perfectly heated water ready for whatever s picking you up that morning ーValentina Palladino Senior Commerce EditorBruMate NAV miniWhen it comes to travel mugs for coffee and tea any item worth considering needs to check a few boxes especially if you re giving one as a gift Being able to keep liquids hot for a few hours and fit in a cup holder are essential BruMate s NAV mini does both and at ounces it s the perfect size for on the go joe Plus it s percent leak proof thanks to the company s robust lid It can also keep cold drinks chilled for over hours when that certain someone on your list needs cold brew next summer ーB S Stanley Classic Neverleak travel mugIf you know someone that needs to keep coffee hot for much longer than a typical travel mug Stanley s Classic Neverleak option is the perfect gift I ve been using one of these for well over a year and it does an incredible job at keeping liquids at temperature for a long time The company says your drink will still be warm for up to nine hours plus the entire thing is dishwasher safe for easy cleaning The three position lid also locks closed to prevent accidental spills even if the mug gets jostled around ーB S Hario Mizudashi cold brew makerI make a lot of cold brew coffee between March and October Sometimes it s once or twice a week and others it s almost every day I ve been using the Hario Mizudashi for years and I really enjoy the consistent smooth results it produces The simple affordable pitcher holds a filter where you load the coarse ground coffee of your choice You then fill it with water give the wet grounds a quick stir and secure the lid In hours you ll have delicious cold brew ready for ice and a splash of milk if that s your preference While you can simply remove the filter and serve from the pitcher it s not air tight so you won t want to use it for days long storage There s also plenty of liquid trapped in the filter when it s submerged so you ll want to let that drain in another container instead of wasting it ーB S Fellow Prismo AeroPress attachmentThe AeroPress is a versatile brewing device and that s why we keep it on your coffee gift guide list But with the help of Fellow s affordable attachment you can take the humble method up a notch The Prismo houses a pressure actuated valve designed to mimic the process of making espresso so you can “pull a shot without a machine This creates the “crema that you don t typically get just by brewing stronger coffee with the AeroPress alone The Prismo also comes with a reusable filter so you re not burning through the paper ones an AeroPress usually requires ーB S Technivorm Moccamaster KBGTTechnivorm s Moccamaster coffee brewers are true workhorses making a full carafe in four to six minutes The boiling element quickly heats water to between degrees Farenheit before moving water up a glass tube and out over the brew basket Pulsing water delivery simulates a pour over by blooming the grounds and the cone shaped basket maximizes extraction A thermal carafe maintains just brewed temperature for up to an hour although the coffee will stay warm for much longer than that ーB S Coffee subscriptionsHatchet CoffeeWhat do you get the coffee nerd who has everything Well we re always down to try new beans Most coffee roasters offer a subscription of some type with varying frequency based on consumption habits And even if they don t you can still send a bag or two as a one time gift Some of my favorites include Hatchet in Boone North Carolina Dark Matter in Chicago and Vesta in Las Vegas which has been a lifesaver during CES ーB S Shop Hatchet CoffeeShop Dark Matter CoffeeShop Vesta CoffeeThis article originally appeared on Engadget at |
2023-07-19 18:45:15 |
海外TECH |
Engadget |
Robosen’s auto-transforming Grimlock will set you back about a mortgage payment |
https://www.engadget.com/robosens-auto-transforming-grimlock-will-set-you-back-about-a-mortgage-payment-182443528.html?src=rss
|
Robosen s auto transforming Grimlock will set you back about a mortgage paymentRobosen announced a new auto converting Transformer today After launching its self transforming Optimus Prime in the company set its sights on Grimlock the Autobot allied leader of the Dinobots who changes from a robot into a mechanical T Rex However its sticker price a mere for pre orders also allows it to transform your finances for the worse The Grimlock collectible stands inches tall in robot mode and inches in dinosaur mode Robosen describes its auto transforming as “the epitome of auto conversion while calling the product “the world s first dual form bipedal walking robot The Optimus Prime version walks as a robot but drives in truck form The manufacturer says Grimlock includes microchips high precision intelligent servos while running on “advanced SOC chip technology and “a comprehensive robot operating system In addition it has six axis IMU sensors for balance monitoring This Grimlock is based on the Transformers G version which debuted in The collectible includes the original toy s Energon sword galaxial rocket launcher and crown accessories Robosen and Hasbro even brought back the original voice actor from the G animated series the now year old Gregg Berger to record “ original Generation Transformers audio lines for the expensive toy For the uninitiated the character is known for a simplistic speaking style including the well trodden phrase “Me Grimlock Robosen HasbroIn addition to hearing Grimlock s classic voice synchronized with “robotic actions you can also control it by speaking to it The product recognizes voice commands letting you tell it to transform walk and perform various “stunning stunts You can also create new poses and actions for the Dinobot using four programming modes block based manual voice and computer based And if money truly is no object you can pair it with the Optimus Prime robot to watch them reenact your favorite classic Transformers battle scenes This would be wonderful for children but its pricing mostly limits it to nostalgia stricken adults with more money than meets the eye The Grimlock auto converting robot is available for pre order now from Robosen and Hasbro It s expected to ship in late fall Although its pricing may be a tough sell at least they re throwing in a limited edition collector s coin so you can demonstrate that you spent the equivalent of a month s rent on a robotic T Rex that speaks about itself in the third person This article originally appeared on Engadget at |
2023-07-19 18:24:43 |
海外TECH |
Engadget |
Google's Nearby Share app for Windows PCs is now officially available |
https://www.engadget.com/googles-nearby-share-app-for-windows-pcs-is-now-officially-available-180032189.html?src=rss
|
Google x s Nearby Share app for Windows PCs is now officially availableGoogle says its Nearby Share app for Windows PCs is now officially available A PC version of the app which makes it a cinch to share files between devices like Android phones and Chromebooks has been in beta for a few months but it s now ready for prime time More than million people installed the beta Google says They ve used it to transfer more than million files primarily photos and videos nbsp Google has added some new features to Nearby Share for Windows as it officially rolls out the app You ll now see an estimated time for how long it will take to complete a file transfer Device notifications will include an image preview to help you make sure you re sharing the correct file Google plans to add more features and it s working with some PC manufacturers including HP to include the app on their systems To use Nearby Share for Windows you ll need to enable your PC s WiFi and Bluetooth functions Once you re set up you just need to drag a file into the app or right click it and select the Nearby Share option to send it to a nearby device nbsp If you re logged into the same Google account on PC and your Android phone or tablet or Chromebook transfers will automatically be accepted on the receiving device Either way devices that you re transferring files between have to be within feet of each other There are device visibility settings to help prevent spam and unwanted file transfers This article originally appeared on Engadget at |
2023-07-19 18:00:32 |
海外科学 |
NYT > Science |
Stanford President Resigns After Report Finds Flaws in his Research |
https://www.nytimes.com/2023/07/19/us/stanford-president-resigns-tessier-lavigne.html
|
Stanford President Resigns After Report Finds Flaws in his ResearchMarc Tessier Lavigne was cleared of accusations of scientific fraud and misconduct But the review said his work had “multiple problems and “fell below customary standards of scientific rigor |
2023-07-19 18:39:27 |
海外科学 |
NYT > Science |
Health Insures Deny Medical Care for the Poor at High Rates, Report Says |
https://www.nytimes.com/2023/07/19/health/health-insurance-medicaid-denials.html
|
Health Insures Deny Medical Care for the Poor at High Rates Report SaysInvestigators found that major companies overseeing Medicaid patients health care frequently rejected doctors requests for approval of treatments and procedures |
2023-07-19 18:58:05 |
海外科学 |
NYT > Science |
Here’s Where Global Heat Records Stand So Far in July |
https://www.nytimes.com/2023/07/19/climate/global-heat-records-july.html
|
record |
2023-07-19 18:11:20 |
ニュース |
BBC News - Home |
Nigel Farage launches fresh attack over Coutts bank closure |
https://www.bbc.co.uk/news/business-66247057?at_medium=RSS&at_campaign=KARANGA
|
accuses |
2023-07-19 18:27:25 |
ニュース |
BBC News - Home |
McDonald's abused workers told to come forward by Rishi Sunak |
https://www.bbc.co.uk/news/business-66247184?at_medium=RSS&at_campaign=KARANGA
|
sunak |
2023-07-19 18:19:51 |
ニュース |
BBC News - Home |
Jordan Henderson: Al-Ettifaq agree deal worth £12m plus add-ons for Liverpool midfielder |
https://www.bbc.co.uk/sport/football/66251589?at_medium=RSS&at_campaign=KARANGA
|
Jordan Henderson Al Ettifaq agree deal worth £m plus add ons for Liverpool midfielderLiverpool agree a deal in principle worth £m plus add ons to sell midfielder Jordan Henderson to Saudi Arabian club Al Ettifaq |
2023-07-19 18:27:38 |
ニュース |
BBC News - Home |
The Ashes highlights: England v Australia - fourth Test, day one at Old Trafford |
https://www.bbc.co.uk/sport/av/cricket/66246172?at_medium=RSS&at_campaign=KARANGA
|
The Ashes highlights England v Australia fourth Test day one at Old TraffordEngland chip away at Australia s batting on a tense and fluctuating first day of the crucial fourth Ashes Test at Old Trafford |
2023-07-19 18:03:04 |
ニュース |
BBC News - Home |
The Ashes: Phil 'Tuffers' Tufnell reacts to Jonny Bairstow's brilliant catch |
https://www.bbc.co.uk/sport/av/cricket/66251699?at_medium=RSS&at_campaign=KARANGA
|
The Ashes Phil x Tuffers x Tufnell reacts to Jonny Bairstow x s brilliant catchTMS commentator Phil Tufnell reacts to Jonny Bairstow s brilliant one handed catch to remove Australia all rounder Mitchell Marsh on day one of the fourth Ashes Test at Old Trafford |
2023-07-19 18:03:19 |
コメント
コメントを投稿