kakkoyaのブックマーク (41)

  • Goでインメモリキャッシュを取り扱う時にハマった話 - Gunosy Tech Blog

    こんにちは、Gunosy Tech Labの片木(@jkatagi)です(普段はGunosyデータ分析ブログの方に生息しています)。 記事では社内のとあるAPIGo製)の改修をしていたときに遭遇したインメモリキャッシュの落とし穴について共有します。 普段からGoを書いている人にとっては当たり前のことかもしれませんが、アンチパターンとして共有できれば幸いです。 落とし穴にハマるGopherくん 要約 APIのアーキテクチャについて なにが起きたのか なぜ起こったのか 単体テストでは気づけなかったのか どう解決したか おわりに 要約 長くなるので最初に要約しますと 当該APIでインメモリキャッシュとして構造体のスライスを格納していた キャッシュしている値を変えてしまうとキャッシュ元も変わってしまう という事態が発生しました。 ですのでインメモリキャッシュを使う時は対象の値が変更されないこと

    Goでインメモリキャッシュを取り扱う時にハマった話 - Gunosy Tech Blog
    kakkoya
    kakkoya 2020/07/02
  • 7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える

    設計原則はよい設計をするための指針です。 では、よい設計とはなんでしょうか? もっとも重要なソフトウェア品質は発展性 ソフトウェアの発展性がビジネス価値を生む 発展性をうみだす7つの設計原則 モジュール化 モジュール化の2つのアプローチ 型によるモジュール化 手続き的なモジュール化 関心の分離 関心の4象限 入出力と計算・判断の分離 業務の関心と実装の詳細の分離 もっとも複雑な関心事(ビジネスロジック)の分離を徹底する カプセル化と抽象化 カプセル化 ビジネスロジックのカプセル化 抽象化 データ抽象 ビジネスロジックとデータ抽象 高凝集と疎結合 凝集度 結合度 隠された結合性の問題 定義の一点性 見た目が同じコード 7つの設計原則の学び方 コードの実装例 ドメインオブジェクト設計のガイドライン 実践ガイドとして使える 設計の考え方を理解するための もっとも重要なソフトウェア品質は発展性

    7つの設計原則とオブジェクト指向プログラミング - ソフトウェア設計を考える
    kakkoya
    kakkoya 2020/06/27
  • 【翻訳】技術的負債という概念の生みの親 Ward Cunningham 自身による説明 - t-wadaのブログ

    システム開発の世界において「技術的負債Technical Debt)」は繰り返し話題になり、しばしば炎上しています。 技術的負債という概念の生みの親は Ward Cunningham (ウォード・カニンガム)です。彼は 1992 年にオブジェクト指向プログラミングの国際カンファレンス OOPSLA '92 の Experience Report でコードの初回リリースを負債に例えました("Shipping first time code is like going into debt")。 Ward Cunningham はソフトウェアの世界に多くの貢献を果たしてきました。Wiki の発明者であり、XP と TDD の父 Kent Beck の師匠のような存在であり、建築の世界の「パタン・ランゲージ」を Kent Beck と共にソフトウェアに輸入した人であり、「アジャイルソフトウェア開

    【翻訳】技術的負債という概念の生みの親 Ward Cunningham 自身による説明 - t-wadaのブログ
    kakkoya
    kakkoya 2020/06/23
  • ECSのログ管理にFirelensを導入してみた - Gunosy Tech Blog

    はじめに こんにちは。SRE部の板谷(@SItaya5)です。 Gunosyでは様々なプロダクトでECS(Amazon Elastic Container Service)を使用してタスクを実行しています。 ECSの起動タイプにはEC2とFargateの2種類がありますが、どちらのタイプも混在しています。 ログの送信先としては、主にPapertrailというサービスを使用しています。 しかし、Fargateで実行しているタスクに関しては、ログの送信先(Log Driver)に選択の余地がなく、Cloudwatch Logs一択でした。 そのため、EC2で実行しているタスクのログはPapertrailに送信されていましたが、一方のFargateで実行しているタスクはCloudwatch Logsに送信せざるを得ませんでした。 このように起動タイプ毎にログの送信先が分かれており、管理が煩雑にな

    ECSのログ管理にFirelensを導入してみた - Gunosy Tech Blog
    kakkoya
    kakkoya 2020/06/06
  • Testing JavaScript をやってみたら学びがあって良かった話 - Adwaysエンジニアブログ

    こんにちは。リファクタリングが大好きなフロントエンドおじさん梅津です。 自信を持ってリファクタリングするには信頼できる自動テストが必要ですよね。 じゃあ信頼できる自動テストとはなんだろう?どう書いたらいいんだろう?と考えていました。 とくにコンポーネントを含む UI テストに対しての悩みが強かったです。 そんなときに出会ったのが Testing JavaScript です。 この記事ではその Testing JavaScript の紹介をしたいと思います。 Testing JavaScript とは Testing JavaScript は PayPal のエンジニアである Kent C. Dodds によって作成された教材です。 ページを開いてすぐ目に飛び込んでくるテスティングトロフィーが特徴的ですね。 Testing JavaScript では、ここに記されている Static, Un

    Testing JavaScript をやってみたら学びがあって良かった話 - Adwaysエンジニアブログ
    kakkoya
    kakkoya 2020/05/14
  • swaggoの導入【Go】【Swagger】 - 技術向上

    swaggoという外部パッケージを利用することで、Swaggerを使って作成済みのGoのソースコードからAPIドキュメントを作成できます。 install パッケージをインストールします。 $ go get github.com/swaggo/swag/cmd/swag APIに関する記述を規定のフォーマットに従って、コメントとして記入します。 コメントの記入については公式を確認ください。 main.goがあるディレクトリで下記コマンドを実行し、swagのdocsを生成します。 $ swag init net/httpパッケージを利用している場合は下記パッケージをインストールします。 パッケージによって手順が異なるので、詳細は公式を参照ください。 $ go get -u github.com/swaggo/http-swagger ルーティングを行なっているパッケージのimportに下記を

    swaggoの導入【Go】【Swagger】 - 技術向上
    kakkoya
    kakkoya 2020/05/13
  • プログラミングを学ぶにあたって詰まったことと、そこから学んだこと - mizchi's blog

    toyokeizai.net satoru-takeuchi.hatenablog.com 全然レイヤーが違うが、自分が何に悩んで、どういう風に理解したか、思い出しながら書き出してみる。 プログラミング歴 20歳からなので、現時点で10年ぐらいだが、中学生の時ちょっと触ったことがあった。 14 歳: 病気で入院したときに暇すぎて、2 週間ほど VBA を触った 大学 1 年: 大学の選択科目で Java, 夏休みに Python と Ubuntu の独習 大学 3 年: Python で自然言語処理のバイト 大学 4 年: Android アプリを作るバイト、就活ポートフォリオとして node/Websocket で MMO 一社目: Unity, ActionScript, Haskell, JavaScript 以降~: JavaScript/CoffeeScript/TypeScri

    プログラミングを学ぶにあたって詰まったことと、そこから学んだこと - mizchi's blog
    kakkoya
    kakkoya 2020/01/17
  • Amazon Elasticsearch ServiceをつかったRDSのスロークエリの集計と監視 - クックパッド開発者ブログ

    こんにちは、SREの菅原です。 クックパッドの多くのシステムは AWS 上で稼動しており、そのWebサービスの多くはデータベースにAmazon RDSを使っています。 WebサービスDBを使う場合、ボトルネックになりやすいDBのパフォーマンスを落とさないためにスロークエリの監視はとても重要です。そこで、Amazon Elasticsearch Serviceを使ったスロークエリの集計・監視システムを構築したので、それについて紹介したいと思います。 ※今のところMySQLエンジンのみを対象としています システム構成 システムの構成は以下のようになります。 また、社内のシステムと完全に同じ訳ではありませんが、同様の構成のSAMプロジェクト(Elasticsearch Serviceに保存するまでの部分)をGitHubで公開しています。 https://github.com/winebarre

    Amazon Elasticsearch ServiceをつかったRDSのスロークエリの集計と監視 - クックパッド開発者ブログ
    kakkoya
    kakkoya 2020/01/07
  • WPF on .NET Core 3.1 で Windows 10 アプリ開発というタイトルで牛タン会議 2019 で登壇してきました - かずきのBlog@hatena

    タイトルの通りです。資料をスライドシェアにアップロードしました。 WPF on .NET Core 3.1 で Windows 10 アプリ開発 from 一希 大田 www.slideshare.net 登壇中にデモを 3 つライブで作りながらやったのですが、それが失敗したとき用にバックアッププランで用意していたプログラムは以下の GitHub リポジトリで公開しています。 github.com

    WPF on .NET Core 3.1 で Windows 10 アプリ開発というタイトルで牛タン会議 2019 で登壇してきました - かずきのBlog@hatena
    kakkoya
    kakkoya 2019/12/17
  • AngularのライブラリのテストにJestを使ってみる - notebook

    この記事は Angular #2 Advent Calendar 2019 7日目の記事です ng g libraryで作成したAngularのライブラリに対してjestでテストを回せるようにしたのでやったことを書いていく 経緯 「テキストボックスの入力に関して指定秒数入力がなかった場合にイベントを発火させる」というよくありがちな実装をライブラリ化した Angularでライブラリを作成しnpmに公開する - notebook swfz.hatenablog.com 実際のテストコードはディレクティブに対してのテストとrxjsの実装部分のテストをjest-marblesを使ったが「完全に理解した」という感じになっていないので割愛する 下記の記事で少し古いがライブラリを使っている場合のjestの設定についての記事を見つけたので参考にする Integrate Jest into an Angul

    AngularのライブラリのテストにJestを使ってみる - notebook
  • DX: Developer Experience (開発体験)は重要だ - Islands in the byte stream

    DX: Developer Experience (開発体験)とは、あるシステムを「気持ちよく開発・保守できるかどうか」を示すもの 開発者は開発・保守という行為を通じたそのシステムのユーザーであり、DXUXの一種である DXがよいと日々の開発を楽しめるようになり、気持ちに余裕ができる 気持ちの余裕がでるとコードの品質があがり保守時のデグレも減らせる また、DXがよい事自体がDXを高める動機になり、正のスパイラルを見込める つまり、「定められたタスク」(=義務)以上のことを行うようになる DXが悪いと開発を楽しめず、「定められたタスク」以外のことをしたくなくなる DXは放置すると悪化するので、「DXがよくも悪くもない」プロダクトは時間が経つに連れ「DXが悪い」になる なので積極的にDXを良くしていく活動を奨励していくのがよい いくつか興味深いフィードバックがあったので記しておきます。 DX

    DX: Developer Experience (開発体験)は重要だ - Islands in the byte stream
    kakkoya
    kakkoya 2019/11/13
  • Visual Studio Online Public preview 試してみた! - かずきのBlog@hatena

    変更履歴 サービス名を Visual Studio Code Online と間違えて書いていたので Visual Studio Online に修正しました。 セルフホストについて追記しました 環境のカスタマイズについての記事へのリンクを追加 Microsoft Ignite 2019 のキーノート見てたらまさかの!!ということで以下のページから試してみました。 online.visualstudio.com サインインして環境を作る 開始するを選ぶとサインインする画面になります。 以下のように Azure サブスクリプションとかを選ぶようになったのですが課金は Azure いるのかなぁ???Azure サブスクリプション持ってない人がどういうフローになるのか気になる…。 環境のカスタマイズとかは VS Code のリモート開発の devcontainer.json とかで出来るみ

    Visual Studio Online Public preview 試してみた! - かずきのBlog@hatena
    kakkoya
    kakkoya 2019/11/05
  • .NET Core 3.0 + Windows 10 で WPF 開発 というタイトルで .NET Conf 2019 で登壇してきました - かずきのBlog@hatena

    登壇資料アップロードしました。 .NET Core 3.0 + Windows 10 で WPF 開発 from 一希 大田 www.slideshare.net 関連記事 基的に、過去のブログで結構書いてた内容のまとめになります。 WPF 関連 MSIX での自動更新 XAML Islands その 1 XAML Islands その 2 XAML Islands その 3 同じやるなた新しい技術使えたほうが楽しいので、是非デスクトップアプリ開発する機会がある人は虎視眈々と導入機会を伺ってください!

    .NET Core 3.0 + Windows 10 で WPF 開発 というタイトルで .NET Conf 2019 で登壇してきました - かずきのBlog@hatena
    kakkoya
    kakkoya 2019/10/27
  • TSLint v5.7.0 で指定できる全 rules をまとめた - Corredor

    TypeScript入門 クラスと型チェック機能を加えたJavaScriptの拡張言語 作者: 川俣晶出版社/メーカー: 日経BP社発売日: 2014/06/04メディア: 単行この商品を含むブログを見る TSLint v5.7.0 時点で指定できる、全ての Lint ルールをまとめた。Angular4 系での利用を考えたルールなので末尾に Angular4 用の拡張ルールが記載されているが、適宜カスタマイズしてもらえばよいかと。 // tslint.json : https://palantir.github.io/tslint/ { // Type Checking を有効にする (true) "lintOptions": { "typeCheck": true }, // カスタムルールの参照先 "rulesDirectory": [ "node_modules/codelyzer

    TSLint v5.7.0 で指定できる全 rules をまとめた - Corredor
    kakkoya
    kakkoya 2019/09/27
  • LambdaでPHPを動かしてみた

    PHPer(ぺちぱー)エンジニアの笹亀(ささがめ)です。 プロジェクトマネージャーがメインですが、根っこの部分はエンジニアですw AWSLambdaでもPHPが利用できるようになったというのを練馬で今年の春に行われたPHPerkaigiにて知りました。 phperkaigi.jp PHPでもサーバレスで実施できるということで「PHPerなら試してみないとね!」っと自分に言い聞かせながら、使い勝手など把握をしておきたく、実際に勉強会のLTなどでもお話もさせていただいたので、せっかくなのでブログにも書きました〜 ■目次です サーバレスでPHP Lambda PHPの概要 Lambda PHPで必要なもの Lambda PHP関数のディレクトリ構成とファイル構成 template.yaml index.php php.ini Lambda PHP関数をデプロイする Lambda PHPの動作確

    LambdaでPHPを動かしてみた
    kakkoya
    kakkoya 2019/07/17
  • 全てサーバーレス + 全て C# で SPA - かずきのBlog@hatena

    DB に Cosmos DB を使って Azure Functions を使って少ないコードで読み書きする API を作って API Management で CORS の設定と Open API の定義を作って Blazor で AutoRest で生成したクライアントを使って API を呼ぶ SPA を作ってストレージアカウントの静的 Web サイトに置いて動かしてみました。 以下のような感じの構成ですね。 動いてるところはこんな感じ。この動画ではわかりませんが、ちゃんとクライアントサイド Blazor です。 youtu.be コードは下に置いてますが、ARM Template などは用意してないので参考程度に。 github.com 一番威力を実感したのは、AutoRest で生成した API のクライアントのコードが Blazorプロジェクトで普通にさくっと使えたところでしょ

    全てサーバーレス + 全て C# で SPA - かずきのBlog@hatena
    kakkoya
    kakkoya 2019/07/14
  • C# で完全サーバーレスで SPA とバックエンドを作れるようになりますね - かずきのBlog@hatena

    Azure API Management の従量課金プランが GA しました。 azure.microsoft.com つまり… Azure Storage Account の静的 Web サイトホスト機能で SPA をホスト Azure Functions の HttpTrigger で処理を作成 Azure API Management で Azure Functions を SPA 向けに公開 Azure Cosmos DB にデータをストア つまり、以下のような感じですね。 全部サーバーレスでいける!! まぁ、でも実際にはステージング環境とかを、この構成で準備するの個人的にだるいんで Storage Account じゃなくて Web Apps 使いそうな気がするけど…、そこら辺のいいやり方があればやってみたいなぁ。 C# でやれますね SPA は Blazor で C#、Azur

    C# で完全サーバーレスで SPA とバックエンドを作れるようになりますね - かずきのBlog@hatena
    kakkoya
    kakkoya 2019/07/07
  • レシピ検索を支えるレガシーでクリティカルな大規模バッチを刷新した話 - クックパッド開発者ブログ

    こんにちは、会員事業部の新井です。余暇を全て Auto Chess に喰われています。 過去このブログにはサービス開発に関する記事*1を投稿させていただいているのですが、今回はシステム改修についての記事になります。 クックパッドには検索バッチと呼ばれる大規模なバッチが存在するのですが、今回それを刷新することに成功しました。 そこでこの記事では旧システムに存在していた問題点、新システムの特徴や実際の開発について述べたいと思います。 背景 クックパッドレシピ検索では Apache Solr を検索サーバーとした全文検索を利用しています。古くは Tritonn を利用して MySQL に作られた専用 table を対象に全文検索を実行していたようですが、その頃から「検索バッチ」と呼ばれるバッチが存在していました。 このバッチは、簡単に言うと「検索インデックス」と呼ばれる検索用メタデータを生成す

    レシピ検索を支えるレガシーでクリティカルな大規模バッチを刷新した話 - クックパッド開発者ブログ
    kakkoya
    kakkoya 2019/06/22
  • 【裏話付】LaravelJPCon2019公式アプリをVue+Onsen UI+Monacaで作った話

    無事に「スタッフ」となり、専用のSlackに招待され、軽く挨拶をしつつも、過去の会話なり今のやり取りを見て、何か違和感を感じました。 ….あ、もしかしてこれ、想像してた「スタッフ」と違うのでは…??? チャンネルも「core」って書いてある。。。 そうなんです。私、焦りすぎて気づかなかったんですね。 当は1day-staff的な気持ちで応募したら、「コアスタッフ」だったんですね!! 今改めて応募のTwitter見返したら「コアスタッフを若干名募集!!」って書いてありますね。。。 やっちゃいました。 でもいい機会だし、今抜ける方が迷惑なので、もう無心でやりきっちゃろ!と考えるようになりました。 Slackで流れを見る限り、自分が参加する前から、カンファレンス当日までの段取りやissuesもある程度固まっているようでした。 ではどこの馬の骨ともわからない自分が、イベント運営の勝手もわかってい

    【裏話付】LaravelJPCon2019公式アプリをVue+Onsen UI+Monacaで作った話
    kakkoya
    kakkoya 2019/05/09
  • Visual Studio Code ではじめるシーケンス図

    テキストでUMLやシーケンス図、クラス図などを作成できる言語です。 ダイアグラムをテキストで記述できるため、Gitで管理することもできます。 Visual Studio Codeでは、次のようにPlantUMLプレビューでダイアグラムを確認しながら作成できます。 まず、Visual Studio Codeが端末にない人はインストールをしてください。 Visual Studio Code – Code Editing. Redefined また、Javaもインストールが必要となります。 無料Javaソフトウェアをダウンロード インストールが完了したら、Visual Studio Codeで拡張機能としてPlant UMLを追加します。 Marketplaceから「plantuml」と検索してインストールします。 下のリンクからでもインストールできます。 marketplace.visuals

    Visual Studio Code ではじめるシーケンス図