TECH |
Engadget Japanese |
エレコム、高耐久でシャーペンのような書き味のApple Pencil専用ペン先を発表 |
https://japanese.engadget.com/apple-pencil-130048587.html
|
applepencil |
2021-11-17 13:00:48 |
python |
Pythonタグが付けられた新着投稿 - Qiita |
GPUを活用した機械学習ツールNVIDIA RAPIDSをArch Linux + CUDA11.5 でビルドした (Ver21.12版) (3) cuGRAPH |
https://qiita.com/daisuzu_/items/9a9cd44a535da0f6aed7
|
ただし、ビルドまでにエライ手間がかかったので、皆さんへの共有も兼ねて基本構成その・・・Cupyのビルド方法についてはこちらの記事で紹介してます。 |
2021-11-17 22:42:58 |
python |
Pythonタグが付けられた新着投稿 - Qiita |
[Python][Pillow]画像ファイルのリサイズ(コマンドライン)<その1> |
https://qiita.com/VoshVolk/items/05335848292dddfb01ca
|
PythonPillow画像ファイルのリサイズコマンドラインpillowのresizeをコマンドラインから操作できるよう、一般化した。 |
2021-11-17 22:21:13 |
js |
JavaScriptタグが付けられた新着投稿 - Qiita |
ESP32をJavascriptでLチカする:LCDとRTCデバイスを制御する |
https://qiita.com/poruruba/items/95671ce4bd84467112fa
|
publicmainjsimportasrtcfromrtcrtcgetDate現在の日付Year、Month、Date、WeekDayを取得します。 |
2021-11-17 22:00:59 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
openpyxlを使用して、セル内の数式から参照ファイルのパスを取り出したい |
https://teratail.com/questions/369812?rss=all
|
openpyxlを使用して、セル内の数式から参照ファイルのパスを取り出したい前提・実現したいことopenpyxlを利用してExcelファイルの数式内の参照ファイルパスを取り出したいです。 |
2021-11-17 22:54:04 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
[python] fillで描画した領域の重なり部分を求める方法を教えていただきたいです。 |
https://teratail.com/questions/369811?rss=all
|
color |
2021-11-17 22:40:29 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
Qt5のQVBoxLayout生成時に親を指定する場合としない場合にはどういう違いがあるのでしょうか? |
https://teratail.com/questions/369810?rss=all
|
QtのQVBoxLayout生成時に親を指定する場合としない場合にはどういう違いがあるのでしょうかQtのアーキテクチャでよくわからない点が有ります。 |
2021-11-17 22:39:59 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
LinkPresentationを使ってimage_urlを取得したい |
https://teratail.com/questions/369809?rss=all
|
LinkPresentationを使ってimageurlを取得したい前提・実現したいことLinkPresentationnbspを使ってmetaデータを取得しています。 |
2021-11-17 22:36:57 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
文字列連結関数をポインターを使って書き換えについて |
https://teratail.com/questions/369808?rss=all
|
|
2021-11-17 22:30:08 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
フォームのメールアドレスの確認用の入力欄を省略したい(カートASP使用) |
https://teratail.com/questions/369807?rss=all
|
フォームのメールアドレスの確認用の入力欄を省略したいカートASP使用前提・実現したいことあるカートASPを使用しているのですが、ユーザーの手間を省略するために入力フォームでメールアドレスの確認用の項目をなくしたいと考えています。 |
2021-11-17 22:23:32 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
クロスエントロピー誤差について |
https://teratail.com/questions/369806?rss=all
|
クロスエントロピー誤差について通常、クロスエントロピーを用いた損失関数では、正解ラベルにはまたはを与えて、ロスを計算すると思いますが、正解ラベルに以外を与えた場合、何が起きるのでしょうか。 |
2021-11-17 22:11:49 |
Program |
[全てのタグ]の新着質問一覧|teratail(テラテイル) |
除算の結果が0になってしまいます |
https://teratail.com/questions/369805?rss=all
|
除算の結果がになってしまいます除算の結果がになってしまいます、、SystemoutでnumやnumOfDataのみを出力して確認してみると、ちゃんと以外の数値が入っているのですが、aやbを出力してみると、になってしまいます。 |
2021-11-17 22:05:08 |
AWS |
AWSタグが付けられた新着投稿 - Qiita |
AWS ECS コンテナ追加の仕方 |
https://qiita.com/eito1011/items/1069af6f5bcd4d6bb263
|
AWSECSコンテナ追加の仕方状況現在AWSにサービスをデプロイしている途中です。 |
2021-11-17 22:39:48 |
Docker |
dockerタグが付けられた新着投稿 - Qiita |
【M1Mac × Docker】CentOSでlessコマンド使えるようにした話 |
https://qiita.com/Ryo-hey/items/8c3fd7b0a6775bd2acb6
|
【MMac×Docker】CentOSでlessコマンド使えるようにした話前提条件OSMacOSMontereyCPUAppleMarmDockerDockerDesktopCentOSCentOSLinuxreleaseAltArchやりたいことDockerコンテナで動かすCentOSで、lessコマンドを使いたいつまづいた話rootaeafalessNbunsyotxtbashlesscommandnotfoundlessコマンド自体が使えない模様bashlesscommandnotfound解決策yum※でlessコマンドをインストールyuminstalllessなんやかんやでインストール成功何度かIsthisokydNと訊かれるので、全てyYesで答えますrootaeafayuminstalllessLoadedpluginsfastestmirrorovlDeterminingfastestmirrorsbaseftpyzyamagatauacjpextrasftpyzyamagatauacjpupdatesftpyzyamagatauacjpbasekBextraskBupdateskBbaseaarchgroupgzkBbaseaarchprimarydbMBextrasaarchprimarydbkBupdatesaarchprimarydbMBResolvingDependenciesgtRunningtransactioncheckgtPackagelessaarchelwillbeinstalledgtProcessingDependencygroffbaseforpackagelesselaarchgtRunningtransactioncheckgtPackagegroffbaseaarchelwillbeinstalledgtFinishedDependencyResolutionDependenciesResolvedPackageArchVersionRepositorySizeInstallinglessaarchelbasekInstallingfordependenciesgroffbaseaarchelbasekTransactionSummaryInstallPackageDependentpackageTotaldownloadsizeMInstalledsizeMIsthisokydNyDownloadingpackageswarningvarcacheyumaarchbasepackagesgroffbaseelaarchrpmHeaderVRSASHASignaturekeyIDddNOKEYPublickeyforgroffbaseelaarchrpmisnotinstalledgroffbaseelaarchrpmkBlesselaarchrpmkBTotalkBsMBRetrievingkeyfromfileetcpkirpmgpgRPMGPGKEYCentOSImportingGPGkeyxFAEBUseridCentOSKeyCentOSOfficialSigningKeyltsecuritycentosorggtFingerprintabdaacbbcaafaebPackagecentosreleaseelcentosaarchinstCentOSFrometcpkirpmgpgRPMGPGKEYCentOSIsthisokyNyRetrievingkeyfromfileetcpkirpmgpgRPMGPGKEYCentOSaarchImportingGPGkeyxDDUseridCentOSAltArchSIGAArchltsecuritycentosorggtFingerprinteffcaefdfbcdadfccbefddPackagecentosreleaseelcentosaarchinstCentOSFrometcpkirpmgpgRPMGPGKEYCentOSaarchIsthisokyNyRunningtransactioncheckRunningtransactiontestTransactiontestsucceededRunningtransactionInstallinggroffbaseelaarchInstallinglesselaarchVerifyinglesselaarchVerifyinggroffbaseelaarchInstalledlessaarchelDependencyInstalledgroffbaseaarchelComplete無事、lessコマンドが使えるようになりました。 |
2021-11-17 22:58:16 |
Linux |
CentOSタグが付けられた新着投稿 - Qiita |
【M1Mac × Docker】CentOSでlessコマンド使えるようにした話 |
https://qiita.com/Ryo-hey/items/8c3fd7b0a6775bd2acb6
|
【MMac×Docker】CentOSでlessコマンド使えるようにした話前提条件OSMacOSMontereyCPUAppleMarmDockerDockerDesktopCentOSCentOSLinuxreleaseAltArchやりたいことDockerコンテナで動かすCentOSで、lessコマンドを使いたいつまづいた話rootaeafalessNbunsyotxtbashlesscommandnotfoundlessコマンド自体が使えない模様bashlesscommandnotfound解決策yum※でlessコマンドをインストールyuminstalllessなんやかんやでインストール成功何度かIsthisokydNと訊かれるので、全てyYesで答えますrootaeafayuminstalllessLoadedpluginsfastestmirrorovlDeterminingfastestmirrorsbaseftpyzyamagatauacjpextrasftpyzyamagatauacjpupdatesftpyzyamagatauacjpbasekBextraskBupdateskBbaseaarchgroupgzkBbaseaarchprimarydbMBextrasaarchprimarydbkBupdatesaarchprimarydbMBResolvingDependenciesgtRunningtransactioncheckgtPackagelessaarchelwillbeinstalledgtProcessingDependencygroffbaseforpackagelesselaarchgtRunningtransactioncheckgtPackagegroffbaseaarchelwillbeinstalledgtFinishedDependencyResolutionDependenciesResolvedPackageArchVersionRepositorySizeInstallinglessaarchelbasekInstallingfordependenciesgroffbaseaarchelbasekTransactionSummaryInstallPackageDependentpackageTotaldownloadsizeMInstalledsizeMIsthisokydNyDownloadingpackageswarningvarcacheyumaarchbasepackagesgroffbaseelaarchrpmHeaderVRSASHASignaturekeyIDddNOKEYPublickeyforgroffbaseelaarchrpmisnotinstalledgroffbaseelaarchrpmkBlesselaarchrpmkBTotalkBsMBRetrievingkeyfromfileetcpkirpmgpgRPMGPGKEYCentOSImportingGPGkeyxFAEBUseridCentOSKeyCentOSOfficialSigningKeyltsecuritycentosorggtFingerprintabdaacbbcaafaebPackagecentosreleaseelcentosaarchinstCentOSFrometcpkirpmgpgRPMGPGKEYCentOSIsthisokyNyRetrievingkeyfromfileetcpkirpmgpgRPMGPGKEYCentOSaarchImportingGPGkeyxDDUseridCentOSAltArchSIGAArchltsecuritycentosorggtFingerprinteffcaefdfbcdadfccbefddPackagecentosreleaseelcentosaarchinstCentOSFrometcpkirpmgpgRPMGPGKEYCentOSaarchIsthisokyNyRunningtransactioncheckRunningtransactiontestTransactiontestsucceededRunningtransactionInstallinggroffbaseelaarchInstallinglesselaarchVerifyinglesselaarchVerifyinggroffbaseelaarchInstalledlessaarchelDependencyInstalledgroffbaseaarchelComplete無事、lessコマンドが使えるようになりました。 |
2021-11-17 22:58:16 |
GCP |
gcpタグが付けられた新着投稿 - Qiita |
Google Cloud アップデート (11/11-11/17/2021) |
https://qiita.com/kenzkenz/items/b4e54c90cf77fdcbcb9e
|
GoogleCloudアップデートVMwareEngineNoveuropewestで使えるようになったよDocumentAINovv多くのプロセッサが値下げされたよCloudIDSNovCloudIDSがGAになったよCloudAssetInventoryNovMonitoringのリソースが新しく追加されたよCloudAssetInventoryNovMetastoreのリソースが追加されたよMemorystoreforRedisNovリードレプリカの機能がプレビューになったよComputeEngineNovlocalSSDでsyncを大量に利用するワークロードがある場合は、writeIOPSのリミットに一貫して当たるようになって低いレイテンシがcacheflushingを利用しなくても実現されるようになったよ最近のSSDのファーム更新による変更。 |
2021-11-17 22:44:38 |
海外TECH |
Ars Technica |
Linux has a serious security problem that once again enables DNS cache poisoning |
https://arstechnica.com/?p=1813667
|
attack |
2021-11-17 13:36:23 |
海外TECH |
Ars Technica |
Apple Watch Series 7 review: Time for a minor upgrade |
https://arstechnica.com/?p=1812307
|
incremental |
2021-11-17 13:00:51 |
海外TECH |
MakeUseOf |
Updating Your CV on Indeed? Here’s Why Your Employer May Be Notified |
https://www.makeuseof.com/update-indeed-cv-employer-notified/
|
Updating Your CV on Indeed Here s Why Your Employer May Be NotifiedIf you use the Indeed platform to search and apply for jobs be warned that it could notify your current employer when you update your CV Here s why |
2021-11-17 13:30:11 |
海外TECH |
DEV Community |
All you need to know about React Hooks. |
https://dev.to/pratham10/all-you-need-to-know-about-react-hooks-54p0
|
All you need to know about React Hooks What are React Hooks React hooks are nothing but JavaScript functions that let you hook into React state and lifecycle features from function components Note Hooks can only be used inside function components Hooks allow you to add state to add state to functional components and to share logic across components Benefits of using React hooks There are three key advantages to using React Hooks reusability readability and testability Hooks made the React lifecycle easierWhen using lifecycle in class components the componentDidMount componentDidUpdate componentWillUnmount methods are handled individually but when using React hooks you can just do everything through the useEffect hook Rules of Hooks We can use React Hooks inside function components only Only call hooks at top level You cannot call hooks inside loops conditions or nested functions they should always be called at the top of function component You cannot call hooks from regular JavaScript functions Built in and Custom hooks React have few built in hooks like useEffect useState You can also create your own custom hooks in React Some common built in hooksuseStateuseState hook allows you to add state variables in functional components In useState you pass the initial state to the function and it returns a variable with a value and one function to update the value Let s look at the example belowimport useState from react function Example Declare a new state variable which we ll call count const count setCount useState return lt div gt lt p gt You clicked count times lt p gt lt button onClick gt setCount count gt Click me lt button gt lt div gt The above example increments the counter on the handler function parameter itself Here the initial value of the counter is then setCount function is used to update the value of counter useEffectTo understand the useEffect hook you first need to understand lifecycle of the component The lifecycle of the component contains three main parts i e mounting updating and unmounting mounting when the page loadsupdating when the state updatesunmounting when user leaves the pageExample import useState useEffect from react import ReactDOM from react dom function Example const count setCount useState useEffect gt setTimeout gt setCount count gt count return lt h gt I ve rendered count times lt h gt Read more here useEffect hooksAdditional built in HooksuseContextuseReduceruseCallbackuseMemouseRefuseImperativeHandleuseLayoutEffectuseDebugValue ConclusionThank you for reading If you enjoyed this post drop a like and comment your thoughts IF YOU LIKED THE POST THEN YOU CAN BUY ME MY FIRST COFFEE EVER THANK YOUFollow me on twitter Happy coding |
2021-11-17 13:48:23 |
海外TECH |
DEV Community |
How to write three times fewer lines of code when doing load testing |
https://dev.to/tarantool/how-to-write-three-times-fewer-lines-of-code-when-doing-load-testing-9lb
|
How to write three times fewer lines of code when doing load testingAythor Sergey KononenkoThe key concept of load testing is automating everything that can be automated Take a tool write a configuration and a test scenario then run a simulation of an actual load The less code the better Automating load testing is not as difficult as it may seem at first glance All it takes is the right tool In this article I will show how I reduced the code of my testing utility threefold without any performance losses I m also going to explain why Yandex Tank combined with Pandora didn t work for me What is load testingMy name is Sergey and I m a developer on the architecture team at Tarantool Tarantool is an in memory computing platform designed to handle exceptionally high loads up to hundreds of thousands of RPS That makes load testing essential for us so I perform it every day I am sure that almost everybody knows precisely why load testing matters but let s review the basics just in case The results of load testing show how your system behaves in different scenarios What parts of the system are idle in what cases What is the approximate request response time At what load does the system become unstable What part of the system causes malfunctions What part of it puts a limit on the overall performance Why we need special tools for load testingWhen developing an application on Tarantool we often have to test the performance of a stored procedure The application accesses the procedure over the iproto binary protocol Not every language can be used to test over iproto There are Tarantool connectors for a number of languages and you have to write your tests in one of them Most testing tools only support HTTP which is not an option for us Sure we could add some controls and make the best of it but that wouldn t help the end user Since we pass the stored procedures to the client side testing via HTTP is unreliable Common load testing toolsAt first we considered a popular tool called JMeter However we were not impressed by its performance It s written in Java and therefore is memory hungry and slow Besides we used it to test via HTTP which meant indirect testing performed through special controls Then we tried writing custom Go utilities for each project which was a road to nowhere it s no use writing code over and over when it s thrown away right after the testing is complete That s no systematic approach Let me reiterate that we want to automate as much as we can in load testing That s how we got to Yandex Tank and Pandora as this combination seemed like a perfect tool satisfying all the requirements It can easily be adapted to any project It s fast since Pandora is written in Go Our team has a lot of experience with Go so working out the scenarios won t be a problem But there were also disadvantages Why we stopped using Yandex TankOur time with Yandex Tank was brief and here are a few key reasons we gave up on it Lots of utility code The Pandora wrapper that allows you to work with Tarantool contains lines of code most of which don t bear any testing logic Constant source code recompilation We encountered this problem when we had to keep loading the system while simultaneously generating various amounts of data We couldn t find a convenient external way to control data generation parameters and pre generation wasn t an option So we changed the data and compiled a new source every time Such manipulations could spawn up to loader binaries per test scenario Scarce data when using standalone Pandora Yandex Tank is a wrapper that provides a pretty neat metrics visualization Pandora is the engine that generates the load Effectively we were using two different tools which was not always convenient thankfully we have Docker Configuration file options are not very intuitive JSON and YAML configurations are a sensitive topic per se But it becomes really unpleasant when it isn t clear how an option works depending on the values For us startup was such an option It produced the same results on entirely different values making it difficult to assess the system s actual performance All that created the following situation in one of our projects huge piles of source codeunclear metricsoverly complicated configuration What led us to kk is a load testing tool written in Go just like Pandora Therefore performance is nothing to worry about What s appealing about k is its modularity which helps avoid constant source code recompilation With k we write modules to access the Tarantool interface and do other things like generating data Since modules are independent of one another it s not necessary to recompile every one of them Instead you can customize data generation parameters within a scenario written in JavaScript Yep that s right No more JSON or YAML configurations k testing scenarios are code The scenario can be divided into stages each of which models a different type of load If you alter the scenario there s no need to recompile the k binary as they don t depend on one another That makes two fully independent components written in programming languages You can finally forget about configurations and just write your code Our applicationThis testing application in Lua stores information about car models I use this application to test database writes and reads The application has two main components API and Storage The API component gives the user HTTP controls for reading and writing while Storage is responsible for the application s interaction with the database Here is the interaction scenario the user sends a request and the controls call the database functions necessary to process that request Check out the application on GitHub Getting k to work with the applicationTo create a k “Tarantool interaction module we first need to write a Go module using the xk framework This framework provides tools for writing custom k modules First register the module so that k can work with it We also need to define a new type and its receiver functions that is methods to call from the JavaScript scenario package tarantoolimport github com tarantool go tarantool go k io k js modules func init modules Register k x tarantool new Tarantool Tarantool is the k Tarantool extensiontype Tarantool struct We can already use this module but it doesn t do much yet Let s program it to connect to a Tarantool instance and to invoke the Call function provided by the Go connector Connect creates a new Tarantool connectionfunc Tarantool Connect addr string opts tarantool Opts tarantool Connection error if addr addr localhost conn err tarantool Connect addr opts if err nil return nil err return conn nil Call invokes a registered Tarantool functionfunc Tarantool Call conn tarantool Connection fnName string args interface tarantool Response error resp err conn Call fnName args if err nil return nil err return resp err The full code of the module can be found in this GitHub repo This code is already far more compact than what Pandora requires for working with Tarantool The Pandora version had about lines of code and now we have However we haven t implemented any logic yet Spoiler alert we re going to end up with lines of code k will take care of everything else Interacting with the module from a scenarioFirst we ll import that custom module into our scenario import tarantool from k x tarantool Now let s create a connection const conn tarantool connect localhost connect is the receiver function we ve declared in our module If you want to pass an object that stores connection options provide it as a second parameter in a simple JSON object All that s left is to declare testing stages and launch the test export const setup gt tarantool insert conn cars cadillac export default gt console log tarantool call conn box space cars select export const teardown gt tarantool delete conn cars pk There are three testing stages in this example setup is performed before the test Here is where you prepare the data or display an information message default which is the main test scenario teardown is performed after the test is completed Here you can erase the test data or display another information message After the test is launched and finished you will see an output like this Here is what you can learn from this output What scenario is running Whether the data is being written to the console or aggregated via InfluxDB Scenario parameters Scenario console log output Execution process Metrics The most interesting metrics here are iteration duration representing latency and iterations representing the total number of iterations performed and their average number per second ーthe desired RPS How about something more substantial Let s create a test bench consisting of three nodes with two of them combined in a cluster The third node will host k s load system and a Docker container with Influx and Grafana This is where we ll send the metrics and visualize them Each cluster node will look like this We don t place the storage and its replicas in the same nodes If the first storage is in the first node its replica is in the second node Our spaceв basically a table in Tarantool will have three fields id bucket id and model We ll create a primary key based on id and another index based on bucket id local car box schema space create car format car id string bucket id unsigned model string if not exists true car create index pk parts car id if not exists true car create index bucket id parts bucket id unique false if not exists true Let s test the creation of car objects To do so we re going to write a k module for generating data Earlier I mentioned lines of utility code and here are the remaining lines of test logic var bufferData make chan map string interface func Datagen GetData map string interface return lt bufferData func Datagen GenerateData go func for data generateData bufferData lt data func generateData map string interface data map string interface car id uniuri NewLen model uniuri NewLen return data I left out the part with the initialization function and the definition of the type used to call other functions Now let s create receiver functions that we ll invoke from our JavaScript scenario Interestingly we can work with channels without losing any data Suppose you have a function that writes to bufferData and another that reads from that channel If you invoke the second function in the read scenario no data will be lost generateData is a function that generates the car model and its id This is an internal function not extended to our module generateData launches a goroutine so that we always have enough data generated for insertion The test scenario for this bench looks like this import datagen from k x datagen import tarantool from k x tarantool const conn tarantool connect const conn tarantool connect const baseScenario executor constant arrival rate rate timeUnit s duration m preAllocatedVUs maxVUs export let options scenarios conntest Object assign exec conntest baseScenario conntest Object assign exec conntest baseScenario export const setup gt console log Run data generation in the background datagen generateData export const conntest gt tarantool call conn api car add datagen getData export const conntest gt tarantool call conn api car add datagen getData export const teardown gt console log Testing complete It got a little bigger There s a new options variable that allows us to configure testing behavior I created two scenarios and a dedicated function for each one As the cluster consists of two nodes we need to test simultaneous connection to these nodes If you do that with a single function which was the default earlier you can t expect the cluster to be fully loaded Every time unit you send a request to the first router while the second one is idle then you send a request to the second one while the first one is idle Thus performance goes down However it can be prevented and we ll get back to it soon Now let s take a look at our testing scenarios Under executor we specify what type of testing we want to launch If this value is set to constant arrival rate the scenario will simulate a constant load Suppose we want to produce RPS for virtual users during one minute Let s use the database not the console to output the results so that the information is then displayed on the dashboard With the objective of RPS we got only RPS which is not so bad There was likely just not enough computing power on the client machine where the loader was located I performed this test on my MacBook Pro Mid Here is the data on latency and virtual users What about flexibility As far as flexibility is concerned everything is perfect Scenarios can be modified to check metrics collect metrics and more In addition you can optimize scenarios in one of the ways described below n connections ーn scenariosIt is the basic scenario that we ve discussed above const conn tarantool connect const conn tarantool connect const baseScenario executor constant arrival rate rate timeUnit s duration m preAllocatedVUs maxVUs export let options scenarios conntest Object assign exec conntest baseScenario conntest Object assign exec conntest baseScenario n connections ー scenarioIn this scenario the connection to be tested is selected randomly at each iteration The test unit is second which means that once per second we randomly choose one connection among those declared const conn tarantool connect const conn tarantool connect const conns conn conn const getRandomConn gt conns Math floor Math random conns length export let options scenarios conntest executor constant arrival rate rate timeUnit s duration m preAllocatedVUs maxVUs This scenario can be reduced to a single connection To do so we need to set up a TCP balancer nginx envoy haproxy but that s a story for another day n connections ーn scenarios restrictions and checksYou can use restrictions to control the obtained metrics If the percentile latency is greater than ms the test will be considered unsuccessful You can set several restrictions for one parameter You can also add checks for example to see what percentage of requests reached the server The percentage rate is expressed as a number between and const conn tarantool connect const conn tarantool connect const baseScenario executor constant arrival rate rate timeUnit s duration s preAllocatedVUs maxVUs export let options scenarios conntest Object assign exec conntest baseScenario conntest Object assign exec conntest baseScenario thresholds iteration duration p lt p lt checks rate n connections ーn scenarios restrictions and checks sequential launchThe sequential launch scenario is the most sophisticated among those described in this article Suppose you want to check n stored procedures without loading the system at that exact time In this case you might want to specify the time to start the tests and you can do so in the second scenario Keep in mind however that your first scenario may still be running at that moment You can set the time limit for its execution via the gracefulStop parameter If you set gracefulStop to seconds the first scenario will definitely be stopped by the time the second one starts const conn tarantool connect const conn tarantool connect const baseScenario executor constant arrival rate rate timeUnit s duration s gracefulStop s preAllocatedVUs maxVUs export let options scenarios conntest Object assign exec conntest baseScenario conntest Object assign exec conntest startTime s baseScenario thresholds iteration duration p lt p lt checks rate Performance in comparison to Yandex Tank PandoraWe compared both tools on the application described above Yandex Tank loaded the router CPU by and the storage CPU by yielding RPS As for k it loaded the router CPU by and the storage CPU by producing RPS These are the average data from test runs Why is that so Both Pandora and k are written in Go However despite these similar fundamentals k allows you to test applications in a more programming like manner Conclusionk is a simple tool Once you ve learned how to use it you can reconfigure it for any project and spend fewer resources Start by creating a core module and then attach logic to it There s no need to rewrite tests from scratch because you can use modules from other projects k is also a lean tool for load testing My test logic with the wrapper fit within just lines of code You can write custom modules to suit your business logic scenarios and client requirements k is about programming not configuration files You can try k out here and play around with the sample application here Get Tarantool on our website and feel free to ask questions in our Telegram chat LinksTarantool binary protocolMore about kThe code of my testing applicationA framework for writing your own k modulesA k module to interact with TarantoolA sandbox where you can try out the application and get a taste of testing with k |
2021-11-17 13:34:52 |
海外TECH |
DEV Community |
Creating personality test app |
https://dev.to/daaahailey/creating-personality-test-app-16ka
|
Creating personality test appIt s quite popular doing personality tests in Korea for fun The most famous one is MBTI test from personalities and there are many different kinds The reason I mentioned this is because we had special class which was making this kind of app and for that class a famous programmer youtuber came as a lecturer today If you are curious about him and the app check this video and his channel JoCoding they also have English subtitles Making the web app was quite easy and fun I will think about some idea and if I come up with something new I am gonna try to make another one next time A few things I learnt today Using Bootstrap I haven t been really using libraries I tried to avoid using it since I thought I should know basic stuff first so it was almost the first time using bootstrap today I think it s quite good to use if you want to make something very fast and want to release or test it because it s very easy and simple We used it for radio buttons buttons and somme basic styling For example to give margin top we just gave class mt how easy also if we had to write code for these radio buttons below in CSS only it would take much more time but with bootstrap it just took one minute lt div class btn group mt role group aria label Basic radio toggle button group gt lt input type radio class btn check yes name q btnradio id q btnradio autocomplete off gt lt label class btn btn outline primary for q btnradio gt Yes lt label gt lt input type radio class btn check no name q btnradio id q btnradio autocomplete off gt lt label class btn btn outline danger for q btnradio gt No lt label gt lt input type radio class btn check maybe name q btnradio id q btnradio autocomplete off gt lt label class btn btn outline success for q btnradio gt Maybe lt label gt lt div gt making favicon You can make favion here Deploying through NetlifyI have used Netlify once when I made my portfolio website but it was only to include it in my CV and I haven t released any service that many people can use I almost forgot how to use it but it was very simple to use and free We bought really cheap domain and connected to it I might use that domain for my apps to test Adding share buttons for social mediaWe used addthis for that What we used was share buttons but there are many other features as well You just have to select types of button you want to add which social media button you d like to add how want it to be in the website e g inline etc and then this will give you a few lines of code that you need to copy and paste into your html file and I added it inside footer As you can see on the picture above the share buttons are added and there s also ads inside footer Adding ads on your appFor this we used kakaoAdFit I could sign up with my kakao id without signing up again It was also very easy and simple to do it You just have to add a few lines of code into your html for this as well I think we used this because it s the easiest and most simple way to add ads but I d like to try adding google ads later on my project SEO Search Engine Optimisation In Korea we use Naver a lot it s like Korean google which is search platform so we learnt how to add our website webapp to appear on Naver when it gets searched Search AdvisorAdd the URL for the website you d like to add Confirm that you are the owner of the website You can download html file they provide add it to your project folder and deploy it or can copy and paste the html meta tag to your html file and deploy When it s confirmed go to 검증 Verification gt robots txt download robot txt they have a tool and button that you can create and download it simply and put it inside your project folder this needs to be at root directory Now we need sitemap file Search create site map on google and open what s appear to be the first result which is xml sitemaps add the URL and click start Download the sitemap file and need to add this sitemap file to the root directory of project as well Deploy again and go to Naver s Search Advisor Go to 검증 Verification gt robots txt and then click 수집요청 Ask for collecting to verify robots txt When these are done go to 요청 Request gt 사이트맵제출 Submit sitemap and add your sitemap file name About Serch Engine amp SEOSEO checkupYou can check your seo and find out what you can improve |
2021-11-17 13:30:29 |
海外TECH |
DEV Community |
Continuous integration and testing with custom GitHub workflow for Windows base image |
https://dev.to/alexanderdamiani/continuous-integration-and-testing-with-custom-github-workflow-for-windows-base-image-4l2o
|
Continuous integration and testing with custom GitHub workflow for Windows base imageVIDEO LINKThis video covers how to run continuous integration CI and testing pytest on a GitHub repo automatically with GitHub Actions Specifically regarding using a Windows base image which doesn t allow using any prebuilt GitHub Actions from the marketplace and instead the workflow must be written from scratch with PowerShell Linting is done using the following packages flakemypyisortThe use cases are python package dependency is Windows only and can t be installed on Ubuntuapplication will be running on Windows natively and you want testing to simulate the production environmentapplication will be cross platform and you want testing to simulate all possibilities of the production environmentThe video covers walk through of custom workflow file in a GitHub repositoryusing the custom workflow file in a GitHub repositoryAll the code for the video is on GitHub as well with the link in the video description If you find the video helpful you can greatly help me by doing one or all of the following subscribing to my YouTube channelliking commenting and or sharing the videostarring the GitHub repofollowing me on GitHub |
2021-11-17 13:29:08 |
海外TECH |
DEV Community |
Variables, Expressions, and Statements in Julia |
https://dev.to/ifihan/variables-expressions-and-statements-in-julia-15jb
|
Variables Expressions and Statements in JuliaIn this article I d be explaining the following concepts in the Julia programming language Variables Expressions and Statements P S If you have no idea of what Julia is you can read up here Let s dive in What are Variables Variables can be seen as containers used to store data that the program can use over time and can be called at any point in the codebase Unlike C and Java variables in Julia need not to be written with a Datatype It auto assigns the data type automatically like Python Using the Julia REPL julia gt message Hello World Hello World One of the features of a powerful language is the ability to manipulate variables In Julia a variable can be overwritten the content of a variable replaced with a new one Using the previous example julia gt message Hello World Hello World julia gt message I love Julia I love Julia see how the message was overwrittenVariables can be given any name as long as it s meaningful to the codebase Some of the rules that apply in the naming convention in Python applies here They include A variable cannot start with a numberjulia gt letters some text ERROR syntax is not a valid function argument nameA variable can start with uppercase but it s conventional to begin variables with lower cases For variables with long names you use the underscore character Leaving a space would give an errorjulia gt your name Julia ERROR syntax extra token name after end of expressionKeywords cannot be used as variable names in Julia For example struct is a keyword in Juliajulia gt struct Exploration ERROR syntax unexpected The keywords in Julia are abstract type baremodule begin break catchconst continue do else elseifend export finally for functionglobal if import importall inlet local macro module mutable structprimitive type quote return try usingstruct where whileYou do not need to memorize them Keywords are displayed in a different color in most development environments What is a Statement A statement is a piece of code that performs a specific task such as creating a variable or displaying a value The assignment of a value to a variable is written in a statement An assignment statement creates a new variable and gives it a valuejulia gt note random words random words Displaying the value of a variable is also done with a statement From the previous example julia gt println note random words ExpressionsA combination of values variables and operators is called an expression A variable like a value is regarded an expression by itself Below is a legal representation of an expressionjulia gt julia gt n julia gt n When you type in an expression in the REPL it gets evaluated immediately For example n has the value and n has the value Global vs Local VariablesIn Julia variables can be assigned globally or locally A global variable is a variable that can be used throughout the program while a local variable is a variable that is declared in a function and given a local scope Julia uses the global inbuilt function to declare global variables For exampleglobal b function addNumber a return a bendprintln addNumber The result of this is In conclusion Like most other programming languages Julia makes provision for creating variables statements and expressions which make writing readable and portable code easier Getting the hang of how it is used is essential for all developers |
2021-11-17 13:22:55 |
海外TECH |
DEV Community |
How to Create and Publish a React Component Library |
https://dev.to/alexeagleson/how-to-create-and-publish-a-react-component-library-2oe
|
How to Create and Publish a React Component LibraryIf you are interested in a video version of this tutorial check out the link below You can follow along with the code in this blog The video is entirely optional every step and instruction is covered in the blog post IntroductionPrerequisites and SetupCreating ComponentsAdding TypescriptAdding RollupBuilding Your LibraryPublishing Your LibraryUsing Your LibraryAdding CSSOptimizingAdding TestsAdding StorybookWrapping Up IntroductionThis tutorial will take you through the process of creating and publishing your own custom React component library and hosting it on Github At the end of this tutorial you will have the ability to the following in all of your future React projects npm install my github account my cool component libraryimport MyCustomComponent from my github account my cool component library const MyApp gt return lt div gt lt MyCustomComponent gt lt div gt Prerequisites and SetupThis project assumes you are familiar with and have installed Code editor IDE this tutorial uses VS Code but any IDE will work NPM NPM is installed when you install Node js on your machine Installing packages presume you know how to add packages to a Javascript project with npm install Bash terminal or another terminal you are comfortable with for running commands Git we will be creating a git repository on our machine and publishing it to Github though all instructions will be provided on how to follow along React how to create simple components using JSX Typescript how to create an object interface with simple properties First we will initialize our project npm initYou can take the defaults for all the values we ll edit them later in the tutorial Next we will add add the tools necessary to create our components npm install react typescript types react save dev Creating ComponentsNow we can create our first component Because we are creating a library we are going to create index files for each tier and export our components from each one to make it as easy as possible for the people using our library to import them Within the root of your project create the following file structure ├ーsrc│├ーcomponents │├ーButton │├ーButton tsx │└ーindex ts │└ーindex ts│└ーindex ts├ーpackage json└ーpackage lock jsonMake sure to double check your structure You should have three index ts files and a Button tsx file inside of a Button directory If you have a preferred way of structuring React components within a project you are of course welcome to do it however you like but this is the structure we will follow for this tutorial Begin by creating Button tsx src components Button Button tsximport React from react export interface ButtonProps label string const Button props ButtonProps gt return lt button gt props label lt button gt export default Button To keep things simple we will just export a button that takes a single prop called label We can add more complexity and styles to our components once we have confirmed that our basic template is setup correctly After our button we update the index file inside our Button directory src components Button index tsexport default from Button Then we export that button from the components directory src components index tsexport default as Button from Button And finally we will export all of our components from the base src directory src index tsexport from components Adding TypescriptUp until now we haven t yet initialized Typescript in our project Although you technically don t need a configuration file to use Typescript for the complexity of building a library we are definitely going to need one You can initialize a default configuration by running the following command npx tsc initThat will create a tsconfig json file for us in the root of our project that contains all the default configuration options for Typescript If you would like to learn more about the many options in a tsconfig json file modern versions of TS will automatically create descriptive comments for each value In addition you can find full documentation on the configuration here You may notice depending on your IDE that immediately after initializing you begin to get errors in your project There are two reasons for that the first is that Typescript isn t configuration to understand React by default and the second is that we haven t defined our method for handling modules yet so it may not understand how to manage all of our exports To fix this we are going to add the following values to tsconfig json compilerOptions Default target es esModuleInterop true forceConsistentCasingInFileNames true strict true skipLibCheck true Added jsx react module ESNext declaration true declarationDir types sourceMap true outDir dist moduleResolution node allowSyntheticDefaultImports true emitDeclarationOnly true I have separated these values into a couple different sections based on the default tsconfig json created using the most recent version of Typescript as of this writing The values commented default should already be set for you by default you will want to double check and make sure however The values marked added are new values that we need for our project We ll briefly outline why we need them jsx react Transform JSX into React code module ESNext Generate modern JS modules for our library declaration true Output a d ts file for our library types declarationDir types Where to place the d ts files sourceMap true Mapping JS code back to its TS file origins for debugging outDir dist Directory where the project will be generated moduleResolution node Follow node js rules for finding modules allowSyntheticDefaultImports true Assumes default exports if none are created manually emitDeclarationOnly true Don t generate JS rollup will do that only export type declarationsOne you add those values to your TS configuration file you should see the errors in Button tsx and other files immediately disappear Adding RollupNext we will add rollup to our project If you ve never used rollup before it s very similar to webpack in that it is a tool for bundling individual Javascript modules into a single source that a browser is better able to understand Though both tools can accomplish the same goal depending on configuration typically webpack is used for bundling applications while rollup is particularly suited for bundling libraries like ours That s why we ve chosen rollup Also similar to webpack rollup uses a plugin ecosystem By design rollup does not know how to do everything it relies on plugins installed individually to add the functionality that you need We are going to rely on four plugins for the initial configuration of our library more will be added later rollup plugin node resolve Uses the node resolution algorithm for modules rollup plugin typescript Teaches rollup how to process Typescript files rollup plugin commonjs Converts commonjs modules to ES modulesrollup plugin dts rollup your d ts filesSo with that said let s go ahead and install rollup and our plugins npm install rollup rollup plugin node resolve rollup plugin typescript rollup plugin commonjs rollup plugin dts save devTo configure how rollup is going to bundle our library we need to create a configuration file in the root of our project rollup config jsimport resolve from rollup plugin node resolve import commonjs from rollup plugin commonjs import typescript from rollup plugin typescript import dts from rollup plugin dts const packageJson require package json export default input src index ts output file packageJson main format cjs sourcemap true file packageJson module format esm sourcemap true plugins resolve commonjs typescript tsconfig tsconfig json input dist esm types index d ts output file dist index d ts format esm plugins dts In this file we import our four plugins that we installed We also import our package json file as a commonJS module int oa variable called packageJson We use this variable to refer to the main and module values that we will define in the next section The entrypoint for our library input is the index ts file in the src directory which exports all of our components We will be distributing both ES and commonJS modules so the consumers of our library can choose which type work best for them We also invoke three of our four plugins on the first of two configuration objects on the exported array This first configuration defines how the actual Javascript code of our library is generated The second configuration object defines how our libraries types are distributed and uses the dts plugin to do so The final step before we can run our first rollup is to define the values of main and module in our package json file package json name template react component library version description A simple template for a custom React component library scripts rollup rollup c author Alex Eagleson license ISC devDependencies rollup plugin commonjs rollup plugin node resolve rollup plugin typescript types react react rollup rollup plugin dts typescript main dist cjs index js module dist esm index js files dist types dist index d ts Here is the sample of the package json file we are using for this tutorial Obviously your author name can be different and the specific version of each of your libraries might be different as well The most important changes are as follows main We have defined the output path for commonjs modules module We have defined the output path for es modules files We have defined the output directory for our entire library types We have defined the location for our library s types scripts We have defined a new script called rollup This will run the rollup package with the c flag which means use the rollup configuration file If you re not familiar with script in a package json file these are simply shorthand commands you can run by name with npm run SCRIPTNAME So to run this one will be npm run rollup Building your libraryWith these configurations in place you are now ready to run rollup for the first time and make sure your basic configuration is correct Your project structure should look like this before you run ├ーsrc│├ーcomponents │├ーButton │├ーButton tsx │└ーindex ts │└ーindex ts│└ーindex ts├ーpackage json├ーpackage lock json├ーtsconfig json└ーrollup config jsThe contents of each file should be as described above Once you have confirmed this run the following command npm run rollupIf everything has been configured correctly rollup will run without error and you will see a dist directory created in the root of your project with a structure that looks like If you received an error make sure to read it closely to try and identify the issue Double check that each of your files follows exactly the structure of the examples Depending on the amount of time passed since the publishing of this tutorial new major versions of libraries could potentially be published with breaking changes All versions of libraries numbers are visible above in the package json example in the event you need to specify a specific version Publishing your libraryNow that we ve created our component library we need a way to allow ourselves or others to download and install it We will be publishing our library via NPM through hosting on Github First before anything else we need to create a repository for our library Create a new repository on Github I have titled mine template react component library Then follow the steps to initialize your project as a git project and push to your new repository Log into Github and create a new repository called whatever you like For this example I ve titled it template react component library and it will be available for everyone to clone and use publicly You can choose to make your library private if you like methods described in this tutorial will work for private packages as well in case you are making a library for your company for example Once the repository is created we need to initialize git within our project locally Run the following command git initNext create a gitignore file in the root of the directory make particular note of the leading period that signifies this is a hidden file gitignoredistnode modulesIn our gitignore file we are adding the dist and node modules directories The reason being that both of these are auto generated directories that we create using commands so there is no need to include them in our repository Now follow the instructions on Github shown in your new repository for committing your code This repository that you have created is the one you will clone amp edit when you want to make changes and updates to your component library This is not the package itself that your as a user would install and use To configure within our project where our package needs to be published to next we need to update package json with that information package json name YOUR GITHUB USERNAME YOUR REPOSITORY NAME publishConfig registry You will be updating the field name value and adding a new field called publishConfig Note the values above in caps are meant to be replaced with your own values For example my name field value would be alexeagleson template react component library Notice the packageConfig also has your Github account name in it as well but that value does not lead with the symbol Now that we have configured out project we need to configure our local install of NPM itself to be authorized to publish to your Github account To do this we use a npmrc file This file is NOT PART OF OUR PROJECT This is a global file in a central location For Mac Linux users it goes in your home directory npmrc For Windows users it goes in your home directory as well though the syntax will be different Something along the lines of C Users YOUR WINDOWS USERNAME For more information about this configuration file read this Once you have created the file edit it to include the following information npmrcregistry YOUR GITHUB USERNAME registry npm pkg github com authToken YOUR AUTH TOKENThere are two values in caps to replace in the example above The first is YOUR GITHUB USERNAME Make sure to include the leading symbol The second is YOUR AUTH TOKEN which we haven t created yet Back to Github Go to your Github profile Settings gt Developer Settings gt Personal access tokens Or just click this linkClick Generate new token Give it a name that suits the project you are building Give it an expiry date Github recommends you don t create tokens with an infinite lifespan for security reasons but that s up to you The most important thing is to click the write packages access value This will give your token permission to read amp write packages to your Github account which is wht we need Once you are done you can click to create the token Github will ONLY SHOW YOU THE TOKEN ONCE When you close refresh the page it will be gone so make sure to copy it to a secure location perhaps a password manager if you use one The main location you need to place this token is in the npmrc file that you created replacing the YOUR AUTH TOKEN value from the example above Before you continue do one more sanity check to be sure you didn t create the npmrc file in the root directory of your actual library project This is technically an option however the reason you need to be careful is that you could accidentally commit it to your Github repository with the rest of your library code and expose your token to the public If your npmrc file is in your home directory the risk of this is minimized At this point once you npmrc file has both your Github username and access token added go back to your project directory and run the following command npm publish If you get prompted for login credentials the username is your Github username and your password is the access token you generated Congratulations You have now published version of your React component library You can view it on your Github account by going to your main account dashboard and clicking packages along the top to the right of repositories Using Your LibraryNow that your library is live you ll want to use it Note that the instructions for using your library are slightly different if you published to a private repository Everyone aside from your own machine who tries to import it is going to get a Not Found error if they are not authorized Those users also need to add a npmrc file with the same information To be more secure however you can provide those users with an access token that has only read privileges not write From this point onward we will presume you have completed that step or are working with a public repository Since we have created a component library using React and Typescript we are presuming that the consumers of our library will be using those tools as well Technically all of our type files d ts are supplemental meaning they are simply ignored if working with standard Javascript so it s not necessary to use Typescript to use our library The types are simply there if desired For our example we will use it however so that we can confirm that they are working properly We will initialize a React app using one of the most popular and simple methods Create React App Run the following command in a new directory Remember we are simulating other users downloading and installing our library so this project should be completely separate from the library itself npx create react app my app template typescriptOpen the new my app directory that is created and run npm run startConfirm that you are able to open and load the default application screen on localhost or whatever port it opens on Now comes the test for our library From the root directory of your new my app project run the following command npm install YOUR GITHUB USERNAME YOUR REPOSITORY NAMESo for my project for example its npm install alexeagleson template react component libraryPresuming your tokens and configuration are set up properly everything will install correctly if there are any issues revisit the example for the npmrc config Now open the my app project in your IDE of choice VS Code for example and navigate to the src App tsx file When you go to add a lt Button gt component if your editor supports import auto complete ctrl cmd for VS Code then you will see it automatically recognize thanks to Typescript that our library exports that button Lets add it The simplest example to update src App tsx is src App tsximport React from react import Button from alexeagleson template react component library function App return lt Button label Hello world gt export default App And when we run npm run start again there tucked up in the corner is our Hello world button And that s it Congratulations You now have all the tools you need to create and distribute a React component library using Typescript At this point you end the tutorial and continue on your own if you wish If you choose to continue we will look at how to expand our component library to include a number of extremely useful features such as CSS For exporting components with styleStorybook For testing our components within the library itself as we design themReact Testing Library amp Jest For testing our components Adding CSSBefore we do any additional configuration we ll begin by creating a CSS file that will apply some styles to our Button Inside of the Button directory where our component lives we ll create a file called Button css src components Button Button cssbutton font size px This will turn our regular Hello world button into a REALLY BIG button Next we will indicate that these styles are meant to be applied on our button component We ll be using special syntax that isn t native to Javascript but thanks to rollup and the appropriate plugins we are able to use it Update our Button tsx file with the following src components Button Button tsximport React from react import Button css export interface ButtonProps label string const Button props ButtonProps gt return lt button gt props label lt button gt export default Button Notice the import Button css that has been added Now we need to tell rollup how to process that syntax To do that we use a plugin called rollup plugin postcss Run the following command npm install rollup plugin postcss save devNext we need to update our rollup config rollup config jsimport resolve from rollup plugin node resolve import commonjs from rollup plugin commonjs import typescript from rollup plugin typescript import dts from rollup plugin dts NEWimport postcss from rollup plugin postcss const packageJson require package json export default input src index ts output file packageJson main format cjs sourcemap true file packageJson module format esm sourcemap true plugins resolve commonjs typescript tsconfig tsconfig json NEW postcss input dist esm types index d ts output file dist index d ts format esm plugins dts NEW external css Note the three new lines indicated with the NEW comments In the dts config we need to specify that css modules are external and should not be processed as part of our type definitions otherwise we will get an error Finally we need to update the version number in our package json file Remember we are publishing a package so when we make changes we need to ensure we don t impact users of previous versions of our library Every time we publish we should increment the version number package json version Now run these commands npm run rollupnpm publishOn the library consuming side my app React app from our tutorial we also need to update to get the latest version of the package The easiest way is to increment the version number in the package json file of my app It should show Increment that to and then you can update with the npm install command npm installnpm run startAnd you ll be treated to a giant button component from our library that now supports bundling CSS OptimizingThere are a couple of easy optimizations we can make with this setup The first is to add a plugin called terser that will minify our bundle and reduce the overall file size The other is to update some of our dependencies to peerDependencies With rollup s peer dependencies plugin we can tell the projects that are using our libraries which dependencies are required like React but won t actually bundle a copy of React with the library itself If the consumer already has React in their project it will use that otherwise it will get installed when they run npm install First we will install these two plugins npm install rollup plugin peer deps external rollup plugin terser save devThen we will update our rollup config rollup config jsimport resolve from rollup plugin node resolve import commonjs from rollup plugin commonjs import typescript from rollup plugin typescript import postcss from rollup plugin postcss import dts from rollup plugin dts NEWimport terser from rollup plugin terser import peerDepsExternal from rollup plugin peer deps external const packageJson require package json export default input src index ts output file packageJson main format cjs sourcemap true file packageJson module format esm sourcemap true plugins NEW peerDepsExternal resolve commonjs typescript tsconfig tsconfig json postcss NEW terser input dist esm types index d ts output file dist index d ts format esm plugins dts external css Then we move React from devDependencies to peerDependencies in our package json file package json devDependencies rollup plugin commonjs rollup plugin node resolve rollup plugin typescript types react rollup rollup plugin dts rollup plugin peer deps external rollup plugin postcss rollup plugin terser typescript peerDependencies react Adding TestsTo add tests for our components we are going to install React Testing Library and to run those tests we will install Jest npm install testing library react jest types jest save devInside of our Button directory create a new file called Button test tsxsrc components Button Button test tsximport React from react import render from testing library react import Button from Button describe Button gt test renders the Button component gt render lt Button label Hello world gt What this will do is render our button on a non browser DOM implementation and make sure that it mounts properly This is a very simple test but it serves as a good example of the syntax you can use to get started To go deeper in depth read further in the React Testing Library documentation Before we can run the tests we need to configure jest and create a test runner script in our package json We ll start with the configuration create a jest config js file in the root of the project jest config jsmodule exports testEnvironment jsdom This tells Jest to use jsdom as our DOM implementation Next update your package json file package json scripts rollup rollup c test jest Now we can run our tests with npm run testUnfortunately we are going to get an error The error is when our JSX code is encountered If you recall we used Typescript to handle JSX with our rollup config and a Typescript plugin for rollup to teach it how to do that We have no such setup in place for Jest unfortunately We are going to need to install Babel to handle our JSX transformations We will also need to install a Jest plugin called babel jest that tells Jest to use Babel Let s install them now along with Babel plugins to handle our Typescript and React code The total collection of all of them looks like npm install babel core babel preset env babel preset react babel preset typescript babel jest save devNow we create our Babel configuration file in the root of our project which tells Babel to use all these plugins we ve just installed babel config jsmodule exports presets babel preset env babel preset react babel preset typescript Now we should be able to run our tests with npm run test but there is one more problem You ll get an error saying the import of the css file isn t understood That makes sense because again we configured a postcss plugin for rollup to handle that but we did no such thing for Jest The final step will be to install a package called identity obj proxy What this does is allow you to configure Jest to treat any type of imports as just generic objects So we ll do that with CSS files so we don t get an error npm install identity obj proxy save dev We need to update our Jest config tp include the moduleNameMapper property We ve also added less and scss in there for good measure in case you want to expand your project later to use those jest config jsmodule exports testEnvironment jsdom moduleNameMapper css less scss identity obj proxy Now finally if you ve followed up step up to this point you can run npm run testAnd you will be treated to a successful test Adding StorybookStorybook is a a tool for visualizing UI components outside of your site application It s fantastic for prototyping and testing different visual states of components to ensure they work the way they are designed to without the extra overhead of having other unrelated components on the screen It also gives you an easy way to see and use your components while working on them in your library project without having to build an unnecessary testing page just to display them Initializing Storybook is very easy To set it up and configure it automatically we just run the following command npx sb initUnlike some of the other tools we have added so far Storybook much more of a batteries included kind of package that handles most of the initial setup for you It will even add the scripts to run it into your package json file automatically You will also notice that it creates a stories directory in your src directory This directory is full of pre built templates for you to use as an example of how to create your own stories I recommend you don t delete these until you become familiar with Storybook and how to write your own stories having them close by will be very handy Now let s create a simple story for our button Create a new file in the Button directory called Button stories tsx src components Button Button stories tsximport React from react import ComponentStory ComponentMeta from storybook react import Button from Button More on default export default exportexport default title ReactComponentLibrary Button component Button as ComponentMeta lt typeof Button gt More on component templates using argsconst Template ComponentStory lt typeof Button gt args gt lt Button args gt export const HelloWorld Template bind More on args HelloWorld args label Hello world export const ClickMe Template bind ClickMe args label Click me This might be a little overwhelming at first but when you go through it piece by piece you should see it s fairly straightforward The default export defines where the button will appear in the Storybook I ve chosen ReactComponentLibrary as a simple name to group our custom components together separately from the examples The Template determines which component is actually being rendered and which default args props to apply to it The Template bind objects are instances or example states of the component So in a real project you might have something like LargeButton and SmallButton Since our button is always big I ve just used an example of testing the button with two different labels If you look at your package json file you ll see that Storybook has already added a storybook and storybook build script The first will host the Storybook application locally for quick and easy testing The second one will build a static HTML JS bundle that can easily be hosted on a remote server so all members of your team can try your components For now let s just run npm run storybookYou will be greeted with a friendly interface that lets you navigate through the example components as well as your own custom button in real time Click between them to check out the different states that you have created There is plenty more to learn about Storybook make sure to read through the documentation Wrapping UpYou should now have a good understanding about how to create your own React component library Doing so can not only teach you a lot about how the Javascript package management ecosystem works but it can be a great way to make code that you use across multiple projects easily available with a simple command Please check some of my other learning tutorials Feel free to leave a comment or question and share with others if you find any of them helpful Running a Local Web ServerESLintPrettierBabelReact amp JSXWebpackThe BasicsLoaders Optimizations amp Bundle AnalysisDevServer React amp TypescriptFor more tutorials like this follow me eagleson alex on Twitter |
2021-11-17 13:22:21 |
海外TECH |
DEV Community |
Benefits of build learning management system in Node JS |
https://dev.to/casyharward/benefits-of-build-learning-management-system-in-node-js-253e
|
Benefits of build learning management system in Node JSGraduates from top universities in USA Asia and Europe continue to opt for a career in software development due to increasing demand of software web applications Today many companies offer cutting edge platforms such as Android and iOS exclusively to their employees so that they can learn technical skills at work It makes sense to build an LMS using Node js which can be used to train employees and for students for taking online courses The LMS which is built using Node js can be deployed on any of these platforms Raspberry Pi a tiny computer board that uses an SD card as storage you can run it anywhere with a USB power supply Chromebooks inexpensive laptop that has a web based Chrome OSNode js is free and open source hence you can use open source server software such as Nginx Apache to run the LMS without any cost It can be easily deployed on cloud servers like Amazon EC used by NASA Microsoft Azure and DigitalOcean popular for developers Since Node js is a very resource intensive application it gives better performance when run on cloud servers with scalable resources Running Node js applications on these platforms can be done by using pm Node server management and monitoring tool should be used for production forever script that takes care of the Node js application to be run as a daemon even after disconnecting from SSH sessionsupervisor a process manager for Unix like systems It works by polling pre configured directories for services and then starts them when they appear Benefits of using Node js to build an LMS Collaboration One of the best features of Node js is its support for real time connections it allows peers to communicate with each other making it easier for students and teachers to collaborate on their coursework Code Sharing Another benefit of using Node js as an LMS is sharing code with other programmers Since Node js is an open platform it can be used by anyone to share and reuse code Special attention should be paid to the license agreement so that unnecessary issues will not arise in future Scalability Node js has a very small memory footprint and it allows you to build scalable web applications which can handle huge traffic Node js has asynchronous non blocking input output which enhances its performance Deployment Node js is free and open source so it can be deployed anywhere without any license cost Node js applications can be deployed on Linux Windows and Mac OS X It helps in faster development as the same code base can be used for all operating systems Job Opportunities Node js is the most popular open source JS framework used by many organizations which makes it easier to find Node js developer jobs A number of companies like Walmart Ebay Paypal and Uber use Node js to develop high performance web applications for their customers Scalable Resources Node js provides scalable resources to build enterprise level web applications which can handle heavy traffic Collaboration Tools The collaboration tools available in Node js are very efficient and can be used in creating an LMS to train students teachers and employees in an effective manner Security Finally Node js has very robust security features and is designed using industry standards such as NSA which makes it extremely secure to use for mission critical applications a support community of over million developers who are willing to help others in their journey of learning node js The company also provides services that allow you to build an LMS for educational institutions It is very easy to build an LMS using Node js which can be deployed on any server of choice without paying license costs Basit Ali CognizanttConclusion Node js has many benefits of using it for building learning management system such as collaboration tools and scalable resources Developers don t need to learn different programming languages for developing applications Here is an Example Learning Management System Build with Nodejs |
2021-11-17 13:10:07 |
海外TECH |
DEV Community |
Refactoring 001 - Remove Setters |
https://dev.to/mcsee/refactoring-001-remove-setters-26cg
|
Refactoring Remove SettersSetters violate immutability and add accidental couplingTL DR Make your attributes private to favor mutability Problems AddressedMutabilitysetXXX violates good naming policies since it does not exist on the MAPPERAccidental coupling Related Code Smells Code Smell Setters Maxi Contieri・Nov ・ min read oop codenewbie programming webdev Code Smell Anemic Models Maxi Contieri・Oct ・ min read codenewbie oop beginners computerscience StepsLocate the setters usageIf you are setting essential properties move them to the constructor and remove the methodIf you need to change an accidental property it is not a setter Remove the setXXX prefix Sample Code Beforepublic class Point protected int x protected int y public Point this x this y public void setX int x this x x public void setY int y this y y Point location new Point At this momment it is not clear which points represent It is coupled to constructor decision Might be null or some other conventionlocation setX Now we have point location setY Now we have point public class Car protected int speed public Car public void setSpeed Speed desiredSpeed this speed desiredSpeed Car tesla new Car We have no speed tesla setSpeed km h Now our car runs fast After We locate setters usagelocation setX location setY If you are setting essential properties move them to the constructor and remove the methodpublic class Point public Point int x int y this x x this y y We remove the setters Point location new Point public class Car protected int speed public Car this speed km h public void speed Speed desiredSpeed this speed desiredSpeed Locate the setters usage If you need to change an accidental property it is not a setter Remove the setXXX prefixCar tesla new Car Our car is stoppedtesla speed km h We tell the desired speed We don t set anything We don t care if the car stores its new speed if it manages through the engine if the road is moving etc Type X SemiAutomaticWe should detect setters unless they use meta programming with our IDEs We can also remove them and see which tests fails if we have good coverage TagsMutability Related RefactoringsRemove GettersPass essential properties in the constructorInitialize essential properties in the constructor CreditsImage by Comfreak from PixabayThis article is part of the Refactoring Series |
2021-11-17 13:08:17 |
海外TECH |
DEV Community |
Top 10 Mobile Apps For Video Calling |
https://dev.to/iryna_hvozdetska/top-10-mobile-apps-for-video-calling-278p
|
Top Mobile Apps For Video CallingSince the world made its unexpected shift to widespread remote work a couple of years ago the value of an efficient video calling solution has increased exponentially Getting the right mobile app for video calling in your arsenal that you can confidently use for virtual meetings is increasingly important for more people and businesses than ever before That being said with so many options already on the market it can be hard to figure out which mobile app is the ideal choice for your video calling needs In this article we ll go over the best mobile apps for video calling so you can find the perfect one for you Let s get right into it What Are The Best Apps for Video Calling Video calling apps have in the last year become a crucial tool for businesses of all sizes and natures as well as for employees remote and office based Knowing and understanding which mobile app is the best for video calling and video conferencing is therefore very important but which is best RingCentralRingCentral has been one of the most popular video conferencing apps and video conference service providers in the VoIP industry for over two decades now and for good reason They provide a very well rounded experience that is versatile enough to cover the needs of almost any customer Organizing meetings is easier than ever since RingCentral lets you use one click scheduling with popular calendar solutions like iCal Google Calendar and Microsoft Outlook When you combine this with the native task management capabilities of RingCentral you re in for a treat There are also a myriad of in meeting collaboration features like a whiteboard commenting highlighting and other forms of real time annotation that really makes it feel like you re in the same room with the rest of the participants In terms of service and pricing plans RingCentral has four options to choose from In our opinion choosing the Standard tier and billing annually is the best way to get a lot of value at the right price Of course those who want unlimited cloud storage can go for the month Ultimate plan ChantyDespite being newer to the industry than most of its competitors Chanty has quickly become a popular choice for those who need a streamlined communication experience The Chanty app lets you chat call and conference with all your team members no matter where you are You can also integrate third party tools like Asana Jira Trello GitHub Zapier Google Drive and more The extensive integration support at Chanty makes it easy to use other tools in your stack in between video calls and all alongside Chanty working hand in glove and seamlessly together It s worth noting that video conferencing is only available on the paid plan but the month price is very affordable and you ll get a ton of perks like GB storage per member You ll also get a dedicated support line and the option to reduce your plan price by if you bill annually Beyond its video calling features you can also assign tasks insert code snippets and access all pertinent content through the Teambook function Overall Chanty is one of the most versatile and cost effective solutions not only for video calling but communication as a whole ZoomZoom made headlines at the start of the pandemic since it was the video calling solution that most teachers students and remote workers were choosing This led to a surge in their stock price over the course of Some of Zoom s newer features include a virtual background live transcription requests screen sharing in breakout rooms and a new immersive view that recreates the feel of in person classes or conferences The developers have also mastered the art of keyboard shortcuts making it possible to control every aspect of the meeting without ever moving your mouse Every shortcut is customizable which means you can rebind commands to a specific key based on your preferences By default you can have up to participants in your Zoom meetings Power users can get the large meetings add on that increases capacity to participants for an extra month This may be overkill for most users but it s always nice to have the option to scale up MessengerConsidering Messenger currently has billion users the odds of other participants already having the video calling app that Messenger is and being familiar with how it works is far higher compared to specialty products like RingCentral or Brosix The new Messenger Rooms feature lets you host conferences with up to people at once These free conferencing rooms also don t have any time limit which stands in stark contrast to solutions like Zoom Finally you don t even need a Facebook account to join the meeting Our only critique of Messenger is the fact that you can t add invites to third party calendar apps which can make scheduling meetings a bit trickier That said adjusting a few settings can get your Facebook events to sync with your calendar app of choice SkypeSkype was one of the first video calling apps to see global adoption it s quite impressive that they ve managed to continually improve the product and keep up with newer competitors who have sought to disrupt the market The value it provides to free users is also undeniable since you can host video conferences with up to participants without spending a single cent This makes it perfect for large companies who need to scale up but are worried a paid solution will break the bank In terms of navigation Skype s latest interface is clean and intuitive It s gone through many iterations and years of tweaking so it s not too surprising that the current version is quite good If you want a lighter version you can check out the Skype Lite app There are also a ton of Skype bots that can help optimize your workflow for efficiency and free your team members from repetitive tasks There may be more exciting choices out there but Skype has undoubtedly stood the test of time ViberViber has often been viewed as the most comprehensive mobile solution when it comes to messaging but it also gives other competitors a run for their money in the video calling app department You ll be able to send texts make calls and launch group video calls with up to people without paying a dime Despite being a free mobile app there are very few ads and they re timed in a non intrusive manner such as after a call has already ended The end to end encryption also ensures that your conversations will stay private which makes Viber one of the more reliable mobile solutions when it comes to security Viber may not have as many features as the other solutions on this list but it provides an amazing free experience SlackSlack has become the gold standard when it comes to team communication apps since it was one of the first platforms to successfully provide a one stop shop for online teams Its selection of over integrations empowers you to do basically anything on the platform Of course the well known drawback with Slack is the fact that you won t be able to view your chat history past messages while on the free plan nor will you be able to use more than integrations However the paid plans are still affordably priced and you do get a lot of bang for your buck when upgrading The most notable premium perk is the TB storage which eliminates the need for a subscription to any third party storage solution ーbut this is overkill for most You ll also be able to use as many integrations as you want and record your calls using Slack Clips ーmaking it a lot easier to review meetings at a later date Speaking of meetings you can also add automated reminders to make sure you never forget about an important call Microsoft TeamsNext up we have Microsoft Teams which feels like a combination of Zoom s video calling and Slack s text chat capabilities The free plan provides tremendous value with GB of cloud storage for your team group conferencing and unlimited chat history What s noticeably missing from the free plan is two factor authentication so if security is one of your main priorities then an upgrade would definitely be warranted In terms of UI the sidebar on the desktop version provides quick access to each part of the app Furthermore if you re already using Office in your stack then it makes a lot of sense to choose Microsoft Teams for your video calling needs since it seamlessly integrates with other Microsoft tools i e Word Excel OneNote PowerPoint and more BrosixBrosix may price its video calling plans lower than the majority of its competitors but the real appeal for users is security rather than affordability The company uses AES bit encryption and every channel on the platform has a separate encryption key to ensure maximum security Sharing sensitive files isn t an issue either as Brosix uses secure PP file sharing This comes with the downside that sharing files on the platform can be at best an inconvenience and at worst an arduous process but such is the price we pay for security The main issue that most users have with Brosix is the outdated interface that can make it tricky to navigate while also being painful on the eyes If you re a function over form type of person who values security more than a clean UI then Brosix could still be a great pick for you Our gripe with Brosix is the fact that the free plan is a glorified trial version Video calling screen sharing and file transfer ーall core features mind you ーare locked to the paid plan so you ll need to upgrade to a month plan if you want to use even the most basic functions DiscordAlthough Discord has historically been known as a platform built for gamers it s surprisingly good at video calling too To start its push to talk feature is just as useful in video conferences as it is for gaming group calls You can have up to participants in your video calls but considering the fact that Discord is a free mobile app it s hard to complain about the low capacity Many of Discord s integration focus on gaming sites such as Twitch or Xbox Live but you can also use Gmail Trello and Sheets The two main benefits that Discord has over its video calling competitors are the fact that most features are available for free and chat history isn t capped at messages There s also a browser based version of Discord so participants don t need a native installation to join How to choose a mobile app for video callingIt s one thing knowing who and what is out there by way of video calling apps However knowing and understanding which is the best piece of video calling software or the best video calling app is an entirely different challenge FeaturesFirst and foremost the decision should come down to which features you need The keyword here is need you shouldn t blow your budget on bells and whistles that you won t even use most of the time PricingNext factor in the pricing While it s true that you should never cheap out when choosing between different software solutions the app should still be at a price that fits in with your budget so you can continue to use it long term Ease of UseChoosing products with a steep learning curve just means it will take longer before you can fully utilize the solution you re paying for This being the case you should be aiming for apps with a good user experience rather than one that throws features at you without guidance Final WordsChoosing between mobile apps doesn t have to be such a daunting task It all comes down to factoring in your needs and seeing which solution has the right features for the job Furthermore you can try a few out to see for yourself which app is the best fit In the end it s hard to go wrong with any of the mobile apps listed in this article since they re all very solid platforms that provide a plethora of useful features to their users That s all for now stay safe and happy conferencing Author bio Mia Naumoska is a Chief Marketing Officer at Chanty easy to use team collaboration app with a mission to help companies boost their team s productivity Having over a decade of experience in the marketing field Mia is responsible for Chanty s overall marketing strategy managing an amazing team of marketing experts Feel free to connect with Mia on LinkedIn |
2021-11-17 13:05:51 |
海外TECH |
DEV Community |
Day 40 of 100 Days of Code & Scrum: Calling in Sick for Today |
https://dev.to/rammina/day-40-of-100-days-of-code-scrum-calling-in-sick-for-today-227c
|
Day of Days of Code amp Scrum Calling in Sick for TodayGreetings everyone Today I got sick so I wasn t really that productive I didn t get much sleep because I woke up in the middle of the night with dizziness Oh well I still managed to get some work done for my website I only coded the minimum required which was an hour Anyway let s move on to my daily report YesterdayI worked on my portfolio and services sections and I dealt with Next js lt Image gt shenanigans TodayHere are the things I learned and worked on today Next jsworked on the styling of my portfolio section for the homepage preliminary skeleton is there so I will most likely move on to the Contact form s frontend and styling ScrumI did some practice flashcards for Scrum reviewed some of the things I ve learned before Not much done this time I ll try better tomorrow Thank you for reading and I hope everyone is doing well Resources Recommended ReadingsOfficial Next js tutorialScrum Master learning pathway Scrum orgThe Scrum GuideMikhail Lapshin s Scrum Quizzes Cover ImageDavid Algás Oroquieta on Unsplash DISCLAIMERThis is not a guide it is just me sharing my experiences and learnings This post only expresses my thoughts and opinions based on my limited knowledge and is in no way a substitute for actual references If I ever make a mistake or if you disagree I would appreciate corrections in the comments Other MediaFeel free to reach out to me in other media |
2021-11-17 13:04:43 |
Apple |
AppleInsider - Frontpage News |
Apple catching up with MacBook Pro, iPhone demand, says analysts |
https://appleinsider.com/articles/21/11/17/apple-catching-up-with-macbook-pro-iphone-demand-says-analysts?utm_medium=rss
|
Apple catching up with MacBook Pro iPhone demand says analystsResearchers at investment bank Goldman Sachs report that shipping times for the new inch MacBook Pro revised inch MacBook Pro and iPhones are beginning to shrink The new inch MacBook ProAs seen most keenly with the long delays on shipping for the Apple Watch Series the new MacBook Pro models initially saw protracted wait times at launch There have also been significant delays on the iPhone Pro though those don t appear to have put buyers off Read more |
2021-11-17 13:37:21 |
海外TECH |
Engadget |
Apple's colorful new HomePod mini is on sale for the first time ahead of Black Friday |
https://www.engadget.com/apples-colorful-new-homepod-mini-is-on-sale-for-the-first-time-ahead-of-black-friday-135046185.html?src=rss
|
Apple x s colorful new HomePod mini is on sale for the first time ahead of Black FridayApple expanded its HomePod mini lineup with three new colors back in October and now we re seeing the first discount on those new options plus the classics B amp H Photo has all of the HomePod mini colors including the new orange blue and yellow configurations for each That s off their normal price and while a modest discount it s one of the best we ve seen on the tiny smart speaker Buy HomePod mini at B amp H The HomePod mini is Apple s main smart speaker now that it discontinued the original HomePod although the company still supports that speaker with software updates It s also the most compact of the smart speakers its competition being the Amazon Echo and the Google Nest Audio It s a capable device and like other Apple accessories arguably best for those who have many Apple products and use services like Apple Music In addition to its cute design we liked it for its easy setup and Siri s prowess with music controls The voice assistant promptly plays Apple Music albums playlists and tracks when you ask it too and you can AirPlay audio from almost any other app like Spotify and Prime Music to the HomePod mini So while the speaker is most convenient for Apple Music subscribers anyone can use it pretty easily Despite being the smallest of the smart speakers the HomePod mini holds its own against the Nest Audio when it comes to sound quality Mids and highs are clear and the speaker s passive radiators help deliver forceful bass Its quot computational audio quot feature helps out by adjusting sound accordingly based on what type of music you re playing You can also pair two HomePod minis together for stereo sound and they sound even better this way However if you re looking for the best sounding device at we recommend going for Amazon s Echo instead Siri also lags a bit behind Amazon s Alexa and the Google Assistant when it comes to smart home control ーit s harder to find HomeKit supported gadgets than it is to find devices that support either Amazon s or Google s voice assistants But those are relatively small cons if you re looking for a solid compact smart speaker particularly one that shines with Apple Music and works well with Apple devices And if you ve been holding out for one of the latest colors we expect B amp H s sale to be one of the better options this holiday shopping season Get the latest Black Friday and Cyber Monday offers by visiting our deals homepage and following EngadgetDeals on Twitter All products recommended by Engadget are selected by our editorial team independent of our parent company Some of our stories include affiliate links If you buy something through one of these links we may earn an affiliate commission |
2021-11-17 13:50:46 |
Cisco |
Cisco Blog |
Cyber investments: Are you just winging it? |
https://blogs.cisco.com/government/cyber-investments-are-you-just-winging-it
|
cyber |
2021-11-17 13:00:56 |
Cisco |
Cisco Blog |
From Football to Cisco – Dreams Can Change |
https://blogs.cisco.com/wearecisco/from-football-to-cisco-dreams-can-change
|
cisco |
2021-11-17 13:00:38 |
金融 |
RSS FILE - 日本証券業協会 |
会長記者会見−2021年− |
https://www.jsda.or.jp/about/kaiken/kaiken_2021.html
|
記者会見 |
2021-11-17 13:30:00 |
ニュース |
BBC News - Home |
Liverpool bomber had been planning attack since April |
https://www.bbc.co.uk/news/uk-england-59317136?at_medium=RSS&at_campaign=KARANGA
|
police |
2021-11-17 13:47:30 |
ニュース |
BBC News - Home |
Queen seen in first engagement since Cenotaph absence |
https://www.bbc.co.uk/news/uk-59322086?at_medium=RSS&at_campaign=KARANGA
|
remembrance |
2021-11-17 13:45:24 |
ニュース |
BBC News - Home |
Archbishop Justin Welby sorry for abuse-accused bishop comment |
https://www.bbc.co.uk/news/uk-59320140?at_medium=RSS&at_campaign=KARANGA
|
chichester |
2021-11-17 13:21:46 |
ニュース |
BBC News - Home |
Britney Spears discusses life after conservatorship |
https://www.bbc.co.uk/news/entertainment-arts-59322526?at_medium=RSS&at_campaign=KARANGA
|
spears |
2021-11-17 13:29:13 |
ニュース |
BBC News - Home |
Sale to sign England fly-half Ford from Leicester in summer |
https://www.bbc.co.uk/sport/rugby-union/59320876?at_medium=RSS&at_campaign=KARANGA
|
england |
2021-11-17 13:02:56 |
LifeHuck |
ライフハッカー[日本版] |
薬剤を使わず、音と光で虫除け! アウトドアで使いたい極小ガジェット「MOSOUT」 |
https://www.lifehacker.jp/2021/11/245136-machi-ya-mosout-review.html
|
mosout |
2021-11-17 23:00:00 |
LifeHuck |
ライフハッカー[日本版] |
インクでシャツを汚した人は必読。胸ポケット用ペンケースの便利さを教えたい【今日のライフハックツール】 |
https://www.lifehacker.jp/2021/11/245567lht-pencase.html
|
高品質 |
2021-11-17 22:05:00 |
仮想通貨 |
BITPRESS(ビットプレス) |
BlockChainJam運営委員会、11/27にオンラインで「BlockChainJam2021」開催 |
https://bitpress.jp/count2/3_15_12892
|
blockchainjam |
2021-11-17 22:52:29 |
仮想通貨 |
BITPRESS(ビットプレス) |
東京ハッシュ、11/22-1/14まで「セミナーに参加して取引開始で10万円をキャッシュバック」実施 |
https://bitpress.jp/count2/3_14_12891
|
開始 |
2021-11-17 22:22:52 |
コメント
コメントを投稿