投稿時間:2022-02-21 22:31:05 RSSフィード2022-02-21 22:00 分まとめ(36件)

カテゴリー等 サイト名等 記事タイトル・トレンドワード等 リンクURL 頻出ワード・要約等/検索ボリューム 登録日
js JavaScriptタグが付けられた新着投稿 - Qiita InDesign JavaScript XML 絶対XPathを取得 https://qiita.com/kohakunekotarou/items/92711d81c4f675b2bb94 InDesignJavaScriptXML絶対XPathを取得絶対XPathを取得するスクリプトは、これで良いのかな・・・このスクリプトを利用して起こった不具合の責任は取れません。 2022-02-21 21:34:06
js JavaScriptタグが付けられた新着投稿 - Qiita VueJSでのTouchイベント処理をむりやり実現する https://qiita.com/shigeta1019/items/23a78e5d00d641b0384c 変数が足りないので、普通に考えると無理なのですが、むりやり経験則を見つけて実装しています。 2022-02-21 21:09:26
AWS AWSタグが付けられた新着投稿 - Qiita AWS認定ソリューションアーキテクト(SAA)合格に必要な知識 https://qiita.com/Potof_/items/85c2977f1532ce1b7516 本番用、開発用かつマルチVPCがよくあるパタン各リージョンにはつまで作成可能つはデフォルトで作成されるので基本的にはつもっと欲しい場合はAWSへ上限緩和申請をするVPCの中にsubnetを作るsubnetはAZに配置するsubnetは作るたびに個のIPアドレスをリザーブするので使えないVPC内では自由に通信可能ルーティングノウハウ小さいsubnetより大きいsubnetを検討する以上小さすぎるとオートスケールなどでIP枯渇しかねないAZごとにパブリックとプライベートを割り当てるとよいCIDR分割してVPCを作成するが、一つのVPCに対して追加のCIDR範囲を割り当てることもできるAWSConfigAWSリソースの設定変更をモニタリングする変更を検知するとSNSで通知できるAmazonAuroraServerlessforAuroraMySQLAmazonAuroraのオンデマンドでAutoScalingしてくれる性能無限容量を木にせず利用可能で、DBがActiveのときだけお金がかかるSingleAZ従量課金なので、全く使われない可能性や突然多数のリクエストが発生する場合などに有利AWSStorageGatewayボリュームゲートウェイiSCSIでデバイスマウントファイルゲートウェイSをNFSやSMBで利用できるオンプレ側にGW用のVMマシンか、物理的なマシンHWアプライアンスを用意するAmazonEFSライフサイクル管理一定期間アクセスがないファイルを、標準IAまたはゾーンIAへ移行できるライフサイクルポリシーが使えるメカニカルシンパシーワークロードごとに必要なサービスを選定できること例えば、DBもRDBだけではなく、利用する機能ワークロードごとに必要なデータ構造を検討して適切なサービスRDBorNoSQLを選定するリージョン別エッジキャッシュCloudFrontでデフォルト使用エッジロケーションに保存する必要があるほど頻繁にアクセスされないコンテンツを置くENIセカンダリENIを追加すると、プライマリサーバがダウンした際にスタンバイサーバにENIをアタッチすることができる要はVIPのようにActiveStandbyを構成できるNWだけアダプタを増やすことは意味がない帯域も増えない冗長化の意味もないFWルールがめんどうになるecには可能な限りホスト名やipは固定化しないElasticIPアドレス固定IPセキュリティグループファイアウォールENI単位で設定するルールはステートフルデフォルトは、インバウンドはすべてブロックアウトバウンドはすべて許可ACL制御subnet間でのファイアウォールデフォルトはすべてのインバウンド、アウトバウンドを許可ルールはステートレス戻りの通信も明示的に開ける必要があるネットワーク設計の考え方基本的にはセキュリティグループで制御する必須なのでACLはオプション制御で基本的には使わないインターネット接続インターネットGWが必要プライベートsubnetから外に出ていくときはNATGW外から接続したいDNATときはNATインスタンスVGWVPNGatewayインターネット経由接続のVPNIPsecAWSDirectConnectDX閉域網を経由したVPN接続DXロケーション提供事業者がある顧客拠点ltgtDXロケーションでルータを設置して契約するDXロケーションまで距離が遠い東京、大阪、豊洲場合は、DXパートナーという中間業者を利用するISPの閉域網を利用してDXロケーションまでつなぐVPN経路冗長化メイン回線はDX、バックアップはVGWDX本は高いVPCピア接続VPC間接続リージョン内、リージョン間をサポートIP空間は重複できないCIDRを分けるVPC間で一つしか作成できないが、内部的に冗長化されているピアをまたいだ通信はできないonの関係のみフルメッシュ型のネットワークはできない帯域制限なしリージョンをまたいでもインターネットにはでていかないAWSTransitGatewayVPCピア接続より少し高いが高機能スター型のネットワークを構成できるすべてのNWを接続するHubとして機能するルーティングTransitGatewayルートテーブルVPCごとのルートテーブルVPCエンドポイントVPCの外にいるマネージド・サービス系にプライベートに接続するAWSバックボーンNWと接続するゲートウェイエンドポイント無料S、DynamoDBインターフェイスエンドポイント有料その他のサービスSNSやCloudTrailなどエンドポイントはVPC以外のアドレスからは受け付けられないオンプレからVPN経由で接続したい場合などはSNATをする必要があるプロキシファームELBSupportHTTPHTTPSTCPSSLALBApplication層HTTPHTTPSのバランシング通常のLBNLBNetwork層TCPUDPTLSのバランシングGLBIPSやIDSへ転送可能ConnectionDraining予閉塞機能削除するECインスタンスを予閉塞状態にし、セッションがなくなれば削除するRouteDNS名前解決だけではなく、ヘルスチェック機能を保持していることからリージョン間のFOをさせることができるALBへのIPアドレスルーティングシンプルルーティング一つのIPルーティング複数値ルーティングDNSレコードに複数IPを登録して生きているIPだけ返却する加重ルーティング重み付けをして振り分けバランスをコントロールするレイテンシールーティングレイテンシーがもっとも低いIPを返す地理的に有効IAMIAMプリンシパル認証IAMユーザデフォルトはアクセス許可なしすべての認可なしフェデレーティッドユーザIAMロールアクセス許可認可APIコールに対する制御をするハイパーバイザより上は制御できないつまり、OS認証やAP認証では利用しないリクエスト時に評価する順序拒否の評価→許可の評価→Any拒否ポリシーリソースベースポリシーSはならOKのような感じSTSIAM情報を操作するためのインターフェイスSTSIDブローカを利用すると、社内のADと連携して一時的な認証情報を発行することができるAmazonCognitoユーザプール認証IDプール認可AWSOrganizations複数のAWSアカウントを組織Organizationsでまとめられる請求の一元化ControlTower無料AWSOrganizationsをAWS推奨の形でセットアップできるCostExplorerコスト最適化利用状況の傾向を分析してくれるSavingsPlansなどの推薦もしてくれるAmazonCloudWatch監視CloudWatchLogsログ監視CloudWatchアラーム通知EventBridge昔はCloudWatchの一つだったイベント監視AWSCloudTrail監査監視ログ保管先はSログはデフォルトで暗号化済みSサーバ暗号化ログが改ざんされていないことを保証するための整合性チェック機能ありAmazonAthena分析基盤CloudTrailのJSONに対してSQLで取得して分析したりできるVPCフローログ有効にしておくとトラフィックを記録してくれるGuardDuty監視結果を機械学習を用いて不審なアクティビティを検出、通知するAutoScalingELBと組み合わせて使うAZは分散してくれる台数制御方式必要なキャパシティ自動制御で必要な台数を計算する最小キャパシティAZの数とAutoScalingグループを同じにすると分散配置してくれる最大キャパシティ運用中に見極めるが、無限ループ等で無限にリソースを使っていかないように必ず設定するAWSCloudFormationIaaCSにUploadするJSONorYAMLDeletionPolicyを有効にするとデータを保持するようなものを変更する場合SRDS等は、スナップショットを取得して変更削除してくれるスタックは適切に分割して作っていくとよいAWSElasticBeansTalkWebAppとMQWakerAppのインフラ含めた一連を提供する利用者はコードをアップロードするだけAWSOpsWorksChefpuppetのレシピを利用可能マネージドサービスAWSCloudFrontCDNリージョン外にあるエッジロケーションにあるTTLCache保持時間secビヘイビアでパスに基づいて複数のオリジン指定ができるapiAPIGWとかimgSとか特定の国からのリクエストを除外したいときはCloudFrontが必須ALBだけではできないAWSShieldDDoS保護AWSCloudFrontを利用するとShieldStandardが無料でついてくるShieldAdvancedだとDDoSで跳ね上がったコストをAWSが補填してくれるAmazonElastiCacheインメモリのデータストアRDSのキャッシュにも使えるフルマネージドサービスRedisorMemcachedRedisシングルスレッドマルチノードで動くこともできるMemcachedマルチスレッドノードで動く可用性はないAmazonSQSキューのマネージドサービス標準キュー分散処理最低回の配信をする複数回送る可能性がある冪等性が必要FIFOキュー回のみの処理パフォーマンスは標準キューより落ちる整合性を保って非同期処理にしたいとき可視性タイムアウトメッセージ取り出したらロックを掛ける同じメッセージを複数インスタンスで処理しないようにするときに使うキューの受信待機時間空のメッセージを取得する可能性を下げたいときに待機時間を増やすAmazonSNS通知トピックに紐づくサブスクライバを管理できるトピックにメッセージを渡すと登録済のサブスクライバへ連携するEMail、HTTPHTTPS、SMS、SQS、LambdaSQSとSNSSNSでSQSへキューイングする仕組みが多いSQSはパブサブができないので、SNSでサブスクライバとしてSQSを登録することでキックできる画像アップロード後の圧縮とかはSUploadをSNSでイベントをひろい、SQSをキックするAmazonMQMQのマネージドサービスActiveMQすでにMQを使っている人向けから作るのであればSNSSQSが良いAmazonECSコンテナのオーケストレーションコンテナ実行管理AmazonオリジナルAmazonEKSコンテナのオーケストレーションコンテナ実行管理KubernetesAmazonECRコンテナのリポジトリサービスAWSFargateフルマネージド型のコンテナサービスコンテナのホスティングサービスECでコンテナを動かすのではなくおまかせしたいのであればFargateコンテナのパタンECSECECSFargateEKSECESKFargateAWSLambdaステートレスFaaSFunctionasaService最大分間の実行利用時間課金AWSStepFunctions複数のLambdaを連携できる直列、並列ステートマシンLambda等をひとつのFunctionを大きくするのではなく、細かく作ってそれを連携するステートを保持することができるRPORTOAmazonS複数AZ、単一リージョンクロスリージョンレプリケーションを利用することもできるAmazonSGlacier複数AZ、単一リージョンクロスリージョンは利用できないAmazonEBS単一AZポイントインタイムボリュームスナップをSに保管AWSSnowball物理的に複製するAWSDataSyncEFSFSSオンプレでデータをレプリケートできるAmazonRDS基本的には単一AZリードレプリカをマルチAZと組み合わせるクロスリージョンはバックアップを移動させておくAmazonAuroraリードレプリカをクロスリージョンで構成可能AmazonDynamoDBグローバルテーブルを使う非同期でクロスリージョンへコピーされるAWSBackupバックアップ管理を一元化できるだいたいのAWSサービスで利用可能バックアップリストアのレベル安い順SバックアップSリストアバックアップをSに入れておくパイロットライトDR側でWebAP系のECは停止させておくが、DBだけレプリケートさせておく。 2022-02-21 21:23:40
AWS AWSタグが付けられた新着投稿 - Qiita Notebook上からEmail通知を送る (AWS SNS編) https://qiita.com/ktmrmshk/items/84c6a38cce0e7b11cd05 この記事では、以下のドキュメントの内容に基づいて、AWSSimpleNotificationServiceSNSを使用してEmail通知をNotebook上で実装する方法を見ていきます。 2022-02-21 21:22:26
AWS AWSタグが付けられた新着投稿 - Qiita 【AWS】ALBのみでメンテナンスページを作成する by CloudFormation https://qiita.com/chibiharu/items/7995b2a661ad1863db9e 【AWS】ALBのみでメンテナンスページを作成するbyCloudFormationはじめにLightsailで個人ブログをホスティングしているのですが、メンテナンス時はWordPressの標準機能でメンテナンスページを表示させていました。 2022-02-21 21:00:47
GCP gcpタグが付けられた新着投稿 - Qiita terraform でCloudRun のPR駆動CloudBuildトリガーを作成する https://qiita.com/kotap15/items/bd5427544ec7bd9d63b9 terraformでCloudRunのPR駆動CloudBuildトリガーを作成する概要CloudRunのコンソール継続的デプロイから選択して作成できるGitHubのソースコードトリガーをterraformにてIaCしてみた話背景CloudRunは年月頃にGoやPythonのような特定の言語においてDockerfileを必要とせずソースコードから直接デプロイができるようになりました。 2022-02-21 21:51:21
技術ブログ Developers.IO 箱の中のカブトムシからみるすれ違いの原因 https://dev.classmethod.jp/articles/the-beetle-in-a-box/ 賛否両論 2022-02-21 12:58:00
技術ブログ Developers.IO AWS CDKのNodejsFunctionでsource mapを使う https://dev.classmethod.jp/articles/aws-cdk_nodejsfunction_source-map/ vartaskindexjs 2022-02-21 12:48:01
海外TECH MakeUseOf The Best Xbox Series X Headsets for Immersive Gaming https://www.makeuseof.com/best-xbox-series-x-headsets/ console 2022-02-21 12:16:13
海外TECH DEV Community How To Run Your First CI/CD Pipeline Using GitLab CI/CD? | GitLab CI/CD Tutorial | Part IV https://dev.to/lambdatestteam/how-to-run-your-first-cicd-pipeline-using-gitlab-cicd-gitlab-cicd-tutorial-part-iv-4g3n How To Run Your First CI CD Pipeline Using GitLab CI CD GitLab CI CD Tutorial Part IVThis video explains how to configure a CI CD pipeline with GitLab CI CD using LambdaTest Start FREE Testing Run Selenium Tests In GitLab CI crossbrowsertesting lamdatesttunnel vm seleniumscripts remotebrowsers localtunnel CICDpipelineThis tutorial series answers the following How do I run a GitLab pipeline What is CI CD pipeline in GitLab How do you run CI CD pipeline How do I run a GitLab pipeline locally The project that we ll be using for this GitLab CI CD tutorial is the HourGlass which is a MERN Mongo Express React amp Nodejs stack application It s a simple time management application of that time As best practices change every month Some of these might have been updated but most of these are still relevant It is a full production scale and production style development repository Testing web application URL Start LambdaTest GitLab Integration Today 2022-02-21 12:47:22
海外TECH DEV Community Pygmy Collection Application Part 3 (Crash service) https://dev.to/basavaraj_navi/pygmy-collection-application-part-3-crash-service-19j2 Pygmy Collection Application Part Crash service IntroductionIn my last article I have explained how to integrate account kit finance application Have a look into Pygmy collection application Part Account kit And Integration of Huawei Ads kit have look into Intermediate Pygmy Collection Application Part Ads Kit What is Huawei Crash service In this article we will learn how to integrate Crash services of AppGallery in Pygmy collection finance application Huawei Crash is a realtime crash reporting tool that helps in tracking prioritizing and fix stability issues that compromise the quality of your app Crashlytics also helps in troubleshooting and saves the debugging The AppGallery Connect Crash service provides a powerful lightweight solution to app crash problems With the service you can quickly detect locate and resolve app crashes unexpected exits of apps and have access to highly readable crash reports in real time without the need to write any code To ensure stable running of your app and prevent user experience deterioration caused by crashes you are advised to monitor the running status of your app on each device which is the key The Crash service provides real time reports revealing any crash of your app on any device In addition the Crash service can intelligently aggregate crashes providing context data when a crash occurs such as environment information and stack for you to prioritize the crash easily for rapid resolution Why do we need the crash service Although apps have gone through rounds the tests before release considering the large user base diverse device models and complex network environment It s inevitable for apps to crash occasionally Crashes compromise user experience users may even uninstall app due to crashes and your app is not going to get good reviews You can t get sufficient crash information from reviews to locate crashes therefore you can t resolve them shortly This will severely harm your business That s why we need to use the crash services in our apps to be more efficient How to integrate Crash ServiceConfigure the application on the AGC Client application development process Configure application on the AGCFollow the stepsStep We need to register as a developer account in AppGallery Connect If you are already a developer ignore this step Step Create an app by referring to Creating a Project and Creating an App in the ProjectStep Set the data storage location based on the current location Step Generating a Signing Certificate Fingerprint Step Configuring the Signing Certificate Fingerprint Step Download your agconnect services json file paste it into the app root directory Step Enable Crash services Client application development processFollow the steps Step Create an Android application in the Android studio Any IDE which is your favorite Step Add the App level Gradle dependencies Choose inside project Android gt app gt build gradle apply plugin com android application apply plugin com huawei agconnect implementation com huawei agconnect agconnect crash It is recommended that you integrate the APM SDK to further locate whether an app crash is caused by an app event or behavior such as ANR launch and network request implementation com huawei agconnect agconnect apms x x x xxx implementation com huawei hms hianalytics Root level gradle dependencies maven url classpath com huawei agconnect agcp Step Add permission in AndroidManifest xml lt application gt lt uses permission android name android permission INTERNET gt lt uses permission android name android permission ACCESS NETWORK STATE gt lt application gt Step Initialize Crash Service activity or application classStep Build ApplicationEnable Crash ServiceAGConnectCrash getInstance enableCrashCollection true Test Crash service AGConnectCrash getInstance testIt context Set User IdAGConnectCrash getInstance setUserId Set Log without log levelAGConnectCrash getInstance log set info log Set Log with Log LevelAGConnectCrash getInstance log Log WARN set warn log Set custom Key pair value AGConnectCrash getInstance setCustomKey mobileNumber Phone number is empty Add a key value pair of the string type AGConnectCrash getInstance setCustomKey UserName Basavaraj Navi Add a key value pair of the boolean type AGConnectCrash getInstance setCustomKey isFirstTimeUser false Add a key value pair of the double type AGConnectCrash getInstance setCustomKey doubleKey Add a key value pair of the float type AGConnectCrash getInstance setCustomKey floatKey f Add a key value pair of the integer type AGConnectCrash getInstance setCustomKey intKey Add a key value pair of the long type AGConnectCrash getInstance setCustomKey longKey L Record ExceptionSimpleDateFormat format new SimpleDateFormat PygmyConstants DOB FORMAT try Date date format parse dob customerEntity setDateOfBirth date System out println date catch ParseException e e printStackTrace AGConnectCrash getInstance recordException e Result Tips and TricksMake sure you added agconnect service json file Add internet permission in AndroidManifest xml You can also download the crash reports ConclusionIn this article we have learnt what the Crash service is And how to integrate the crash service How to record log with log level and without log level And also we have learn how to record exception ReferenceHuawei Crash Service 2022-02-21 12:43:00
海外TECH DEV Community Environment Variables, Cached Dependencies, Triggers & Parameters in GitLab CICD | Tutorial Part III https://dev.to/lambdatestteam/environment-variables-cached-dependencies-triggers-parameters-in-gitlab-cicd-tutorial-part-iii-4hai Environment Variables Cached Dependencies Triggers amp Parameters in GitLab CICD Tutorial Part IIIThis video explains the Environment Variables Cached Dependencies Triggers and Parameters in GitLab CI CD Start FREE Testing Run Selenium Tests In GitLab CI Want to get started with CICD Well here is a detailed CI CD Tutorial by LambdaTest answers the following What triggers a Gitlab pipeline How do you trigger CI CD pipeline What is Gitlab trigger How do you declare a variable in Gitlab CI Yml What is the environment in Gitlab CICD How do you set environment variables in Gitlab How do you set environment variables in Gitlab CI Yml Where are Gitlab environment variables What is cache in GitLab CI What is CI CD pipeline GitLab What are artifacts in GitLab CI Does GitLab have CICD 2022-02-21 12:42:11
海外TECH DEV Community [FR] Tech-Philosophy - La journée d'un développeur logiciel https://dev.to/joaofelipefaria/fr-tech-philosophy-la-journee-dun-developpeur-logiciel-167g FR Tech Philosophy La journée d x un développeur logicielVous êtes vous déjàdemandéce que fait un développeur de logiciels dans sa journée Vous vous demandez ce que doit faire votre ami assis devant un ordinateur Quel est ce texte incompréhensible qu ils écrivent Ou quelle sera ma routine quotidienne dans ma future carrière Pour quoi payent ils ces gens Je fais ça depuis ans et je code un peu plus longtemps que ça Et je vais essayer de vous dire génériquement ma routine REMARQUES Les temps de pandémie dans lesquels cet article est écrit et les différences géographiques et technologiques entre les projets ont bien sûr un grand impact sur la routine je vais essayer de l abstraire autant que possible Je suis maintenant développeur full stack Java Angular dans l une des plus grandes compagnies d assurances au monde basée au Luxembourg UE Et je suis surtout un développeur JAVA SOA BPM FRONT END et désolépour “l égoïsme je parle surtout de ma routine ici Cela peut être différent si vous êtes un testeur un manager ou un administrateur de base de données par exemple Heures de Travail heures par jour du lundi au vendredi h semaine C est ce qu on appelle le temps plein de légères variations peuvent se produire des contrats abusifs peuvent se produire des heures supplémentaires jamais payées peuvent se produire mais heureusement heures par semaine ont étéma période complète J avais travaillésur un tas de projets en gérant mon temps mais c est un cas différent Et parfois j ai travailléen demi période heures Lorsque je travaille sur des projets et dans de grandes entreprises j ai des rencontres avec d autres personnes Oui j ai des contacts avec les gens directement pas par l intermédiaire de l ordinateur quelques fois par jour Et oui le temps de la pandémie a beaucoup changer cela Ces réunions m obligent àêtre au bureau àdes heures précises Généralement entre h du matin et h de l après midi je dois être au bureau ou en ligne et disponible lorsque je travaille àdomicile WFH Que fais je Un développeur de logiciels ne code pas àtemps plein sans arrêt ne prenant que quelques pauses pour les besoins humains de base et beaucoup de pauses pour le café NON Au moins du temps productif devant l ordinateur travail se passe dans les tâches de gestion Et je dirais que plus je suis senior moins je passe de temps à taper du code Tout d abord je pourrais résoudre les problèmes de manière plus précise et être plus productif pour construire du code “boilerplate Mais aussi parce que je pourrais accumuler d autres tâches que je partagerai avec vous ci dessous Commence de la journée Après s être réveilléil y a minutes être maintenant dans mon carnet avec une tasse de caféou si je suis en train d arriver au bureau après deux heures de bus Certains bureaux oùj ai travailléavaient leur rituel en arrivant comme dire bonjour àchacun ou àchacun de votre équipe ou même avoir un petit déjeuner àdisposition Tiens moi au courant Je commence ma journée en mettant àjour les informations sur l entreprise et sur le projet Cela se fait principalement dans ma boîte aux lettres d abord puis dans mon outil de gestion des tâches JIRA par exemple Dans le premier vous remarquerez par exemple certains changements de contrat possibles ou s il y aura des entraînements incendie ce jour là ou si tout a explosé comme les alertes de la période pandémique en et début Ensuite en vous échauffant au code vous vérifiez vos tâches ce jour là ce qui se passe principalement dans votre outil de gestion des tâches JIRA c est le plus utiliséaujourd hui A la fin de la journée précédente j ai fait une TODO list pour demain Cela facilite beaucoup la planification personnelle le matin Alors maintenant je suis en train de revoir mon JIRA pour vérifier si rien n a changé Donc après cela je pourrais dire que je travaille sur un ticket spécifique c est à dire une exigence spécifique qui a étéouverte dans mon outil de gestion des tâches dans le cas JIRA c est un ticket Travaillons Travailler sur le ticket n est pas seulement une question de code Je dois toujours faire des travaux environnementaux En fait dans la plupart des entreprises au cours des premiers jours j installais et testais principalement l environnement local dans lequel je travaillerai Cela consistera dans la plupart des cas au moins en un IDE Mais je peux aussi avoir une base de données client et ou le SGBD lui même des serveurs d applications des conteneurs des VPN et bien d autres utilitaires qui pourraient m aider ou compliquer la vie CONSEIL Il est toujours sage de garder une trace si vous passez plus de de votre temps productif àvous soucier de l environnement qui pourrait affecter votre productivité Avec l environnement prêt nous prenons une tasse de café et allons au code C est làque la magie opère Maintenant nous copions du code incompréhensible àpartir de stack overflow et les choses fonctionnent comme par magie NOON Je blague ici Même si certains pourraient le faire La plupart du temps je passe un très bon moment àanalyser le code Regarder l IDE parcourir d innombrables fichiers pour trouver oùle problème ou le développement àfaire pourrait vraiment être placé Après cela je pourrais aussi avoir besoin de debug quelque chose Cela signifie qu avec un environnement parfois complexe déjàen place et en cours d exécution j exécute le code làoùje pense que le problème est placé puis d une manière contrôlée je peux obtenir des informations sur l exécution du code Le debug peut se faire àl aide d un IDE convivial ou avec des sorties de console et des fichiers log le plus simple ne sera toujours disponible je suis désoléde vous le dire Lorsque le debug m indique oùfaire je ne sais peut être pas encore quoi faire Et c est làque les communautés comme stack overflow aident tellement tous les programmeurs Avis Mais vous devez toujours comprendre le code que vous essayez de copier et coller et l adapter aux normes du projet sur lequel vous travaillez Ou vous aurez un développeur senior en colère contre vous Alors je code un peu Honnêtement ici j ai l impression que plus je suis senior moins j écris de code J ai eu tellement de tâches qui ont pris jours pour trouver le problème et quelques lignes de code faites en minutes qui ont résolu le problème De plus il arrive que le code ne fonctionne pas du premier coup Je vais donc parcourir plusieurs fois le cycle d analyse de debug de recherche et de codage Jusqu àce que voila Mon bug est résolu ou Le nouvel écran est créé ou J ai fait tout ce que mon manager m a dit de faire et je ne serai pas viré Laissez moi prendre mes affaires et rentrer àla maison NOON J ai d abord une période complète àfaire c est douloureux parfois Deuxièmement le travail sur cette demande n est pas terminé Encore àpropos de ce ticket je passe aux activités de livraison libération Cela peut aussi prendre du temps Et si plus de pas bon non plus Àce stade vous devez AU MOINS valider votre code dans un outil de contrôle de code source les plus utilisés de nos jours sont basés sur GIT ou SVN Mais la publication de votre code peut nécessiter des tâches plus complexes sur le GIT ou SVN comme la création de branches le merge la création de pull requests Et cela pourrait devenir fou prenant beaucoup de mon temps Ensuite la partie technique est faite mon code est attaché au système Mais je dois encore informer mon manager que cela est fait Cela se fait principalement avec un outil de type scrum et j utilise JIRA aujourd hui Alors j y vais je mets des commentaires sur ce qui a étédéveloppéet je change le statut de mon ticket en terminé àtester ou livré ou àapprouver ou tout ce que le processus de développement exige Autres tâchesCertaines autres tâches non officielles peuvent avoir lieu pendant la journée Et j essaie de toujours avoir un œil sur eux pour en participer Ces tâches ne sont pas directement liées aux tâches que je me suis assignées dans JIRA mais elles comportent points importants Ils aident l entreprise pour ce pour quoi je travaille me donnant ainsi une certaine visibilité Ils aident les autres àmieux travailler il est toujours bon d aider les autres et le partage des connaissances est une excellente opportunitéd apprentissage Des tâches telles que aider un collègue avec un doute technique dans un sujet que je maîtrise aider l équipe de production àdécouvrir la raison des problèmes de production qui dans le cas auront toujours la priorité aider les domaines de support tels que les RH ou le marketing dans les connaissances techniques pour les campagnes les spécifications de produits ou pour décrire les rôles techniques SocialiserEn effet il ne s agit pas seulement de bits et bytes Il y a donc des vrais personnes impliquées également dans certaines parties d une routine d un développeur de logiciels Au bureau il est courant de passer quelques minutes àsocialiser avec d autres personnes àproximitéde la machine àcafé De nos jours je vis loin de mon pays natal avec beaucoup de nouvelles langues àapprendre donc je pars toujours avec une conversation sur la météo J essaie toujours d utiliser des opportunités comme les rencontres dans les couloirs ou les lignes de porte ou d ascenseur pour parler avec les autres au lieu de me mettre àmon téléphone ou de me refermer sur moi même Je crois que le partage personnel et l amitiésont d une grande aide au bureau et dans l environnement d équipe Je pense toujours qu il est plus facile de travailler avec quelqu un qui j ai une relation amicale C est parfois délicat de gérer la barrière professionnelle personnelle mais c est un point pour un autre article Termes techniques et liensSi vous ne connaissez pas certains des termes techniques ou outils mentionnés ici vous pouvez suivre les liens ci dessous JIRAGITSVNSCRUM Terminer la journéeUne fois qu un ticket ou une tâche est terminé je passe au suivant puis au suivant et c est ma journée Jusqu àla fin de ma période de heures Àla fin de la journée je fais quelques tâches de fermeture Liste TODO pour demain Passez en revue les objectifs hebdomadaires ou même mensuels Je pourrais écrire un journal de la journée ou quelque chose comme ça si j ai l impression de travailler sur de nombreux projets différents Cela a étéutile àplusieurs reprises dans mes expériences passées Prenez le dernier café  Rest Rest REpresentational State Transfer Puis après heures de tout ça je peux enfin me reposer Je me repose pendant minutes parce que j ai maintenant un travail de nuit de demi période heures mais ne faites pas ça les gens C est trop 2022-02-21 12:38:09
海外TECH DEV Community How to Become A Production Hero as Developer with Refine in 2022 https://dev.to/pankod/how-to-become-a-production-hero-as-developer-with-refine-in-2022-1dcm How to Become A Production Hero as Developer with Refine in With a new future in our careers as software developers We will meet new technologies this year and continue to pursue innovations as before Production Oriented Approach Production Developing is often a real challenge It is necessary to follow the innovations and use all these in the right place at the right time and again in the right way Sometimes all these prevent us from producing or slow down our production process It is our responsibility to ensure that technology serves us in a development environment where we prioritize production Is speed everything So is speed exactly everything main components affect production in traditional production methods Speed QualityTime Can you imagine what a development environment would be like where we provided all components at the same time Briefly RefineA React based headless framework for building data intensive applications in no time What gives us Refine The word headless is underlined above So Refine drop you into UI heaven meanwhile you can also use Antd library support RoutingReact RouterReact LocationNext js Router Data ProviderRest APIGraphQLNestJs CRUDAirtableStrapiStrapi vStrapi GraphQLSupabaseHasuraAppwriteFirebaseAltogic State ManagementRefine uses React Query for all state management processes Authentication amp AuthorizationAuthentication and authorization processes are performed with the auth provider inInternationalization Yes of course Both for React and Next RealtimeRealtime support to your app via liveProvider there s even an example made for you with Ably What makes Refine Unique Refine stands out with its wide routing access control options supporting the ability to use any UI Framework and NextJS SSR support when compared to React Admin retool adminBro Look at your productivity without worrying about is everything on the wayAs you can see you can find all the support you need to develop a data intensive application in Refine The best part is Refine is open source All you have to do is focus on your idea and project and experience the confidence of developing with React based Refine If you want to take a closer look at RefineIf you say you don t want to be alone while developing a product the community is ready to meet you Click for the Discord link 2022-02-21 12:30:37
海外TECH DEV Community How to Enable Flutter Language Experiments? https://dev.to/pankajdas0909/how-to-enable-flutter-language-experiments-37le How to Enable Flutter Language Experiments If you need to create a native Android and iOS app for your business you can use Flutter It is an open source framework for developing a mobile application Initially the programming language of Flutter planned to replace JavaScript But now Flutter is one of the popular programming languages to create iOS and Android applications Hiring the trustworthy Flutter Agency helps you create native apps for your business They have certified experts to provide the most excellent mobile application development service Besides the professionals can resolve the error that occurs in the Flutter Recently Google utilized Flutter for different Google Assistant modules Explore dart type systemDart can be classified into two categories such as non nullable and nullable type The nullable type has a particular operator which can help the developer work smoothly On the other hand this type can consist of null or value Non Nullable dart types only contain values and nulls don t permit The hierarchy dart type has an object at the top and never at the bottom The code estimates the never that aborts the program or throws exclusion Process to enable Flutter language experimentIf you need to run Flutter language experiments on the terminal you can follow the below given steps var y var x y Now error occurs This requires the spread collections experiment to enableYou need to create an analysis options yaml file in the root of your Flutter app and write something likeanalyzer enable experiment spread collectionsAlso make sure to switch to the correct channel where the new feature is included eg dev beta or master flutter channel devAnd also make sure you have a recent enough version of Flutterflutter upgradeEnsure you are on the right version of Flutter and dart that allows that feature by runningflutter versionyou may also have to manually change your pubspec yaml file to specify the correct dart sdk if so rerun Flutter upgrade environment sdk gt lt Why use Flutter for app development Flutter is a cross platform development platform so that the app developer can utilize similar code for android and iOS apps It helps the app development team save more resources and time Flutter has become popular among app developers due to its hot reload It enables the developer to see alterations applied to codes on hardware emulator etc The new code will reload within a few seconds Therefore the mobile app developer does not want to waste more time restarting the app When android or iOS applications encounter errors it is simple to resolve them faster The leading Flutter Agency has in depth knowledge in Flutter providing better service to all businesses Flutter provides great performance for dart and its widget These features guarantee that mobile applications start quickly and have rarer performance problems ConclusionFlutter has many command elements so you need to understand them before creating the app on this platform A significant reason for using the Flutter is fewer compatibility problems The expert and top flutter app development company Flutter Agency provides the immediate solution for the flutter app development needs We offer hassle free app development and consistent support for Flutter platform 2022-02-21 12:14:39
海外TECH DEV Community How to install OpenStack with Kayobe https://dev.to/kalaspuffar/how-to-install-openstack-with-kayobe-fa1 How to install OpenStack with KayobeWe look into installing OpenStack using Kayobe OpenStack is a compute cluster solution with a lot of different services that could handle many task such as storage network compute and orchestration 2022-02-21 12:13:49
海外TECH DEV Community How to set Proxy in Firefox using Selenium WebDriver? https://dev.to/garima_writes/how-to-set-proxy-in-firefox-using-selenium-webdriver-18jj How to set Proxy in Firefox using Selenium WebDriver Internet bandwidth is an important asset especially at workplaces where multiple resources use the same network simultaneously High speed internet enables work to be completely faster and more efficiently This is particularly true when working with web applications where the internet is actively used Setting up Proxy Servers makes the system faster by compressing traffic managing cache data and frequently visited web pages This enhances internet speed and decreases page load speed significantly The proxy server is an entity between the client and the server Whenever placing requests the entire traffic from the server flows to the client via the proxy server Setting up the proxy server while testing a web application on Selenium WebDriver could be helpful in capturing traffic Proxy servers let the user access the URL of the web application for testing despite the complex topologies of the network This network at the workplace complies with the strict policies and thus has many restrictions that hinders testing web applications on it This could also mock the backend request calls made by the web application under test which could be useful in the testing process While running a Selenium test it is essential to set the proxy settings of the browser since the WebDriver launches the browser all over again every time a test is run However each time the browser is launched the proxy settings reset automatically and need to be reset every time This article discusses the various methods by which to manage proxy settings in Selenium WebDriver Setting up Firefox Proxy using SeleniumThere are three ways of setting up Firefox Proxy using Selenium By adding preferred Proxy Server Host and Port details to FirefoxOptions class that can be later used in the tests By setting Firefox Profile using FirefoxProfile class By setting up desired capabilities Using FirefoxOptions ClassThe following code sets up Proxy by using Class FirefoxOptions import org openqa selenium Proxy import org openqa selenium WebDriver import org openqa selenium firefox FirefoxDriver import org openqa selenium firefox FirefoxOptions public class proxyTest public static void main String args Proxy proxy new Proxy Adding the desired host and port for the http ssl and ftp Proxy Servers respectivelyproxy setHttpProxy lt HOST PORT gt proxy setSslProxy lt HOST PORT gt proxy setSslProxy lt HOST PORT gt proxy setFtpProxy lt HOST PORT gt FirefoxOptions options new FirefoxOptions options setCapability proxy proxy Calling new Firefox profile for testWebDriver driver new FirefoxDriver options driver get driver manage window maximize driver quit Using FirefoxProfile ClassSimilar to the previous method one can also set Firefox Proxy in Selenium using FirefoxProfile Class Use the code below to do it import org openqa selenium Proxy import org openqa selenium WebDriver import org openqa selenium firefox FirefoxDriver import org openqa selenium firefox FirefoxProfile public class proxyTest public static void main String args Proxy proxy new Proxy Adding the desired host and port for the http ssl and ftp Proxy Servers respectively proxy setHttpProxy lt HOST PORT gt proxy setSslProxy lt HOST PORT gt proxy setSslProxy lt HOST PORT gt proxy setFtpProxy lt HOST PORT gt FirefoxProfile profile new FirefoxProfile profile setProxyPreferences proxy Calling new Firefox profile for testWebDriver driver new FirefoxDriver profile driver get driver manage window maximize driver quit Using Desired CapabilitiesSimilarly one can also set Proxy in Firefox using Selenium Webdriver through its desired capabilities import java io IOException import org openqa selenium Proxy import org openqa selenium WebDriver import org openqa selenium firefox FirefoxDriver import org openqa selenium remote CapabilityType import org openqa selenium remote DesiredCapabilities public class proxyTest public static void main String args Proxy proxy new Proxy Adding the desired host and port for the http ssl ftp Proxy Servers respectivelyproxy setHttpProxy lt HOST PORT gt proxy setSslProxy lt HOST PORT gt proxy setSslProxy lt HOST PORT gt proxy setFtpProxy lt HOST PORT gt DesiredCapabilities dc new DesiredCapabilities dc setCapability CapabilityType PROXY proxy Calling new Firefox profile for testWebDriver driver new FirefoxDriver dc driver get driver manage window maximize driver quit BrowserStack allows its users to set Desired Capabilities through Capabilities Generator as shown below The Way AheadTesting websites that are on private networks is always a tough job and it requires setting up of Proxy Server However using BrowserStack Local private websites can be tested on real browsers and devices by manual and automated testing The latter is accomplished via a Cloud Selenium Grid The cloud also provides integrations with popular CI CD tools such as Jira Jenkins TeamCity Travis CI and much more Additionally there are in built debugging tools that let testers identify and resolve bugs immediately By Setting browserstack local capability to true in the test scripts you can test localhost websites Then put the following code snippet in the test script to set up a proxy while using BrowserStack Local bsLocalArgs put proxyHost bsLocalArgs put proxyPort One can also perform Local Testing of your websites with Network Restrictions using BrowserStack Local 2022-02-21 12:10:30
海外TECH DEV Community Hosting free Strapi CMS on Heroku [Building Personal Blog Website Part 1] https://dev.to/hawelkam/hosting-free-strapi-cms-on-heroku-building-personal-blog-website-part-1-58gg Hosting free Strapi CMS on Heroku Building Personal Blog Website Part This is the first part of the Building Personal Blog Website series In the series we ll setup a free CMS to hold our blog content on Heroku create a React app with Next js static site generation and TailwindCSS to present the articles and host it on Netlify Whether you want to create a simple blog or a portfolio website it is always a good idea to use a good CMS Content Management System behind For quite some time Wordpress was a go to solution but now the choice is not so obvious As an ambitious developer you can of course try to write your own CMS but let s be frank in most cases the best way is to use an existing one That was my approach when I started to work on my personal website My main interest were as follows ability to change website s content without changing the codesimple blog functionalityout of the box GraphQL integrationcheap site maintenance preferably free After some time of research I chose Strapi CMS for the first three points and Heroku for the last one Why Strapi It s lightweight compared to other CMSs Strapi is lightweight and really simple to set up It s headless by design I definitely prefer a headless CMS solution over a traditional CMS it gives much more flexibility It s written in JavaScript this definitely helps with writing extensions plugins if you use JS on a daily basis which I am It has really extensive docs Strapi docs helped me in tons of situations if you have an problem with Strapi it s almost guaranteed you ll find some help in the docs Why headless Main reason it s technology agnostic traditional CMS requires you to write templates etc in the technology the CMS is written With headless this problem is gone You utilize the REST GraphQL endpoints to fetch the data and display it however you like How to set this up For the most part I used a guide from Strapi Docs This guide shows how to create a new Heroku app with Strapi installed and connect it to the free tier postgres database I won t go into details here and repeat what s been said in this guide But I have just a few additions to make it work properly So for starters go through the guide but don t worry if at the end it doesn t work on Heroku you get the application error The error says error Middleware strapi session App keys are required Please set app keys in config server js ex keys myKeyA myKeyB That s why you need to make adjustments to production config In the production config file created during the guide earlier env production server js add few additional fields module exports env gt url env MY HEROKU URL proxy true app keys env array APP KEYS testKey testKey The app keys is crucial The data that you put in server js doesn t matter What matters is the value that you set in Heroku environment You can do it directly through Heroku CLI heroku config set APP KEYS someSecretValue someSecretValueNow when you commit and push changes and redeploy the app you should be able to see that Strapi server is running Go to https yourapp herokuapp com admin to set up the admin user and then log in You should land in the dashboard As the app is in production mode you can t really make any adjustments here Of course you can add a new post etc but can t create a new content type or add a new plugin That s why you need to go into developer mode make changes there and redeploy the app Doing this is pretty simple yarn developAnd when the app starts you ll need to set up admin account once again it s stored in SQlite database so it ll be gone after some time locally but that s not a problem Now when you log in you can create new content types configure plugins etc Before starting creating content types let s just quickly install a plugin that will be really useful later GraphQL plugin which enables the default GraphQL endpoint for your CMS you can skip it if you re ok with using standard REST calls but I ll be using GraphQL in the React app You can install it easily using yarn yarn add strapi plugin graphqlAnd with that out of the way let s just create a blog post type In the content type builder select a Create a new collection type And add some mandatory fields to it In my case it s title content cover author and slug For author it s important to select a proper relation For slug remember to make it of type UID and select title as an attached field After you save you can commit all the new files the schema files etc will tell the production app what kind of content should be possible to create Now you are ready to redeploy the app using Heroku CLI git push heroku HEAD main After the deploy is done you can open the app with heroku open log in with the admin credentials and do some final configuration What you need to do is to give public access to posts Do this by going into Settings gt Users amp Permissions Plugin gt Public gt Edit icon While inside give access to find and findOne for posts This way you ll be able to query the CMS for the list of blog posts and for a specific one post using slug Click Save and now let s create an author and a dummy blog post to test the endpoint Content Manager gt User gt Create New Entry and Content Manager gt Post gt Create New Entry After saving a post you also need to publish it so it would be visible in the API To check if everything works use Postman or a similar app Open up Postman and in the address field put https yourapp herokuapp com graphql and select POST type of query Then in the body of the query select graphql type and type this query posts data attributes title content When you send this request you ll receive the blog post that you just created a minute ago As you can see the content is returned as markdown it s much more efficient to send the data this way but in our frontend app we ll need to convert it to HTML We ll probably use something like Showdown And that s it We now have a hosted Strapi CMS that is accessible by both REST and GraphQL Next step hooking up Cloudinary to our CMS 2022-02-21 12:03:19
海外TECH DEV Community Introduction to Data Structures and Algorithms With Modern Javascript https://dev.to/collinsonindo/introduction-to-data-structures-and-algorithms-with-modern-javascript-3kl1 Introduction to Data Structures and Algorithms With Modern JavascriptWhat is Data Structure and AlgorithmsA data structure DS is a way of organising data so that it can be used effectively An algorithm is a series of step by step instructions that describe how to do something Why Data Structures and Algorithms are importantLearning data structures will help to write clean and consistent code Effective algorithms helps to break a problem down into smaller parts and think carefully about how to solve each part with code This article will go through a list of following Data Structures and Algorithms Arrays Queue Stack Linked list ArraysAn array is a special variable which can hold more than one value Using an array literal is the easiest way to create a JavaScript Array const array name item item Example const snacks Ice cream Nuggets Popcorn Operations available in an array include Accessing Array ElementsChanging an Array ElementLooping Array ElementsAdding Array ElementsQueueA queue is an ordered list of elements where an element is inserted at the end of the queue and is removed from the front of the queue A queue works based on the first in first out FIFO principle which is different from a stack which works based on the last in first out LIFO principle A queue has two main operations Enque Insert a new element at the end of the queue Dequeue Remove an element from the front of the queue Enqueueenqueue element this items this count element this count Dequeuedequeue if this isEmpty return undefined let result this items this lowestCount delete this items this lowestCount this lowestCount return result StackStack is a linear data structure in which addition or removal of element follows a particular order i e LIFO Last in First Out AND FILO First in Last Out The following is an example of a stack class using array Stack classclass Stack Array is used to implement stack constructor this items Functions to be implemented push item pop peek isEmpty printStack The following is a list of operations available in implementing a stackPush Insert an element Pop Remove an elementPeek Get the topmost element Size Get size of the stack isEmpty Check if the stack is empty if empty return true else false Clear Reset the stack Linked ListA linked list is a linear data structure where each element is a separate object that contains a pointer or a link to the next object in that list Each element commonly called nodes contains two items the data stored and a link to the next node The following an example of a Linked List Node User defined class nodeclass Node constructor constructor element this element element this next null List Of Operations Available in linked list Push Insert an element at the end of the linked list Insert Insert an element at the given index of the linked list Remove Remove the end element of the linked list RemoveAt Remove the element at the given index of the linked list GetElementAt Get the element at the given index of the linked list IndexOf Return the index of the element in the linked list ConclusionData structures will help to write clean and consistent code and algorithms helps to break a problem down into smaller parts and think carefully about how to solve each part with code Some of these data structures and algorithms are Arrays Queue Stack Linked list I hope this article has introduced them to your understanding and satisfaction 2022-02-21 12:01:40
海外TECH DEV Community Developing an authentication system in Java+Tarantool https://dev.to/tarantool/developing-an-authentication-system-in-javatarantool-35oh Developing an authentication system in Java TarantoolAuthor Alexander GoryakinMy name is Alexander I am a software engineer in the architecture and pre sale department at VK In this article I m going to show you how to build an authentication system based on Tarantool and Java In pre sales we often have to implement such systems There are plenty of authentication methods by password biometric data SMS etc To make it simple I ll show you how to implement password authentication This article should be useful for those who want to understand the construction of authentication systems I will use a simple example to demonstrate all the main parts of such an architecture how they relate to each other and how they work as a whole The authentication system verifies the authenticity of the data entered by the user We encounter these systems everywhere from operating systems to various services There are many types of authentication by login and password pair with electronic signature biometric data etc I chose the login password pair as an example as it s the most common and quite simple And it also allows showing the basic features of Cartridge and Cartridge Java with a fairly small amount of code But first things first Fundamentals of authentication systemsIn any authentication system you can usually identify several elements as follows subject that will undergo the procedure characteristic of the subject its distinguishing feature host of the authentication system who is responsible for it and controls its operation authentication mechanism that is the operating principles of the system access control mechanism which grants certain access rights to a subject The authentication mechanism can be provided by the software that verifies the authenticity of the subject characteristics a web service an operating system module etc Most often the subject characteristics must be stored somewhere which means there must be a database MySQL or PostgreSQL for example If there is no existing software that allows you to implement an authentication mechanism according to certain rules you have to write it by yourself Among these cases I can list authentication by several characteristics with complicated verification algorithms etc What are Tarantool Cartridge and Cartridge Java Tarantool Cartridge is a framework for scaling and managing a cluster of multiple Tarantool instances Besides creating a cluster it also allows you to manage that cluster quite effectively such as expanding it automatically resharding it and implementing any role based business logic To work with the cluster from an application you need to use connectors drivers for interaction with the database and the cluster using the iproto binary protocol Tarantool currently has connectors for programming languages such as Go Java Python to name a few Some of them can only work with one instance of Tarantool while others can work with entire clusters One of those connectors is Cartridge Java It allows you to interact with a cluster from a Java application This brings up a reasonable question why this particular language Why Java I work in the architecture and pre sales department which means that we make pilot projects for customers from different areas of business By a pilot project I mean a prototype of a system that will later be finalized and handed over to the customer That is why our customers are mostly people who use programming languages that allow them to create full enterprise solutions One of those is Java so we chose Cartridge Java connector for this example Why authentication process The next question that arises is the choice of a service on which we will demonstrate our technology So why did we take authentication and not some other service The answer is quite simple this is the most common problem that people try to solve not only with Tarantool but with other databases as well Users encounter authentication in almost all more or less major applications Most commonly databases such as MySQL or PostgreSQL are used to store user profiles However using Tarantool here is most appropriate since it can handle tens of thousands of queries per second due to the fact that all data is stored in RAM And if an instance crashes it can recover rather quickly via snapshots and write ahead logs Now let s get to the structure of our sample service It will consist of two parts Tarantool Cartridge application serving as a database Java application providing an API for performing basic operations Let s start by looking at the first part of our service Tarantool Cartridge applicationThis application will provide a small cluster of one router two sets of storage replicas and one stateboard Router is an instance with the router role It is responsible for routing requests to storage We re going to expand its functionality a little bit I ll explain how to do it further below Replica set storage replica set refers to a group of N instances with the storage role of which one is the master and the rest are its replicas In our case these are pairs of instances that act as profile storage Stateboard is responsible for configuring the failover mechanism of the cluster in case of failure of individual instances Creating and configuring an applicationLet s create an application by executing cartridge create name authenticationThis will create authentication directory containing everything you need to create a cluster Let s define a list of instances in the instances yml file authentication router advertise uri localhost http port authentication s master advertise uri localhost http port authentication s replica advertise uri localhost http port authentication s master advertise uri localhost http port authentication s replica advertise uri localhost http port authentication stateboard listen localhost password passwdNow we have to configure the roles Configuring rolesFor our application to work with the Cartridge Java connector we need to create and configure new roles You can do this by copying the custom lua file and renaming the copies into storage lua and router lua placing them into the app roles directory and then changing the settings in them First change the name of the role the value in the role name field in the return statement In router lua the role will be router and in storage lua it will be storage Second specify the corresponding role names in init lua in the roles section of the cartridge cfg file In order to work with Cartridge Java we need to install the ddl module by adding ddl to the dependencies section of the file with the rockspec extension And add the get schema function to router lua after that function get schema for instance uri in pairs cartridge rpc get candidates app roles storage leader only true do local conn cartridge pool connect instance uri return conn call ddl get schema endendAdd the following to the init function rawset G ddl get schema get schema In addition add the following condition to the init function in storage lua if opts is master then rawset G ddl get schema require ddl get schema endIt means that we have to execute the rawset function on those storages which are masters Now let s move on to defining the cluster topology Defining a cluster topology and launching the clusterLet s specify the cluster topology in the replicasets yml file router instances router roles failover coordinator router all rw falses instances s master s replica roles storage weight all rw false vshard group defaults instances s master s replica roles storage weight all rw false vshard group defaultAfter establishing the instance configuration and topology execute the commands to build and run our cluster cartridge build cartridge start dThe instances that we defined in instances yml will be created and launched Now we can access http localhost in a browser to manage our cluster via GUI All the created instances will be listed there However they are not configured or combined into replica sets as we described in replicasets yml just yet To avoid configuring instances manually run the following cartridge replicasets setup bootstrap vshardIf we check the list of our instances now we ll see that the topology is now set up that is the instances have the appropriate roles assigned to them and they are combined into replica sets Furthermore the initial bootstrapping of the cluster was performed which resulted in a working sharding And now we can use our cluster Building a data modelWell actually we can t make use of it just yet since we don t have a proper data model to describe the user Let s see what do we need to describe the user What kind of information about the user do we want to store Since our example is quite simple let s use the following fields as general information about the user uuid user s unique identifier login user s login password the hash sum of the user s password These are the main fields that the data model will contain They are sufficient for most cases when there are few users and the load is pretty low But what happens when the number of users becomes immense We would probably want to implement sharding so we can distribute users to different storages and those in turn to different servers or even different data centers Then what field should we use to shard the users There are two options UUID and login In this example we re going to shard the users by login Most often the sharding key is chosen so that a storage will contain records with the same sharding key even if they belong to different spaces But since there is only one space in our case we can choose any field we like After that we have to decide which algorithm to use for sharding Fortunately this choice is not necessary because Tarantool Cartridge already has the vshard library which uses a virtual sharding algorithm To use this library we need to add one more field to the data model bucket id This field s value will be calculated based on the login field s value And now we can describe our space in full local user info box schema create space user info format name bucket id type unsigned name uuid type string name login type string name password type string if not exists true To start using the space we have to create at least one index Let s create a primary index primary based on the login field user info create index primary parts login if not exists true Since we are using vshard we also need to create a secondary index based on the bucket id field user info create index bucket id parts bucket id if not exists true unique false Now let s add a sharding key based on the login field utils register sharding key user info login Performing migrationsWe ll use the migrations module to work with spaces To do this add this line to the dependencies section of the file with the rockspec extension migrations To use this module create a migrations directory in the application s root directory and put a initial lua file with the following contents there local utils require migrator utils return up function local user info box schema create space user info format name bucket id type unsigned name uuid type string name login type string name password type string if not exists true user info create index primary parts login if not exists true user info create index bucket id parts bucket id if not exists true unique false utils register sharding key user info login return true end To create our space we have to send a POST request to http localhost migrations up such as this curl X POST http localhost migrations upBy doing so we perform the migration To create new migrations add new files with names beginning with … to the migrations directory and run the same command Creating stored proceduresAfter constructing the data model and building the space for it we need to create functions through which our Java application will interact with the cluster Such functions are referred to as stored procedures They are called on routers and they process the data by invoking certain space methods What kind of operations with user profiles do we want to perform Since we want to use our cluster primarily as profile storage it s obvious that we should have a function to create profiles In addition since this application is an example of authentication we should be able to get information about the user by their login And finally we should have a function to update a user s information in case a user forgets their password for instance and a function to delete a user if they want to delete their account Now that we have defined which basic stored procedures we want it s time to implement them The entire code for them will be stored in the app roles router lua file Let s start by implementing the user creation but first we ll set up some auxiliary constants local USER BUCKET ID FIELD local USER UUID FIELD local USER LOGIN FIELD local USER PASSWORD FIELD As you can see from their names these constants define the numbers of the corresponding fields in the space These constants will allow us to use meaningful names when indexing the fields of the tuple in our stored procedures Now let s move on to creating the first stored procedure It will be named create user and will receive UUID username and password hash as parameters function create user uuid login password hash local bucket id vshard router bucket id mpcrc login local err vshard router callrw bucket id box space user info insert bucket id uuid login password hash if err nil then log error err return nil end return loginend First we use vshard router bucket id mpcrc to calculate the bucket id parameter which will be used to shard our entries Then we call the insert function from the space on the bucket with the calculated bucket id and pass a tuple consisting of bucket id uuid login and password hash fields to this space This call is performed using the vshard router callrw call of the vshard library which allows write operations to the space and returns the result of the function being called and an error if it fails Finally we check if our function has been executed successfully If yes ーthe data was inserted into the space ーwe return the user s login Otherwise we return nil Now let s create the next stored procedure the one for getting information about the user by their login This one will be named get user by login We will apply the following algorithm to it Calculate the bucket id by login Call the get function for the calculated bucket via the vshard router callbro function If a user with the specified login exists then we return the tuple with information about the user otherwise return nil Implementation function get user by login login local bucket id vshard router bucket id mpcrc login local user vshard router callbro bucket id box space user info get login return userendBesides authentication it will also be helpful in updating and deleting user information Let s consider the case where the user decided to update their information for example their password We re going to write a function named update user by login that will accept the user s login and the new password s hash Which algorithm should we use for that task Let s start by trying to get the user s information via the get user by login function we have implemented If the user doesn t exist we ll return nil Otherwise we ll calculate bucket id by the user s login and call the update function for our space on the bucket with the calculated id We ll pass the user s login and the tuple containing information about the field we need to update ーthe new password hash ーto this function If an error occurred during the update then we will log it and return nil otherwise we will return the tuple with the user s information In Lua this function will look like this function update user by login login new password hash local user get user by login login if user nil then local bucket id vshard router bucket id mpcrc user USER LOGIN FIELD local user err vshard router callrw bucket id box space user info update user USER LOGIN FIELD USER PASSWORD FIELD new password hash if err nil then log error err return nil end return user end return nilendAnd lastly let s implement the function for deleting a user It will be named delete user by login The algorithm will be somewhat similar to the update function the only difference being that if a user exists in the space the delete function will be called and the information about the deleted user will be returned otherwise the function will return nil This stored procedure s implementation goes as follows function delete user by login login local user get user by login login if user nil then local bucket id vshard router bucket id mpcrc user USER LOGIN FIELD local vshard router callrw bucket id box space user info delete user USER LOGIN FIELD return user end return nilend What was done We built an application Configured roles for it Set up a cluster topology Launched the cluster Described a data model and created migration logic Implemented stored procedures Now we can restart the cluster and start filling it with data In the meantime we ll move on to developing the Java application Java applicationThe Java application will serve as an API and will provide the business logic for user authentication Since it s an enterprise application we will create it using the Spring framework We are going to use the Apache Maven framework to build it Setting up the connectorTo set the connector add the following dependency in the dependencies section of the pom xml file lt dependency gt lt groupId gt io tarantool lt groupId gt lt artifactId gt cartridge driver lt artifactId gt lt version gt lt version gt lt dependency gt After that we must update the dependencies You can find the latest connector s version here After installing the connector we need to import the necessary classes from io tarantool driver package Connecting to the clusterAfter setting up the connector we need to create a class that will be responsible for its configuration and will connect the application to the Tarantool Cartridge cluster Let s call this class TarantoolConfig We will specify that it is a configuration class and that its parameters are defined in the application tarantool properties file Configuration PropertySource value classpath application tarantool properties encoding UTF The application tarantool properties file contains the following lines tarantool nodes localhost node listtarantool username admin user nametarantool password authentication cluster cookie passwordThey specify the values of the fields required to connect to the cluster This is why the constructor of our class takes these parameters as input public TarantoolClient tarantoolClient Value tarantool nodes String nodes Value tarantool username String username Value tarantool password String password We will use username and password fields to create credentials for authentication SimpleTarantoolCredentials credentials new SimpleTarantoolCredentials username password Let s create a custom configuration for connecting to the cluster namely specify the authentication parameters and the request timeout TarantoolClientConfig config new TarantoolClientConfig Builder withCredentials credentials withRequestTimeout build Then we have to pass the list of nodes to the AddressProvider which converts a string into a list of addresses and returns this list TarantoolClusterAddressProvider provider new TarantoolClusterAddressProvider Override public Collection lt TarantoolServerAddress gt getAddresses ArrayList lt TarantoolServerAddress gt addresses new ArrayList lt gt for String node nodes split String address node split addresses add new TarantoolServerAddress address Integer parseInt address return addresses Finally let s create a client that will connect to the cluster We wrap it into a proxy client and return the result wrapped into a retrying client which if the connection fails tries to reconnect until it reaches the specified number of attempts ClusterTarantoolTupleClient clusterClient new ClusterTarantoolTupleClient config provider ProxyTarantoolTupleClient proxyClient new ProxyTarantoolTupleClient clusterClient return new RetryingTarantoolTupleClient proxyClient TarantoolRequestRetryPolicies byNumberOfAttempts e gt e getMessage contains Unsuccessful attempt build Full code of the class Configuration PropertySource value classpath application tarantool properties encoding UTF public class TarantoolConfig Bean public TarantoolClient tarantoolClient Value tarantool nodes String nodes Value tarantool username String username Value tarantool password String password SimpleTarantoolCredentials credentials new SimpleTarantoolCredentials username password TarantoolClientConfig config new TarantoolClientConfig Builder withCredentials credentials withRequestTimeout build TarantoolClusterAddressProvider provider new TarantoolClusterAddressProvider Override public Collection lt TarantoolServerAddress gt getAddresses ArrayList lt TarantoolServerAddress gt addresses new ArrayList lt gt for String node nodes split String address node split addresses add new TarantoolServerAddress address Integer parseInt address return addresses ClusterTarantoolTupleClient clusterClient new ClusterTarantoolTupleClient config provider ProxyTarantoolTupleClient proxyClient new ProxyTarantoolTupleClient clusterClient return new RetryingTarantoolTupleClient proxyClient TarantoolRequestRetryPolicies byNumberOfAttempts e gt e getMessage contains Unsuccessful attempt build The application will connect to the cluster after the first request was sent to Tarantool on the application s launching Now let s move on to creating an API and a user data model for our application Creating an API and a user data modelWe re going to use the OpenAPI specification of version Let s create three endpoints each of which will accept and process the corresponding types of requests register POST creating a user login POST user authentication login GET obtaining user information PUT updating user information DELETE deleting a user We will also add descriptions for the methods that handle each request we send and each response the application returns authUserRequest authUserResponse createUserRequest createUserResponse getUserInfoResponse updateUserRequestThe stored procedures we ve implemented in Lua will be called by controllers when processing these methods Now we need to generate classes that correspond to the described methods and responses We ll use the swagger codegen plugin for that Add the plugin description to the build section of the pom xml file lt plugin gt lt groupId gt io swagger codegen v lt groupId gt lt artifactId gt swagger codegen maven plugin lt artifactId gt lt version gt lt version gt lt executions gt lt execution gt lt id gt api lt id gt lt goals gt lt goal gt generate lt goal gt lt goals gt lt configuration gt lt inputSpec gt project basedir src main resources api yaml lt inputSpec gt lt language gt java lt language gt lt modelPackage gt org tarantool models rest lt modelPackage gt lt output gt project basedir lt output gt lt generateApis gt false lt generateApis gt lt generateSupportingFiles gt false lt generateSupportingFiles gt lt generateModelDocumentation gt false lt generateModelDocumentation gt lt generateModelTests gt false lt generateModelTests gt lt configOptions gt lt dateLibrary gt java lt dateLibrary gt lt library gt resttemplate lt library gt lt useTags gt true lt useTags gt lt hideGenerationTimestamp gt true lt hideGenerationTimestamp gt lt configOptions gt lt configuration gt lt execution gt lt executions gt lt plugin gt In these lines we specify the path to the api yaml file that describes the API and the path to the directory where the generated Java files are to be placed After running the build we will get the generated request and response classes which we are going to use when creating controllers Let s move on to creating a user data model The corresponding class will be called UserModel and we ll place it in the models directory In the same directory in its rest subdirectory there are also the classes for requests and responses The model will describe the user and will contain three private fields uuid login and password It will also have getters and setters to access these fields So our data model s class goes as follows public class UserModel String uuid String login String password public String getUuid return uuid public void setUuid String uuid this uuid uuid public String getLogin return login public void setLogin String login this login login public String getPassword return password public void setPassword String password this password password Creating services and controllersIn order to work with Tarantool when processing queries we are going to use services that allow us to hide all the logic by calling methods of a certain class We re going to use four basic methods getUserByLogin to get the user s information by their login createUser to create a new user updateUser to update the information of a user deleteUser to delete a user by their login To describe the basic service let s create an interface that contains the signatures of these four methods and then inherit the service that will contain our Tarantool logic from it We ll call it StorageService public interface StorageService UserModel getUserByLogin String login String createUser CreateUserRequest request boolean updateUser String login UpdateUserRequest request boolean deleteUser String login Now let s create the TarantoolStorageService class inherited from this interface First we must create a constructor for this class that will take TarantoolClient as input to be able to make queries to Tarantool Let s save the client in a private variable and add the final modifier to it private final TarantoolClient tarantoolClient public TarantoolStorageService TarantoolClient tarantoolClient this tarantoolClient tarantoolClient Now let s override the method of getting the user by login First we create a variable userTuple of List lt ObjРµct gt type initialized by the null value List lt Object gt userTuple null After the initialization we try to execute tarantoolClient s method call which will result in Future Since this method is asynchronous we call the get method with argument to get the result of its execution If an exception is thrown during the call method execution we should catch it and log it to the console try userTuple List lt Object gt tarantoolClient call get user by login login get get catch InterruptedException ExecutionException e e printStackTrace And if the method was executed successfully we create an object of the UserModel class fill all the fields and return it Otherwise we return null if userTuple null UserModel user new UserModel user setUuid String userTuple get user setLogin String userTuple get user setPassword String userTuple get return user return null Full code of the getUserByLogin method public UserModel getUserByLogin String login List lt Object gt userTuple null try userTuple List lt Object gt tarantoolClient call get user by login login get get catch InterruptedException ExecutionException e e printStackTrace if userTuple null UserModel user new UserModel user setUuid String userTuple get user setLogin String userTuple get user setPassword String userTuple get return user return null We override other methods in the same way but with some changes Since the logic is quite similar to the one presented above I ll just provide the full code of this class Servicepublic class TarantoolStorageService implements StorageService private final TarantoolClient tarantoolClient public TarantoolStorageService TarantoolClient tarantoolClient this tarantoolClient tarantoolClient Override public UserModel getUserByLogin String login List lt Object gt userTuple null try userTuple List lt Object gt tarantoolClient call get user by login login get get catch InterruptedException ExecutionException e e printStackTrace if userTuple null UserModel user new UserModel user setUuid String userTuple get user setLogin String userTuple get user setPassword String userTuple get return user return null Override public String createUser CreateUserRequest request String uuid UUID randomUUID toString List lt Object gt userTuple null try userTuple List lt Object gt tarantoolClient call create user uuid request getLogin DigestUtils mdDigestAsHex request getPassword getBytes get catch InterruptedException ExecutionException e e printStackTrace if userTuple null return String userTuple get return null Override public boolean updateUser String login UpdateUserRequest request List lt Object gt userTuple null try userTuple List lt Object gt tarantoolClient call update user by login login DigestUtils mdDigestAsHex request getPassword getBytes get get catch InterruptedException ExecutionException e e printStackTrace return userTuple null Override public boolean deleteUser String login List lt Object gt userTuple null try userTuple List lt Object gt tarantoolClient call delete user by login login get get catch InterruptedException ExecutionException e e printStackTrace return userTuple null After implementing this auxiliary service we need to create services that contain user authentication and modification logic The service for modifying and retrieving information about the user will be called UserService It is quite straightforward in its implementation as it s initialized by an object of the StorageService class and simply calls the methods defined in it So I ll just provide the full code for this class too Servicepublic class UserService private final StorageService storageService public UserService StorageService storageService this storageService storageService public String createUser CreateUserRequest request return this storageService createUser request public boolean deleteUser String login return this storageService deleteUser login public UserModel getUserByLogin String login return this storageService getUserByLogin login public boolean updateUser String login UpdateUserRequest request return this storageService updateUser login request The second service which authenticates the user we will call AuthenticationService It will also be initialized with an object of the StorageService class and will contain only one method authenticate responsible for user authentication How exactly is the authentication performed This method calls the user s information from Tarantool by the user s login Then it calculates the MD hash of the password and compares it with the one received from Tarantool If the hashes match the method returns a token which for simplicity is just the user UUID otherwise it returns null Full code of the AuthenticationService class Servicepublic class AuthenticationService private final StorageService storageService public AuthenticationService StorageService storageService this storageService storageService public AuthUserResponse authenticate String login String password UserModel user storageService getUserByLogin login if user null return null String passHash DigestUtils mdDigestAsHex password getBytes if user getPassword equals passHash AuthUserResponse response new AuthUserResponse response setAuthToken user getUuid return response else return null Now let s create two controllers responsible for authentication of the user and processing their information The first one will be AuthenticationController and the second one will be UserController Let s start with the AuthenticationController Each controller is initialized with its own service so we initialize the first one with an object of the AuthenticationService class Our controller will also contain a mapping to the login endpoint It will parse the request call the authenticate method of the service and ーbased on the result of the call ーreturn either UUID and code or code Forbidden Full code for this controller RestControllerpublic class AuthenticationController private final AuthenticationService authenticationService public AuthenticationController AuthenticationService authenticationService this authenticationService authenticationService PostMapping value login produces application json public ResponseEntity lt AuthUserResponse gt authenticate RequestBody AuthUserRequest request String login request getLogin String password request getPassword AuthUserResponse response this authenticationService authenticate login password if response null return ResponseEntity status HttpStatus OK cacheControl CacheControl noCache body response else return new ResponseEntity lt gt HttpStatus FORBIDDEN The second controller UserController will be initialized with an object of the UserService class It will contain mappings to the register and login endpoints This controller s full code RestControllerpublic class UserController private final UserService userService public UserController UserService userService this userService userService PostMapping value register produces application json public ResponseEntity lt CreateUserResponse gt createUser RequestBody CreateUserRequest request String login this userService createUser request if login null CreateUserResponse response new CreateUserResponse response setLogin login return ResponseEntity status HttpStatus OK cacheControl CacheControl noCache body response else return new ResponseEntity lt gt HttpStatus BAD REQUEST GetMapping value login produces application json public ResponseEntity lt GetUserInfoResponse gt getUserInfo PathVariable login String login UserModel model this userService getUserByLogin login if model null GetUserInfoResponse response new GetUserInfoResponse response setUuid model getUuid response setLogin model getLogin response setPassword model getPassword return ResponseEntity status HttpStatus OK cacheControl CacheControl noCache body response else return new ResponseEntity lt gt HttpStatus NOT FOUND PutMapping value login produces application json public ResponseEntity lt Void gt updateUser PathVariable login String login RequestBody UpdateUserRequest request boolean updated this userService updateUser login request if updated return ResponseEntity status HttpStatus OK cacheControl CacheControl noCache build else return new ResponseEntity lt gt HttpStatus NOT FOUND DeleteMapping value login produces application json public ResponseEntity lt Void gt deleteUser PathVariable login String login boolean deleted this userService deleteUser login if deleted return ResponseEntity status HttpStatus OK cacheControl CacheControl noCache build else return new ResponseEntity lt gt HttpStatus NOT FOUND This concludes the development of our Java application All that s left to do now is build it You can do that by running mvn clean packageAfter the application is built you can run it with java jar target authentication example SNAPSHOT jarNow we have finished developing our service You can see its full code here What was done Installed the Java connector Set up a connection to the cluster Developed an API Created controllers and services Built our application What s left to do is to test the service Checking if the service worksLet s check how correctly each of the requests is being processed We ll use Postman for that task We will use a test user with login as their username and password as their password We start by creating a new user The request will look like this The result is Now let s check the authentication Check the user s data Trying to update the user s password Checking if the password was updated Deleting the user Trying to authenticate again Checking the user s data again All requests are executed correctly we receive the expected results ConclusionAs an example we implemented an authentication system consisting of two applications A Tarantool Cartridge application that implements the business logic for handling user information and data storage A Java application providing an API for authentication Tarantool Cartridge is a framework for scaling and managing a cluster of multiple Tarantool instances and also for developing cluster applications We used the Cartridge Java Connector which replaced the outdated Tarantool Java Connector to communicate between the applications we wrote It allows you to work not only with single instances of Tarantool but also with entire clusters which makes the connector more versatile and irreplaceable for developing enterprise applications Links Our official website Ask your questions to the community in the Telegram chat Source code of the sample application on GitHub Tarantool Cartridge framework on GitHub Cartridge Java connector on GitHub Migrations module on GitHub 2022-02-21 12:01:10
Apple AppleInsider - Frontpage News iPhone 14 design moves into early production stages https://appleinsider.com/articles/22/02/21/iphone-14-design-moves-into-early-production-stages?utm_medium=rss iPhone design moves into early production stagesApple s supply chain is preparing itself for production of the iPhone with the smartphone s design now undergoing a trial run of manufacturing through some of the company s partners The iPhone s annual update cycle is a well oiled machine one that has numerous steps and major investments in time and resources at multiple companies to undertake ahead of the scheduled fall release The model the iPhone has now apparently reached an important stage that involves Apple s famous supply chain The new design has entered OEM trial production according to UDN a point of the project where the smartphone gets produced at a small scale The trial production is intended to confirm the design of the new iPhone model can be produced as well as to try and shake out any potential issues before mass production commences Read more 2022-02-21 12:19:04
Apple AppleInsider - Frontpage News NFTs worth $1.7M stolen via OpenSea phishing attack https://appleinsider.com/articles/22/02/20/nfts-worth-17m-stolen-via-opensea-phishing-attack?utm_medium=rss NFTs worth M stolen via OpenSea phishing attackCollectors of NFTs that used OpenSea have been affected by a phishing attack with a total of tokens estimated to be worth more than million stolen over a three hour period On Saturday OpenSea became aware of rumors about smart contracts connected to the non fungible token NFT marketplace In investigating the claims it discovered that users were actually being affected by a fairly typical phishing attack Emails set to look like an OpenSea Community Update were sent to customers inviting them to migrate their Etherium listings to a new smart contract As OpenSea introduced its own legitimate smart contract one day prior the phishing email took advantage of the change Read more 2022-02-21 12:32:04
海外TECH CodeProject Latest Articles Unity on Azure PlayFab Part 6: Leaderboards Made Easy https://www.codeproject.com/Articles/5325098/Unity-on-Azure-PlayFab-Part-6-Leaderboards-Made-Ea playfab 2022-02-21 12:14:00
ニュース @日本経済新聞 電子版 国内金最高値、円の実力低下映す 資産防衛の需要も https://t.co/oZ2vKKWkEL https://twitter.com/nikkei/statuses/1495733985716350980 防衛 2022-02-21 12:15:46
ニュース BBC News - Home Covid: Living with Covid plan will restore freedom, says Boris Johnson https://www.bbc.co.uk/news/uk-60455943?at_medium=RSS&at_campaign=KARANGA commons 2022-02-21 12:51:04
ニュース BBC News - Home Jamal Edwards, music entrepreneur and Youtube star, dies aged 31 https://www.bbc.co.uk/news/uk-60457063?at_medium=RSS&at_campaign=KARANGA sheeran 2022-02-21 12:30:08
ニュース BBC News - Home Storm Franklin hits UK with flooding and high winds https://www.bbc.co.uk/news/uk-60452334?at_medium=RSS&at_campaign=KARANGA warnings 2022-02-21 12:28:09
ニュース BBC News - Home Solihull: Arthur Labinjo-Hughes report uncovers help delay https://www.bbc.co.uk/news/uk-england-birmingham-60462072?at_medium=RSS&at_campaign=KARANGA report 2022-02-21 12:19:46
ニュース BBC News - Home Jamal Edwards: 'Every young guy wanted to do what he was doing' https://www.bbc.co.uk/news/newsbeat-60462191?at_medium=RSS&at_campaign=KARANGA people 2022-02-21 12:38:47
北海道 北海道新聞 上川管内122人感染 新規クラスターは2件 新型コロナ https://www.hokkaido-np.co.jp/article/648354/ 上川管内 2022-02-21 21:19:08
北海道 北海道新聞 巨人・菅野、最多の111球 異例の投げ込み https://www.hokkaido-np.co.jp/article/648404/ 那覇市 2022-02-21 21:16:00
北海道 北海道新聞 ほっかいどう大運動会 ウオーク&ラン始まる https://www.hokkaido-np.co.jp/article/648403/ 大運動会 2022-02-21 21:15:00
北海道 北海道新聞 十勝管内、新たに129人感染 新型コロナ https://www.hokkaido-np.co.jp/article/648400/ 十勝管内 2022-02-21 21:09:00
北海道 北海道新聞 チオカイの化粧品受賞 浦幌 サスティナブルコスメアワード https://www.hokkaido-np.co.jp/article/648399/ ciokay 2022-02-21 21:09:00
北海道 北海道新聞 二階派が片山さつき氏に退会勧告 会合連続欠席「信用失う」 https://www.hokkaido-np.co.jp/article/648397/ 地方創生 2022-02-21 21:05:00
北海道 北海道新聞 アイヌ文様と有田焼コラボ、多彩な12皿 ネット限定販売 阿寒の工芸作家・佐賀の窯元 https://www.hokkaido-np.co.jp/article/648396/ 釧路市阿寒町阿寒湖温泉 2022-02-21 21:02:00

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)