IT |
ITmedia 総合記事一覧 |
[ITmedia News] 検閲員の過労死で見えた、中国ネット検閲のリアル クラウドとAIでは足りない理由 |
https://www.itmedia.co.jp/news/articles/2204/20/news174.html
|
itmedia |
2022-04-20 18:50:00 |
IT |
ITmedia 総合記事一覧 |
[ITmedia ビジネスオンライン] 「DiDi Food」日本撤退へ 5月25日サービス終了 |
https://www.itmedia.co.jp/business/articles/2204/20/news172.html
|
didifood |
2022-04-20 18:44:00 |
IT |
ITmedia 総合記事一覧 |
[ITmedia News] 前田健太投手、ネットでの誹謗中傷に法的措置 「子供達が大きくなったときを考えて」 |
https://www.itmedia.co.jp/news/articles/2204/20/news171.html
|
itmedia |
2022-04-20 18:30:00 |
IT |
ITmedia 総合記事一覧 |
[ITmedia News] 国内データセンターの延べ床面積、全部で東京ドーム何個分? IDC調査 |
https://www.itmedia.co.jp/news/articles/2204/20/news170.html
|
平方メートル |
2022-04-20 18:21:00 |
IT |
ITmedia 総合記事一覧 |
[ITmedia ビジネスオンライン] 友達になりたい漫画のキャラクターランキング 3位「ルフィ」、2位「孫悟空」、1位は? |
https://www.itmedia.co.jp/business/articles/2204/18/news052.html
|
itmedia |
2022-04-20 18:05:00 |
IT |
情報システムリーダーのためのIT情報専門サイト IT Leaders |
大企業はオンプレミスのシステム基盤を今後も利用、テストデータの準備に時間をとられる―Delphix Software調査 | IT Leaders |
https://it.impress.co.jp/articles/-/23058
|
大企業はオンプレミスのシステム基盤を今後も利用、テストデータの準備に時間をとられるーDelphixSoftware調査ITLeaders米Delphixの日本法人であるDelphixSoftwareは年月日、「アプリケーション開発基盤とテストデータの管理・運用」に関する調査結果を公開した。 |
2022-04-20 18:38:00 |
python |
Pythonタグが付けられた新着投稿 - Qiita |
pythonでの設定ファイルの作り方 |
https://qiita.com/reiko_s/items/3d6b80369d082dfef1dd
|
機械学習 |
2022-04-20 18:21:10 |
python |
Pythonタグが付けられた新着投稿 - Qiita |
venv 環境での OpenCVのインストール上の注意点 |
https://qiita.com/waragai/items/95518c598c0962ecdab9
|
opencv |
2022-04-20 18:04:51 |
js |
JavaScriptタグが付けられた新着投稿 - Qiita |
const、let、varの使い分け|JavaScript |
https://qiita.com/isosa_yama/items/58ae72ca68ebc2629396
|
const |
2022-04-20 18:36:19 |
Ruby |
Rubyタグが付けられた新着投稿 - Qiita |
rbenvでRubyのインストールにコケた話 |
https://qiita.com/Herlingum/items/c806b103705c6f569330
|
gemfile |
2022-04-20 18:22:39 |
Linux |
Ubuntuタグが付けられた新着投稿 - Qiita |
テキストファイルに記述したpsqlメタコマンドを実行する |
https://qiita.com/pyon_kiti_jp/items/8a63976d289389203da0
|
postgr |
2022-04-20 18:52:38 |
Git |
Gitタグが付けられた新着投稿 - Qiita |
ブランチから別のブランチへコミットをコピーしたいとき |
https://qiita.com/akko_merry/items/44851e44ee847497a3e9
|
brancha |
2022-04-20 18:08:47 |
技術ブログ |
Mercari Engineering Blog |
ゼロからメルペイのリアルタイム不正検知システムを作る話 |
https://engineering.mercari.com/blog/entry/20220419-14cfb92734/
|
merpaytechopennessmonth |
2022-04-20 10:00:29 |
海外TECH |
DEV Community |
How To Install Discord On Ubuntu ( Linux ) 🚀 |
https://dev.to/rammcodes/how-to-install-discord-on-ubuntu-linux--57el
|
How To Install Discord On Ubuntu Linux In my latest Youtube Video I m covering the topic How To Install Discord On Ubuntu Linux Discord is a great platform for Developers to join and chat in various programming communities You can use discord to find specific programming communities and meet other developers get help build connections voice chat network and much more If you are looking to install Discord into your Ubuntu Linux OS then make sure to watch this Youtube Video Also make sure to Like the Youtube Video amp Subscribe to my Youtube Channel for more Amazing content related to Web Development and Self Taught Developer Journey Please do me a favour by Reacting to this post with ️ and also bookmark it for your future reference Connect Follow me on Social platforms like Twitter Linkedin where I regularly post Tips Guides Resources related to Web Development and Programming My Twitter My Linkedin My WebsitePress the Follow button to stay updated with my content Thanks for your Support ️ |
2022-04-20 09:27:06 |
海外TECH |
DEV Community |
Aerospike Time Series API |
https://dev.to/aerospike/aerospike-time-series-api-2ii2
|
Aerospike Time Series API Aerospike Time Series API IntroductionAerospike is a high performance distributed database particularly well suited for real time transactional processing It is aimed at institutions and use cases that need high throughput k tps with low latency completion in lt ms while managing large amounts of data Tb with uptime scalability and low cost Conceptually Aerospike is most readily categorised as a key value database In reality however it has a number of bespoke features that make it capable of supporting a much wider set of use cases A good example is our document API which builds on our collection data types in order to provide JsonPath support for documents Another general use case we can consider is support for time series The combination of buffered writes and efficient map operations allows us to optimise for both read and write of time series data The Aerospike Time Series API leverages these features to provide a general purpose interface for efficient reading and writing of time series data at scale Also included is a benchmarking tool allowing performance to be measured Time Series DataTime series data can be thought of as a sequence of observations associated with a given property of a single subject An observation is a quantity comprising two elements a timestamp and a value A property is a measurable attribute such as speed temperature pressure or price We can see then that examples of time series might be the speed of a given vehicle temperature readings at a fixed location pressures recorded by an industrial sensor or the price of a stock on a given exchange In each case the series consists of the evolution of these properties over time A time series API in its most basic form needs to consist of A function allowing the writing of time series observations A function allowing the retrieval of time series observationsAdditional conveniences might includeThe ability to write data in bulk batch writes The ability to query the data e g calculate the average maximum or minimum Aerospike Time Series APIThe Aerospike Time Series API provides the above via the TimeSeriesClient object The API is as follows Store a single data point for a named time seriesvoid put String timeSeriesName DataPoint dataPoint Store a batch of data points for a named time seriesvoid put String timeSeriesName DataPoint dataPoints Retrieve all data points observed between startDateTime and endDateTime for a named time seriesDataPoint getPoints String timeSeriesName Date startDateTime Date endDateTime Retrieve the observation made at time dateTime for a named time seriesDataPoint getPoint String timeSeriesName Date dateTime Execute TimeSeriesClient QueryOperation versus the observations recorded for a named time series recorded between startDateTime and endDateTime The operations may be any of COUNT AVG MAX MIN or VOL volatility double runQuery String timeSeriesName TimeSeriesClient QueryOperation operation Date fromDateTime Date toDateTime A DataPoint is a simple object representing an observation and the time at which it was made constructed as follows The Java Date timestamp allows times to be specified to millisecond accuracyDataPoint Date dateTime double value Simple ExampleThe code example below shows us inserting a series of temperature readings taken in Trafalgar Square London on the th February We give the time series a meaningful and precise name by concatenating subject property and units Let s store some temperature readings taken in Trafalgar Square London Readings are Centigrade String timeSeriesName TrafalgarSquare Temperature Centigrade The readings were taken on the th Feb Date observationDate new SimpleDateFormat yyyy MM dd parse and here they aredouble hourlyTemperatureObservations new double To store create a time series client object Requires AerospikeClient object and Aerospike namespace name new TimeSeriesClient AerospikeClient asClient String asNamespaceName TimeSeriesClient timeSeriesClient new TimeSeriesClient asClient asNamespaceName Insert our hourly temperature readingsfor int i i lt hourlyTemperatureObservations length i The datapoint consists of the base date the required number of hours DataPoint dataPoint new DataPoint Utilities incrementDateUsingSeconds observationDate i hourlyTemperatureObservations i Which we then put timeSeriesClient put timeSeriesName dataPoint As a diagnostic we can get some basic information about the time seriesTimeSeriesInfo timeSeriesInfo TimeSeriesInfo getTimeSeriesDetails timeSeriesClient timeSeriesName System out println timeSeriesInfo which will giveName TrafalgarSquare Temperature Centigrade Start Date End Date Data point count Another diagnostic allows the time series to be printed to the command linetimeSeriesClient printTimeSeries timeSeriesName givesTimestamp Value Finally we can run a basic querySystem out println String format Maximum temperature is f timeSeriesClient runQuery timeSeriesName TimeSeriesClient QueryOperation MAX timeSeriesInfo getStartDateTime timeSeriesInfo getEndDateTime Maximum temperature is Note we could alternatively have used the batch put operation which puts all the points in a single operation Create an array of DataPointsDataPoint dataPoints new DataPoint hourlyTemperatureObservations length Add our observations to the arrayfor int i i lt hourlyTemperatureObservations length i The datapoint consists of the base date the required number of hours dataPoints i new DataPoint Utilities incrementDateUsingSeconds observationDate i hourlyTemperatureObservations i Put the points in a single calltimeSeriesClient put timeSeriesName dataPoints ImplementationThere are two key implementation concepts to grasp Firstly rather than store each data point as a separate object they are inserted into Aerospike maps This minimises network traffic at write time we only send the new point and allows large numbers of points to be potentially read at read time as they are encapsulated in a single object It also helps minimise memory usage as Aerospike has a fixed byte cost for each object Schematically each time series object looks something like timestamp value timestamp value The maps must not grow to an indefinite extent so the API ensures that each map will not grow beyond a specified maximum size By default this limit is points although this can be altered see additional control There is also a discussion in the README of the sizing and performance considerations associated with this setting The second implementation point follows on from the first As there is a limit to the number of points that can be stored in a block we need to have some mechanism for creating new blocks and keeping track of existing blocks for each time series This is done on a per time series basis by maintaining an index of all blocks created Conceptually this looks something like the following TimeSeriesName MyTimeSeries ListOfDataBlocks StartTimeForBlock EndTime lt lastTimeStampForBlock gt EntryCount lt entriesInBlock gt StartTimeForBlock EndTime lt lastTimeStampForBlock gt EntryCount lt entriesInBlock gt BenchmarkingThe Time Series API ships with a benchmarking tool Three modes of operation are provided real time insert batch insert and query For details of how to download and run see the benchmarking section of the README Real Time BenchmarkingAs a simple example let s insert seconds of data for a single time series with observations being made once per second timeSeriesBenchmarker sh h lt AEROSPIKE HOST IP gt n lt AEROSPIKE NAMESPACE gt m realTimeWrite p c d Sample outputAerospike Time Series Benchmarker running in real time insert modeUpdates per second Updates per second per time series Run time sec Update count Current updates sec Cumulative updates sec Run time sec Update count Current updates sec Cumulative updates sec Run time sec Update count Current updates sec Cumulative updates sec Run time sec Update count Current updates sec Cumulative updates sec Run time sec Update count Current updates sec Cumulative updates sec Run SummaryRun time sec Update count Cumulative updates sec We can make use of another utility to see the output timeSeriesReader sh This can be run for a named time series or alternatively will select a time series at random Here is sample output for our simple example timeSeriesReader sh h lt AEROSPIKE HOST IP gt n lt AEROSPIKE NAMESPACE gt Running TimeSeriesReaderNo time series specified selecting series AFNJFKSKDVName AFNJFKSKDV Start Date End Date Data point count Timestamp Value We can see that we have had sample points generated over a ten second period with the series given a random name The benchmarker can be run at greater scale using the c time series count flag You may also wish to make use of z multi thread flag in order to achieve required throughput The benchmarker will warn you if required throughput is not being achieved Another real time option is acceleration via the a flag This runs the simulation at an accelerated rate So for instance if you wished to insert points every seconds over a hour period points you could shorten the time of the run by running using a This will speed up the simulation by a factor of so it will only take s A higher number would also be possible The benchmarker will indicate the actual update rates For example timeSeriesBenchmarker sh h lt AEROSPIKE HOST gt n lt AEROSPIKE NAMESPACE gt m realTimeWrite c p a d Aerospike Time Series Benchmarker running in real time insert modeUpdates per second Updates per second per time series Batch InsertionA disadvantage of the real time benchmarker is precisely that the loading occurs in real time You may wish to build your sample time series as quickly as possible The batch insert mode is provided for this purpose In this mode data points are loaded a block at a time effectively as fast as the benchmarker will run The invocation below for example will create sample series c flag over a period of year r flag with seconds between each observation timeSeriesBenchmarker sh h lt AEROSPIKE HOST IP gt n lt AEROSPIKE NAMESPACE gt m batchInsert c p r Y timeSeriesBenchmarker sh h HOST n test m batchInsert c p r Y z Aerospike Time Series Benchmarker running in batch insert modeInserting records per series for series over a period of secondsRun time sec Data point insert count Effective updates sec Pct complete Run time sec Data point insert count Effective updates sec Pct complete Run time sec Data point insert count Effective updates sec Pct complete Run time sec Data point insert count Effective updates sec Pct complete Run time sec Data point insert count Effective updates sec Pct complete Run time sec Data point insert count Effective updates sec Pct complete Run time sec Data point insert count Effective updates sec Pct complete Run SummaryRun time sec Data point insert count Effective updates sec Pct complete Query BenchmarkingHaving two different methods for generating data now puts us in the position where we can consider query benchmarking This is the third and final aspect of the benchmarking toolkit Query benchmarking can be invoked via the query mode We choose how long to run the benchmarker for d flag and the number of threads to use z flag At runtime the benchmarker scans the database to determine all time series available Each iteration of the benchmarker selects a series at random and calculates the average value of the series The necessitates pulling all data points for the series to the client side and doing the necessary calculation so it is a good test of the query capability We can ensure the queries are consistent in terms of data point value by using the batch insert aspect of the benchmarker which ensures all series have the same number of data points Sample invocation and output timeSeriesBenchmarker sh h HOST n test m query z d Aerospike Time Series Benchmarker running in query modeTime series count Average data point count per query Run time sec Query count Current queries sec Current latency s Avg latency s Cumulative queries sec Run time sec Query count Current queries sec Current latency s Avg latency s Cumulative queries sec Run time sec Query count Current queries sec Current latency s Avg latency s Cumulative queries sec Run time sec Query count Current queries sec Current latency s Avg latency s Cumulative queries sec Run time sec Query count Current queries sec Current latency s Avg latency s Cumulative queries sec Run time sec Query count Current queries sec Current latency s Avg latency s Cumulative queries sec Run SummaryRun time sec Query count Cumulative queries sec Avg latency s SimulationThe Aerospike Time Series API contains a realistic simulator which is made use of by the Benchmarker Many time series over a short period at least follow a Brownian Motion The TimeSeriesSimulator allows this to be simulated The idea is that if we look at the relative change in our observed value then the expected mean change should be proportional to the time between observations and the expected variance should similarly be proportional to the period in question Formally let X τ be the observation of the subject property X at time τ After a time t let the value of X be X τ t The simulation distributes the value of X τ t X τ X τ i e the relative change in X like a normal distribution with mean μt and variance σt X t τ X t X t N μt σt More detail is available at simulation but it is useful to see that the net effect of the above is to produce sample series such as the one shown belowWe can see it looks very much like the sort of graph we might see for a stock price More complex time series e g those seen for temperatures might be simulated by concatenating several series together with different drifts and volatilities allowing values to trend both up and down Mean reverting series can be simulated by setting the drift to zero Real Life PerformanceAs a test performance was examined on an Aerospike cluster deployed on ien xlarge AWS instances This instance type was selected as the ACT rating of the drives is k making the arithmetic simple WritesIn simple terms this cluster can then support k see Performance Considerations kbyte number of instances mb of throughput We know our average write is kb We assume replication factor two for resilience purposes Sustainable updates per second is then mb replication factor kb In practice a k update rate was easily sustained using the real time benchmarker The reason the value is higher is that larger writes do not necessarily have a larger penalty than small writes Also the ACT rating guarantees operations are sub ms in latency of the time a guarantee not necessarily needed for time series inserts The cost of such a cluster would be k per year using on demand pricing hour instance or k per year hour instance if using a reserved pricing plan ReadsQueries retrieving million points per query year of observations every seconds were able to run at the rate of two per second with end to end latency of seconds for a sustained period using the benchmarking tool Future DirectionsAt the time of writing this is an initial release of this API Further developments should be expected Possible further iterations may includeData compression following the Gorilla approach which potentially allows data footprint to be reduced by Labelling of data to support the easy retrieval of multiple properties for subjects For example several sensors may be attached to an industrial machine it may be convenient to retrieve all this series simultaneously for analysis purposes A REPL read eval print loop capability to support interrogative analysis DownloadThe Time Series Client is available at Maven Central aero time series client You can download directly or by adding the below to your pom xml file lt dependency gt lt groupId gt io github aerospike examples lt groupId gt lt artifactId gt aero time series client lt artifactId gt lt version gt LATEST lt version gt lt dependency gt |
2022-04-20 09:22:06 |
海外TECH |
DEV Community |
How to Build a Hospital Record App with NextJs and Strapi |
https://dev.to/strapi/how-to-build-a-hospital-record-app-with-nextjs-and-strapi-fo5
|
How to Build a Hospital Record App with NextJs and Strapi IntroductionHospital records help to provide information on the background health conditions of prospective patients There is a need to have an easily retrievable and accessible means of getting this record We will solve this case study using the Strapi Content Management System to access and store patient records in an application GoalIn this article we will build a Record application focusing on Patient Records The app will focus on managing patient records in relations using the Strapi CMS and will provide all records to any patient when a request is made These records will be fetched from an API and managed in Strapi PrerequisitesTo follow up on this tutorial prior knowledge of NextJs and APIs is required What is Strapi Strapi is an open source headless Content Management System that was developed using the Nodejs Javascript framework Strapi provides users with features to enable them to store manipulate and manage content across their application workflows It s simple and easy to use and with its administrative panel users can easily monitor and manage their content What s more With Strapi we can integrate APIs that can provide and manage content stored on the Strapi CMS Setting up a Strapi ProjectTo set up our Strapi back end we will first create a directory for our project using the following code in CLI mkdir recordappThis creates a folder for our project recordapp Next we move into this folder cd recordappThen we install Strapi npx create strapi app latest record backend quickstartThe command above sets up Strapi for our app with all required dependencies and creates a new folder record backend for this Once the installation is complete it will start up the server which you can view in your browser via the specified link In your browser you will have a result similar to the image below Here simply fill in the required details and create a user account to access your dashboard Here we will set up the collection for our application Before we create our Strapi collection for our data we have to understand how our hospital record app should operate The application is to be able to facilitate identifying specific patient records on query We will use MeiliSearch to make looking up of content in each record easier With this we can easily search for and get results from our Strapi collection showing content that have data related to the search keyword To set up our content we will start by defining the content we wish to store on Strapi To do this first click on the Create your first Content Type button On the new page that opens up click on Create new collection type On the next page we get different content types we can create for our collection We will create fields for the patients These fields will include name surname age blood type ailment medicine last visit allergies next of kin next of kin contact gender and address All of these fields will be text fields except the age and last visit which would be of type number and date respectively Above are all the fields for the patient record After creation click on the save button at the top right Building the Records AppWith our content setup on Strapi CMS complete the next thing we need to do is to build the front end of our application To do this we will be using the NextJs framework which is an open source Javascript framework developed on NodeJs to render applications on server side as opposed to client side rendering by ReactJs To install NextJs enter the following command in your terminal npx create next app hospitalrecordsWe will be using Tailwind CSS to scaffold our application This can be installed in CLI with the following command npm install D tailwindcss postcss autoprefixer npx tailwindcss init pThis creates a project folder hospitalrecords in your current directory The created folder has the NextJs framework installed and we will use it to scaffold our application The images below show what our finished app will look like Landing Section Search Section Patient Info section Here is the tree structure of our application ┣pages ┃┣api ┃┃┗hello js ┃┣Components ┃┃┣Cards js ┃┃┣Data js ┃┃┣Footer js ┃┃┣Landing js ┃┃┣Record js ┃┃┗Topnav js ┃┣index js ┃┗ app js ┣public ┃┣favicon ico ┃┣hosrecords png ┃┗vercel svg ┣styles ┃┣globals css ┃┗Home module css ┣ eslintrc json ┣ gitignore ┣next config js ┣package lock json ┣package json ┣postcss config js ┣README md ┗tailwind config jsHere the index js file contains all the components for the web page In this file we have import styles from styles Home module css import Topnav from Components Topnav import Landing from Components Landing import Record from Components Record import Cards from Components Cards import Footer from Components Footer export default function Home return lt div className font Roboto gt lt Topnav gt lt Landing gt lt Record gt lt Cards gt lt Footer gt lt div gt Taking the components in order the Topnav component contains the website s navigation bar and has the following code import React useState from react import FontAwesomeIcon from fortawesome react fontawesome import faBars from fortawesome free solid svg icons import faTimes from fortawesome free solid svg icons function Topnav const show setShow useState false return lt header gt lt div className w screen fixed flex items center justify center px top z gt lt nav className container flex items start py mt sm mt backdrop blur md relative gt lt nav className z fixed container flex items start py mt sm mt backdrop blur top lg left lg w full md left sm left gt lt div className relative gt lt h className text blue font bold text xl gt Hospital Records lt h gt lt div gt lt ul className hidden sm flex flex justify end items center gap text slate uppercase text base font medium md py gt lt li className cursor pointer gt lt a href Home gt Home lt a gt lt li gt lt li className cursor pointer gt lt a href Search gt Search lt a gt lt li gt lt li className cursor pointer gt lt a href target blank rel noreferrer gt About Strapi lt a gt lt li gt lt ul gt show lt ul className navigation sm flex flex md hidden justify end items center gap text slate uppercase text xs md py gt lt li className cursor pointer gt lt a href Home onClick gt setShow show gt Home lt a gt lt li gt lt li className cursor pointer gt lt a href Search onClick gt setShow show gt Search lt a gt lt li gt lt li className cursor pointer gt lt a href target blank rel noreferrer onClick gt setShow show gt About Strapi lt a gt lt li gt lt ul gt null lt div className flex sm hidden flex justify end z onClick gt setShow show gt lt FontAwesomeIcon className text xl icon show faTimes faBars gt lt div gt lt nav gt lt div gt lt header gt export default Topnav Next Landing js is the website s landing section import React from react import Image from next image function Landing return lt div gt lt section className relative id Home gt hero section lt div className container flex flex col reverse lg flex row items center gap mt lg mt gt content lt div className flex flex flex col items center lg items start gt lt h className text xl text blue md text xl lg text xl text center lg text left mb gt Hospital Patient Records available on Search lt h gt lt p className text lg text center lg text left mb text gray gt A simple app mimicking digitalized hospital records Built on NextJs and powered by Strapi lt p gt lt div className flex justify center flex wrap gap gt lt button className btn border hover bg white hover text blue hover border blue hover border gt lt a href Search gt Try it out lt a gt lt button gt lt div gt lt div gt image lt div className flex justify center flex mb md mb lg mb z gt lt Image src hosrecords png height width className w h sm h md w full md h full alt stethoscope and record gt lt div gt lt div gt container attachment shape lt div className hidden md flex items center justify center overflow hidden absolute h w top right lg bottom lg right lg w gt lt svg viewBox xmlns width px id blobSvg gt lt defs gt lt linearGradient id gradient x y x y gt lt stop offset stop color rgb gt lt stop gt lt stop offset stop color rgb gt lt stop gt lt linearGradient gt lt defs gt lt path fill url gradient gt lt animate attributeName d dur ms repeatCount indefinite values M Q Q Q Q Q Q Q Q Q Q Q Q Z M Q Q Q Q Q Q Q Q Q Q Q Q Z M Q Q Q Q Q Q Q Q Q Q Q Q Z MQ Q Q Q Q Q Q Q Q Q Q Q Z M Q Q Q Q Q Q Q Q Q Q Q Q Z M Q Q Q Q Q Q Q Q Q Q Q Q Z fill url gradient gt lt animate gt lt path gt lt svg gt lt div gt lt section gt lt div gt export default Landing The Records component contains the search bar for patient records import React from react function Record props return lt div gt lt section className bg gray py mt lg mt id Search gt lt div className sm w lg w mx auto gt lt h className text xl text blue text center font bold gt Search for Records lt h gt lt p className text gray text center mt gt Enter a random name in the search box below and see what records pop up lt p gt lt div className flex flex col sm flex row gap mt gt lt input type text placeholder Enter patient name className focus outline none flex px py rounded md text black border border blue gt lt input gt lt button className btn flex border hover bg white hover text blue hover border blue hover border gt Search lt button gt grid collection lt div gt lt div gt lt section gt lt div gt export default Record Card js is where the fetched data from Strapi will be displayed to the user import React useState from react import Data from data function Cards const data moreData useState false const pull data dat gt moreData dat console log dat return lt div className relative gt lt div className container grid grid cols md grid cols lg grid cols gap max w screen lg mt py gt lt div className flex flex col rounded md shadow xl gt lt div className p flex flex col items center gt lt h className text xl font black text blue uppercase gt M lt h gt lt h className mt mb text xl gt Samuel Harrison lt h gt lt hr className w border b border blue gt lt hr gt lt div className flex p gt lt button className btn hover bg white hover text blue border hover border blue hover border gt More Info lt button gt lt div gt lt div gt lt div gt lt div className flex flex col rounded md shadow xl gt lt div className p flex flex col items center gt lt h className text xl font black text blue uppercase gt F lt h gt lt h className mt mb text xl gt Anita Florence lt h gt lt hr className w border b border blue gt lt hr gt lt div className flex p gt lt button className btn hover bg white hover text blue border hover border blue hover border gt More Info lt button gt lt div gt lt div gt lt div gt lt div className flex flex col rounded md shadow xl gt lt div className p flex flex col items center gt lt h className text xl font black text blue uppercase gt M lt h gt lt h className mt mb text xl gt James Micheal lt h gt lt hr className w border b border blue gt lt hr gt lt div className flex p gt lt button className btn hover bg white hover text blue border hover border blue hover border onClick gt moreData true gt More Info lt button gt lt div gt lt div gt lt div gt lt div gt More info on Patient Data lt Data open data func pull data gt lt div gt export default Cards It contains a child component Data that completely displays a selected patient s data Data js contains the following lines of code import React useState from react function Data props const newData setNewData useState null props func newData const handleclick gt props func false console log props open return lt div gt props open lt div className absolute h full flex justify center items center w full top backdrop blur md flex col gt lt button className btn hover bg white hover text blue border hover border blue hover border mb onClick gt handleclick gt Close lt button gt lt div className relative py px bg white font Roboto font medium shadow xl gt lt h className text center text xl font extrabold mb gt M lt h gt lt h className mb gt Name John Doe lt h gt lt p className mb gt Age lt p gt lt p className mb gt Blood Type O lt p gt lt p className mb gt Ailment Cancer lt p gt lt p className mb gt Medicine Aspirin lt p gt lt p className mb gt Last visit lt p gt lt p className mb gt Allergies None lt p gt lt p className mb gt Next of Kin Isaac Doe lt p gt lt p className mb gt Next of Kin Contact lt p gt lt p className mb gt Main Street Dublin Ireland lt p gt lt div gt lt div gt null lt div gt export default Data Currently the Card and Data components contain hard coded values but these will be replaced as we proceed with building the application And finally there s the Footer js Component with the following code import React from react function Footer return lt footer className bg blue py flex items center justify center mt gt lt div gt lt h className text white font medium text xl gt Made with StrapiCMS and NextJs lt h gt lt div gt lt footer gt export default Footer Next in the tree above are the style sheets The global module css file has been slightly modified to make use of Tailwind styles tailwind base tailwind components tailwind utilities import url ital wght amp display swap btn apply shadow md py px rounded md transition duration text white bg blue outline none navigation text transform uppercase opacity media screen and max width px navigation apply absolute h screen bg white z w screen left flex items center justify center flex col gap uppercase font bold text xl top transition opacity ease in opacity html body padding margin font family apple system BlinkMacSystemFont Segoe UI Roboto Oxygen Ubuntu Cantarell Fira Sans Droid Sans Helvetica Neue sans serif scroll behavior smooth a color inherit text decoration none box sizing border box There is also a custom font defined here which was used in the application Also I ve made changes to the properties of the container Tailwind class and added the font imported above in the tailwind config js file module exports content pages js ts jsx tsx components js ts jsx tsx theme extend fontFamily Roboto Roboto sans serif container center true padding rem screens lg px xl px xl px plugins You can run the application with the npm run dev command in CLI to get a result similar to the images above Building the Patients APIFor the purpose of this tutorial we will be building a simple API to handle our patient s data For this we will be making use of Node js express js and a JSON file First we will create a new folder called api handler This file will be where we will build and set up our API Next we will create a JSON file containing our data The file will be called patients json and will contain the following name John surname Doe age bloodtype O ailment Cancer medicine Aspirin last visit allergies None next of kin Isaac Doe next of kin contact gender male address Main Street Dublin Ireland name Newton surname Dannet age bloodtype AB ailment none medicine Aspirin last visit allergies None next of kin Clover Dannet next of kin contact gender male address Main Street Dublin Ireland name Grace surname Dommy age bloodtype A ailment Diabetes medicine Aspirin last visit allergies None next of kin Anny Dommy next of kin contact gender female address Main Street Dublin Ireland name Henry surname Derry age bloodtype AB ailment none medicine none last visit allergies None next of kin Ben Derry next of kin contact gender male address Main Street Dublin Ireland name Fred surname Eddy age bloodtype B ailment none medicine Aspirin last visit allergies None next of kin Eddy Edd next of kin contact gender male address Main Street Dublin Ireland name Stella surname Morico age bloodtype O ailment none medicine none last visit allergies Peanuts next of kin Ella Morico next of kin contact gender female address Main Street Dublin Ireland Above is the structure of our sample patient data Here we have six patients in total with their corresponding records For our API we will require the Express js framework This can installed via CLI with the following bash code npm install express saveThe above command installs Express js and adds it to the dependencies With this installed we can now set up the server Create a new file called server js in the working directory and add the following code to it var express require express var app express var fs require fs app use function req res next res header Access Control Allow Origin res header Access Control Allow Methods GET POST OPTIONS PUT PATCH DELETE res header Access Control Allow Headers x access token Origin X Requested With Content Type Accept next app get fetchpatients function req res fs readFile dirname patients json utf function err data console log data res end data var server app listen function var host server address address var port server address port console log Listening at http s s host port The above code sets up our server It makes use of the file system module to access the JSON file we earlier created for the patient data The server is set to listen on port We can run this with the following command node server jsYou will get a message saying Listening at http You can navigate to the port in your browser via http localhost fetchpatients to view the JSON response With this our API is complete and we can now link it to Strapi to manage the relationship between the data Integrating the App with StrapiWith the API setup complete we will proceed by first adding data from the API to our Strapi collection Then we will integrate milisearch into the application to fetch data and add search functionality First we will install and make use of Axios to perform our fetch and post requests we can install this with the following command in CLI npm install axiosAfter installation we can use this to fetch our JSON response from our API Back in the index js file add the following code import axios from axios import useEffect from react export default function Home const url http localhost fetchpatients useEffect gt const fetchData async gt const result await axios get url console log result fetchData The code above uses axios to fetch the data from our API running on port It then runs an asynchronous function that awaits the fetch request and logs it in the browser console Adding Data to StrapiTo allow access to the Strapi collection we have to make changes to the user roles To do this navigate in the dashboard to the settings pane on the left navigation menu Select Roles under Users and Permissions Click on Public select the patient name collection and check all checkboxes Finally click on the Save button at the top right to save these changes Back within our index js file we will make modifications to send our API data to our Strapi Collection import useEffect useState from react export default function Home const url http localhost api patient names var response const sent dataSent useState false useEffect gt const fetchData async gt const result await axios get url response result data console log response sendData fetchData const sendData async gt if sent false try response forEach response gt console log response name axios post url data name response name surname response surname age response age blood type response bloodtype ailment response ailment medicine response medicine last visit response last visit allergies response allergies next of kin response next of kin next of kin contact response next of kin contact gender response gender address response address catch error console log error dataSent true else console log data already uploadedd The code above stores our API response in a variable called response A function sendData is then called This function maps through the response from the API and for each response it sends the corresponding data to Strapi At the end if we view our Strapi Content manager we will see six entries in our Patient name collection We can view the content of each entry by clicking on them We get a window displaying each of the fields and their values Integrating MeilisearchTo use Meilisearch locally we will download and run an instance of it This can be downloaded from Meilisearch Local Opening the downloaded application shows a terminal with the Meilisearch instance hosted on local host If we navigate in the browser to the specified URL we can see the Meilisearch interface To make use of Meilisearch from within our application we would need to install it via CLI with the following command npm install meilisearchBack in the records js file we will add an import for the meilisearch module import MeiliSearch from meilisearch Then we create a client and set the host to the Meilisearch instance URL const initialValue setInitialValue useState const query setQuery useState const client new MeiliSearch host apiKey masterKey const index client index patient const search async gt const documents await axios get http localhost api patient names var result documents data data let response await index addDocuments result console log response const handlesearch async gt const search await index search initialValue console log search console log search hits search The code above instantiates a client for our data An index is created using this client and data is fetched from the Strapi collection and stored in it The results are added to the index and displayed in the console The index search method is used to find strings in the data and it s what we will implement in our search functionality In this case it is searching for the string “Stella Note that if the index search method takes an empty string then all data will be displayed as results Next we will need to pass the results of our search query to the Cards components to display only the patients that match the search query In the handlesearch function we add props func search hits Then we will get this props in the parent component Index js with the following code const getQuery setQuery useState const pull data dat gt setQuery dat While also passing the function as a props to the Records component lt Record func pull data gt With this we get the results of the search query from the Records component We can then pass these results to the Cards component and display them lt Cards results getQuery gt Next we iterate over the number of results and display the corresponding data To do this add the following to the Cards js file function Cards results return lt div className relative gt lt div className container grid grid cols md grid cols lg grid cols gap max w screen lg mt py gt results map item index gt lt div className flex flex col rounded md shadow xl key index gt lt div className p flex flex col items center gt lt h className text xl font black text blue uppercase gt item attributes gender male M F lt h gt lt h className mt mb text xl gt item attributes name lt h gt lt hr className w border b border blue gt lt hr gt lt div className flex p gt lt button className btn hover bg white hover text blue border hover border blue hover border onClick gt moreData true gt More Info lt button gt lt div gt lt div gt lt div gt The above code displays the cards with the corresponding data and the number of displayed cards changes based on the search input If we were to search for a particular name you only get that card displayed With Meilisearch we can search for any data pertaining to a patient This could be age next of kin or even a health condition Finally we need to display the entire patient data when the user clicks on the more info button We will need to pass the data from the clicked card to the Data js component We will first create a variable for this const fullData getFullData useState Then use the More info button to change the value of this state by modifying its onClick event listener as follows onClick gt moreData true getFullData item We can now pass the fullData as props to the Data component lt Data open data func pull data info fullData gt To display this data in the Data js file we will make the following modifications lt div className relative py px bg white font Roboto font medium shadow xl gt lt h className text center text xl font extrabold mb gt M lt h gt lt h className mb gt Name props info attributes name lt h gt lt p className mb gt Age props info attributes age lt p gt lt p className mb gt Blood Type props info attributes blood type lt p gt lt p className mb gt Ailment props info attributes ailment lt p gt lt p className mb gt Medicine props info attributes medicine lt p gt lt p className mb gt Last visit props info attributes last visit lt p gt lt p className mb gt Allergies props info attributes allergies lt p gt lt p className mb gt Next of Kin props info attributes next of kin lt p gt lt p className mb gt Next of Kin Contact props info attributes next of kin contact lt p gt lt p className mb gt Address props info attributes address lt p gt lt div gt With this we have the correct data displayed when we click on the More info button ConclusionIn this tutorial we learned about the Strapi CMS and how we can use it to build a hospital records application We also learned how to make use of a search functionality to manage our data ResourcesThe repository containing all the code used in this tutorial can be found here |
2022-04-20 09:20:12 |
海外TECH |
DEV Community |
Improve React App Performance - Intro-[ Part 1 ] |
https://dev.to/rupeshpadhye/improve-react-app-performance-intro-part-1--528k
|
Improve React App Performance Intro Part In this series of blog post I will be sharing the experience of how we improved the frontend react single page application performance Transitioning to React ️ We were revamping our SaaS product s frontend from AngularJS to React The focus was adding new features and delivering fast Over time we have added s of new React components State management was done using Redux Redux Saga Make it Faster Next goal is Web app should load fast in order to keep the user s attention keep them engaged and deliver a positive experience the experience should be consistent in mobile or over slow internet Huge bundle size ️ ️ After Looking at from chrome coverage tool and GTMatrix report we confirmed that we are serving huge JS bundle Though it s not being run this JavaScript code will still be parsed and evaluated which takes time Around of code is unused while loading the page it taking noticeable time for initial page rendering Fruits of Efforts bunch of developers started working on it and we saw early bearing fruits for the efforts How We Solved It The solution for that problem is to split up the application into multiple JS chunks and load them on demand aka Code Splitting One can think of code splitting as incrementally downloading the app I will be sharing the detailed information about how we achieved it in following subsequent posts Code Splitting at Multiple Levels third party libraries redux and redux saga react components Part WebPack Optimisation Part Bundle Analysis amp Keep Bundle In Check Part so don t forget to follow amp share in your network if you are interested in frontend optimisations |
2022-04-20 09:19:59 |
海外TECH |
DEV Community |
Animations in Jetpack Compose with examples |
https://dev.to/canopassoftware/animations-in-jetpack-compose-with-examples-1hk9
|
Animations in Jetpack Compose with examplesToday I will share how to implement animations using Jetpack Compose This post consists of animations Stepper animation ーCard that will flip right or left depending on where you tap Heart animation ーHeart jumping animation with shadow Progress animation ーStandard progress animations with dots Wave animation ーRecording button with infinite waves Learn how to implement animation using jetpack compose on our blog For source code check out GitHub page of Canopas |
2022-04-20 09:02:59 |
海外TECH |
DEV Community |
Automation Testing with Selenium JavaScript [Tutorial] |
https://dev.to/haritalt/automation-testing-with-selenium-javascript-tutorial-pkj
|
Automation Testing with Selenium JavaScript Tutorial Automation testing is an integral part of software development When it comes to web applications it is essential to test the user interface to ensure that a flawless experience is delivered to the end users This is where Selenium automation testing is instrumental to verify the product across different combinations of browsers amp operating systems Selenium supports a wide range of programming languages which also includes JavaScript In this Selenium Javascript tutorial we take a deep dive into how Selenium Webdriver with Javascript can be used for automated testing of web products By the end of this Selenium Javascript Tutorial you would be in a comfortable position to perform Selenium automation testing using JavaScript Why Selenium Automation Testing Using JavaScript Before we get to the crux of the Selenium Javascript tutorial it is essential to understand why the combination of Selenium Webdriver and Javascript is suited for automation testing Let s answer this important question A number of tools and frameworks are available in the market to perform automation testing Out of these Selenium continues to be hands down the first choice of QA engineers over the past decade or so Few of the key features of Selenium web automation are listed below Open Source and portableSupports multiple browsers like Google Chrome Firefox Safari Opera Internet Explorer etc Supports multiple languages like Java JavaScript Ruby Python etc Works on different OS like Windows Linux etc Easy to integrate with CI CD tools like Jenkins Circle CI GitLab CI and moreEasy to integrate with popular testing frameworksOver amp above parallel testing in Selenium expedites the entire automation testing process by providing a platform through which the same tests can be run across different environments You can check out our Selenium learning hub to gather more insights into Selenium web automation Now let s look at why Selenium Webdriver with Javascript Well JavaScript is one of the widely used programming languages as per the Stack Overflow annual survey Since JavaScript is extensively used for web development utilizing it with Selenium web automation makes perfect sense Since most of the developers are familiar with JavaScript it becomes easy for them to write automation tests in JavaScript and get quick feedback With that said let s proceed to the next section in this Selenium Javascript tutorial where we focus on the setup and installation process Ripe MD Hash Calculator ーFree online tool for encrypting your personal data Getting started with Selenium automation testing using JavaScriptAs mentioned earlier the Selenium framework supports multiple languages and frameworks for realizing cross browser compatibility tests Here is how you can get started with JavaScript with Selenium WebDriver Prerequisites for Selenium Webdriver with JavascriptBefore you start using JavaScript for Selenium automation testing you need to ensure that your system is installed with the following pre requisites NodeJS and NPMVerify if NodeJS and NPM are already installed in your system by running the commands node v and npm v on the terminal If Node JS or Node js is not present on your machine you can install the latest LTS version from NPM will be installed along with Node js So no need for separate installation IDE of your choiceFor implementation we will be using Visual Studio Code as IDE However you can choose an IDE of your choice Project Setup for Selenium Webdriver with JavascriptWith the required dependencies installed let s move on to the project setup in this section of the Selenium Javascript Tutorial Here are the step by step instructions for creating a project to use JavaScript with Selenium WebDriver Step Create a project folder in the desired location in your system Open the folder in your IDE Step Initialize the project in this folder Open the IDE terminal and navigate to the project location Run the following commandnpm init yHere y stands for “yes This option is used to skip the questions asked related to project details You will notice that a package json file is automatically created The file contains details about the project configuration Step Now install the project dependencies We need to install Selenium WebDriver and browser drivers Run the following command on the terminal to install browser drivers for Chrome and Firefox npm install save selenium webdriver chromedriver geckodriverOnce you run the command you ll notice that a “node modules folder is created in the project root The folder contains all the dependencies Also package json will be updated with these dependencies name Selenium JavaScript version description main index js scripts test echo Error no test specified amp amp exit keywords author license ISC dependencies chromedriver geckodriver selenium webdriver beta With this the setup for Selenium Webdriver JavaScript is complete It s time to dirty our hands with code in the next section of the Selenium JavaScript Tutorial Paste any number of words sentences and paragraphs and find out the final Sentence count with a click Demonstration Selenium Automation with JavaScriptIn this section of the Selenium JavaScript tutorial we run a Selenium automation test with JavaScript Here is the test scenario Launch the browserGo to www google comSearches a string valueVerifies the result page titleClose the browserImplementation Step Create a folder named “tests in the project root Inside this folder we create our first test file named “test js Shown below is the folder structure Step Inside test js pull all the required functions from node modules const By Key Builder require selenium webdriver require chromedriver Step Create a function example which will be containing your test script Feel free to provide any function name of your choice async function example Step Inside the function let us write our test script using Selenium and JavaScript async function example var searchString Automation testing with Selenium and JavaScript To wait for browser to build and launch properly let driver await new Builder forBrowser chrome build To fetch from the browser with our code await driver get To send a search query by passing the value in searchString await driver findElement By name q sendKeys searchString Key RETURN Verify the page title and print it var title await driver getTitle console log Title is title It is always a safe practice to quit the browser after execution await driver quit Step Now simply add the function call Here is how the overall implementation looks like const By Key Builder require selenium webdriver require chromedriver async function example var searchString Automation testing with Selenium To wait for browser to build and launch properly let driver await new Builder forBrowser chrome build To fetch from the browser with our code await driver get To send a search query by passing the value in searchString await driver findElement By name q sendKeys searchString Key RETURN Verify the page title and print it var title await driver getTitle console log Title is title It is always a safe practice to quit the browser after execution await driver quit example Step Time for some action…let s run the code by giving the following command on the terminal node test jsAn instance of Chrome browser is instantiated and the necessary Selenium WebDriver actions are performed on the WebElements The logs can be verified in the terminal Congratulations You have successfully written and executed your first test case using Selenium Webdriver and JavaScript Best Practices for Selenium with JavaScriptIn the previous section of the Selenium WebDriver tutorial we demonstrated the creation of automation script with Selenium and JavaScript However the situation will differ when you have to write Selenium automation scripts for large projects It is essential to follow the best practices in Selenium automation when designing test automation scripts As QA engineers we should come up with strategies that enable us to effectively and efficiently write test scripts manage them and speed up the overall execution Here are some of the the best practices used for Selenium WebDriver with JavaScript Using Page Object Model POM Page Object Model POM is a design pattern popularly used in Selenium web automation Here we will be creating an object repository for storing all web elements A Page Class is created for each web page Every Page class contains details of the particular page Web elements and Page Methods that perform tasks on those web elements Here are the major advantage of Page Object Model for Selenium web automation Reduced maintenanceMinimal Code DuplicationIncreased Readability and Reliability of scripts Leveraging JavaScript Automation FrameworksAnother strategy that is gaining tremendous popularity is leveraging an automation testing framework A framework offers multiple benefits when it comes to script maintenance third party tool integration reporting etc A variety of JavaScript based testing frameworks are available for automation testers Some of the popular JavaScript based test frameworks are Nightwatch js Protractor WedriverIO Cypress io etc Parallel TestingParallel testing in Selenium lets you run multiple tests simultaneously in different environments This directly translates to increased execution speed reduced overall execution time and early detection of bugs Selenium Grid supports parallel testing Implementing CI CD PipelineCI CD as a practice is gaining huge attention on the backdrop of software development backed by Agile and DevOps Building a CI CD pipeline for Selenium web automation has the following benefits Quicker execution leading to early bug detection Consistent resultsRoom for parallel testing capabilitiesOffers greater scalabilityProgram automatic triggers etc A wide range of CI CD tools is available from which you can choose the one matching your requirement A few of the popular options are Jenkins Bamboo GitLab etc Visual TestingSince we are dealing with testing the UI of the web app it is vital to test the visual aspects of the app as well In Visual testing we will compare a web page with a base or reference screenshots were taken before to expose the significant visual differences LambdaTest provides a visual regression testing tool that lets you perform visual UI testing with ease Test Coverage using Cross browser testingTo stay ahead in the competitive market and gain user preference it is vital to make sure that your application is working as expected across different versions of browsers platforms and devices This is exactly where test coverage and cross browser testing comes into the picture Here are the major benefits of adopting cloud based cross browser testing Low investment cost in comparison to setting amp scaling up an in house infrastructureProvides access to hundreds of browser and platform combinationsExtends supports to old and outdated browser versions and OS devicesNo set up or installation or maintenance needs to be done locallyBetter security reliability and scalabilityLambdaTest is a trusted cross browser testing platform that provides you access to browsers and operating systems online The Selenium automation tests are executed on a secure cloud based Selenium Grid allows you to execute automated tests on a remote Selenium Grid Do check why you should test websites on different browsers remotely SHA Hash calculator ーthe program helps you determine the integrity of your data and challenge hash authentication How to run automation scripts with JavaScript on cloud based Selenium GridIn the earlier section of the Selenium JavaScript tutorial we performed Selenium automation using JavaScript on a local grid Now that you are aware about the shortcomings of the local Selenium Grid it s time to look at how to run JavaScript tests with Selenium Grid on a cloud based Selenium Grid LambdaTest is a popular cloud based cross browser testing platform trusted by startups as well as large enterprises LambdaTest provides you access to thousands of browsers for mobile and web testing to help you gain the maximum test coverage during the process of Selenium web automation Porting existing implementations of JavaScript with Selenium WebDriver such that it runs on a cloud based Selenium Grid requires minimal code changes Let s look at how to run the Selenium automation test with JavaScript on LambdaTest Step Let s get started by creating a free account on the LambdaTest platform Once you log in fetch your unique username and access key from the profile section of the website Step Make the following configuration changes into your existing code Provide username and access keyconst USERNAME YOUR USERNAME replace with your usernameconst KEY YOUR KEY replace with your accesskeyProvide the host corresponding to the LambdaTest platformconst GRID HOST hub lambdatest com wd hub Generate the desired browser capabilities using LambdaTest Capabilities Generator Select the desired browser version and OS configuration You may also provide the build name Provide this object inside the test function async function example var capabilities build JavaScript and Selenium Testing name Google search platform Windows browserName Chrome version selenium version chrome driver … Provide the gridUrl You can also find this value from Automation Dashboard of LambdaTest const gridUrl https USERNAME KEY GRID HOST Finally edit the code to build and instantiate the browser on the designated platformlet driver await new Builder usingServer gridUrl withCapabilities capabilities build Step Finally it s time to run the test on the LambdaTest Grid Trigger the following command on the terminal to run the JavaScript Automation test with Selenium Webdriver node test jsShown below is the execution snapshot from the LambdaTest automation dashboard which indicates that the test execution was successful Navigate to Automation Logs to view the test report containing video and logs In this final section of the Selenium JavaScript tutorial we ran the JavaScript automation test with Selenium WebDriver on a scalable and reliable cloud based Selenium Grid by LambdaTest It s a Wrap JavaScript is one of the most preferred languages when it comes to Selenium automation testing In this Selenium JavaScript tutorial we deep dived into the basic aspects of Selenium WebDriver automation with JavaScript We also explored the Selenium automation best practices that will help you create scalable automation tests with JavaScript and Selenium WebDriver For better scalability reliability and performance it is recommended to run Selenium WebDriver JavaScript tests on a cloud based Selenium Grid from LambdaTest With that setup you can make the most out of the automation tests created using Selenium and JavaScript In the next series of this Selenium JavaScript tutorial we would deep dive into the other vital aspects of Selenium automation testing with JavaScript Happy Testing |
2022-04-20 09:02:30 |
海外TECH |
Engadget |
Brave's browser can automatically bypass Google's AMP pages |
https://www.engadget.com/braves-browser-can-automatically-bypass-googles-amp-pages-090532430.html?src=rss
|
Brave x s browser can automatically bypass Google x s AMP pagesBrave is putting Google s Accelerate Mobile Pages AMP on blast with a new feature called De AMP The Verge reported It s designed to bypass any pages rendered with AMP and take users directly to the original website quot Where possible De AMP will rewrite links and URLs to prevent users from visiting AMP pages altogether the company wrote in a blog post If that s not possible then quot Brave will watch as pages are being fetched and redirect users away from AMP pages before the page is even rendered preventing AMP Google code from being loaded and executed quot it added nbsp The new feature was implemented in the name of privacy security and internet experience according to Brave quot In practice AMP is harmful to users and to the Web at large quot the article states quot Just as bad AMP helps Google further monopolize and control the direction of the web quot It adds that the next iteration of AMP quot will be even worse quot nbsp Google originally promoted AMP as a way to improve the mobile web experience by loading pages faster However it has recently been a target of critics who see it as a way for Google to increase its hegemony in the internet ad market by hosting content on its own servers A group of publishers recently announced it was moving away from AMP and a lawsuit filed by several US states accuses Google of running a monopoly that harmed ad industry competitors and publishers Brave promises quot the best privacy online quot with its browser so of course attacking Google is part of its business strategy Despite its efforts though it lags well behind most other browsers in mobile market share sitting in the quot other quot category behind Internet Explorer on Statcounter De AMP is now available in beta and quot will be enabled by default in the upcoming Desktop and Android versions and will be released on iOS soon after quot Brave said |
2022-04-20 09:05:32 |
海外TECH |
CodeProject Latest Articles |
How do I implement a distributed IM using GO |
https://www.codeproject.com/Articles/5330142/How-do-I-implement-a-distributed-IM-using-GO
|
goglide |
2022-04-20 09:40:00 |
ニュース |
BBC News - Home |
Boris Johnson faces challenge to move on from party row - minister |
https://www.bbc.co.uk/news/uk-politics-61160716?at_medium=RSS&at_campaign=KARANGA
|
covid |
2022-04-20 09:53:12 |
ニュース |
BBC News - Home |
Prince Harry says he is making sure the Queen is protected |
https://www.bbc.co.uk/news/uk-61157345?at_medium=RSS&at_campaign=KARANGA
|
people |
2022-04-20 09:47:53 |
ニュース |
BBC News - Home |
Netflix hints at password sharing crackdown as subscribers fall |
https://www.bbc.co.uk/news/business-61153252?at_medium=RSS&at_campaign=KARANGA
|
members |
2022-04-20 09:25:08 |
ニュース |
BBC News - Home |
Grenfell Tower: Man admits posting grossly offensive model video |
https://www.bbc.co.uk/news/uk-england-london-61160971?at_medium=RSS&at_campaign=KARANGA
|
grenfell |
2022-04-20 09:44:33 |
ビジネス |
不景気.com |
「バイオマスプロジェクト1号」に破産決定、負債60億円 - 不景気.com |
https://www.fukeiki.com/2022/04/biomass-project1.html
|
合同会社 |
2022-04-20 09:04:28 |
北海道 |
北海道新聞 |
ウクライナ避難民に生活情報発信 NHK、国際放送サイトで |
https://www.hokkaido-np.co.jp/article/671909/
|
国際放送 |
2022-04-20 18:07:00 |
北海道 |
北海道新聞 |
中国経済先行きに警戒表明 指導部見解か、新華社報道 |
https://www.hokkaido-np.co.jp/article/671908/
|
中国経済 |
2022-04-20 18:07:00 |
北海道 |
北海道新聞 |
稚内で小中学生ら130人体調不良 給食で食中毒か |
https://www.hokkaido-np.co.jp/article/671907/
|
体調不良 |
2022-04-20 18:01:00 |
IT |
週刊アスキー |
PC向けオンラインRPG『LOST ARK』の「軍団長レイド」に、不気味なサーカスを率いる狂気に満ちた「クークセイトン」が登場! |
https://weekly.ascii.jp/elem/000/004/089/4089761/
|
lostark |
2022-04-20 18:45:00 |
IT |
週刊アスキー |
Apple Music 1「The Zane Lowe Show」にカミラ・カベロが出演! ニューアルバム「Familia」について語る |
https://weekly.ascii.jp/elem/000/004/089/4089756/
|
apple |
2022-04-20 18:30:00 |
コメント
コメントを投稿