並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 375件

新着順 人気順

goの検索結果1 - 40 件 / 375件

  • 2024年版のDockerfileの考え方&書き方 | フューチャー技術ブログ

    最近はお客さんとの勉強会でDockerのドキュメントをつまみ食いして読むというのをやっていますが、改めて最新版を読んでみて、いろいろ思考が整理されました。2020年の20.10のマルチステージビルドの導入で大きく変わったのですが、それ以前の資料もweb上には多数あり「マルチステージビルドがよくわからない」という人も見かけるので過去の情報のアンラーニングに使っていただけるように改めて整理していきます。 仕事でPythonコンテナをデプロイする人向けのDockerfile (1): オールマイティ編で触れた内容もありますが改めてそちらに含む内容も含めて書き直しています。 本エントリーの執筆には@tk0miya氏から多大なフィードバックをいただきました。ありがとうございます。 基本的なメンタルモデル現代的な使い方を見ていくために「Dockerを使ってビルドする」というのはどのようなものか考えを整

      2024年版のDockerfileの考え方&書き方 | フューチャー技術ブログ
    • 「1億台の常時接続」を実現せよ! Nintendo Switchのプッシュ通知システム全面刷新の裏側 (1/3)

      アマゾン ウェブ サービス ジャパンは、2024年6月20日と21日、国内最大の年次イベントである「AWS Summit Japan」をハイブリッドで開催。150を超えるセッションが展開された。 本記事では、ニンテンドーシステムズによるセッション「Nintendo Switch向けプッシュ通知システムのリプレイス事例」をレポートする。登壇したのは、同社 システム開発部の林愛美氏と坂東聖博氏だ。 2017年のNintendo Switchの発売とあわせてリリースされた「プッシュ通知システム」。同社は、長期運用を見据えて、よりクラウドネイティブなシステムへのリプレイスを決定するが、大量のTCP接続を維持するための様々な課題が立ちふさがった。 本セッションでは、AWS FargateやNetwork Load Balancer(NLB)といったAWSのマネージドサービスを用いた、“最大1億台”級

        「1億台の常時接続」を実現せよ! Nintendo Switchのプッシュ通知システム全面刷新の裏側 (1/3)
      • 「カチカチ山」とかいう和製サウスパーク、いつからヌルくなったのか

        出典:国立国会図書館ウェブサイト (https://ndlsearch.ndl.go.jp/books/R100000002-I000007324904#bib) 『むぢなのかたきうち』,[江戸前期]. 国立国会図書館デジタルコレクション ( https://dl.ndl.go.jp/pid/2541118 )を加工して作成 『[お伽噺]』かち[カチ]山,宮田伊助,明14.9. 国立国会図書館デジタルコレクション ( https://dl.ndl.go.jp/pid/1167998 )を加工して作成 巌谷小波 著『桃太郎主義の教育』,東亜堂書房,大正4. 国立国会図書館デジタルコレクション ( https://dl.ndl.go.jp/pid/933639 )を加工して作成 三浦藤作 著『少年日本昔噺読本』,大同館書店,昭和9. 国立国会図書館デジタルコレクション ( ht

          「カチカチ山」とかいう和製サウスパーク、いつからヌルくなったのか
        • スイカゲームの作り方

          はじめに Go言語用のEbitengineというゲームエンジンに興味があったので、試しにスイカゲームもどきを作りってみました。Ebitengineを使うと意外と簡単にスイカゲームもどきを作る事ができたので、なるべく分かりやすく作り方を紹介してみようと思います。 まずは先に完成品をお見せします。ちなみにフルーツの回転は面倒くさいので実装しないことにしました。 ちなみにEbitengineはwasmでも普通に動きます。ビルドしたものをこちらに置いたのでブラウザから実際に動かす事ができます。 それではスイカゲームもどきを作って行きましょう。 描画する まず一番初めにフルーツの画像を作るところから始めます。これはリンゴ、オレンジ、ブドウ、パイナップル、メロン、スイカのつもりです。 続いてフルーツを定義します

            スイカゲームの作り方
          • サイバーエージェントのGitHub Copilot導入と 開発生産性

            【GitHub x サイバーエージェント共催】GitHub Copilotで変わる開発文化の現実 https://cyberagent.connpass.com/event/292982/

              サイバーエージェントのGitHub Copilot導入と 開発生産性
            • アウトプットのお題に選ぶ、奥深い自作「TODOアプリ」。mattn氏が教える、さらなる技術力の向上を目指すためのノウハウとは

              TOPコラムITエンジニアの自己発信ストラテジーアウトプットのお題に選ぶ、奥深い自作「TODOアプリ」。mattn氏が教える、さらなる技術力の向上を目指すためのノウハウとは アウトプットのお題に選ぶ、奥深い自作「TODOアプリ」。mattn氏が教える、さらなる技術力の向上を目指すためのノウハウとは 2024年7月8日 mattn 大学卒業後、ソフトウェアハウスやSIerなどでソフトウェア開発に携わる。vi派生のテキストエディタVimの日本語化やプラグイン、Go言語などでOSS(オープンソースソフトウェア)の開発・コミュニティ運営に参加し、2019年からGoogle Developers Expert。2021〜2023年 GitHub Stars。著書に『みんなのGo言語』(2016年、2019年に改訂2版、技術評論社、共著)、『Go 言語プログラミングエッセンス』(2023年、技術評論社

                アウトプットのお題に選ぶ、奥深い自作「TODOアプリ」。mattn氏が教える、さらなる技術力の向上を目指すためのノウハウとは
              • 最速で成果を出す方法|Go Kiritani / kubell 執行役員

                これは何か最速で成果を出す為にはどうすれば良いか?という質問をよくもらうのでその回答をするものです。良い感じのものが見当たらなかったので過去に自分が教えてもらった事をまとめました。せっかくまとめたので公開します。 4つのタイプの人がいるそれっぽい図1①思考先行型 思考力は高いけど,行動力が低い人。 考えてばかりで,なかなか行動に動けず成果が出ない。頭が良い人ほどこのタイプになってしまうので気をつけないといけない。 ②思考/行動 併用型 思考力も行動力も高い人。 思考と行動のバランスが良く,行動した結果を思考する事で正しい行動に繋がるサイクルが回っている。この人が1番早く成果が出る。 ③指示待ち型 思考力も行動力も低い人。 何をすれば良いか分からない状態で,動くこともできない。新しい環境に行くと,意外とこの状態の人も多いのでは。 ④行動先行型 思考力は低いけど,行動力が高い人。 何が正しいか

                  最速で成果を出す方法|Go Kiritani / kubell 執行役員
                • 囲碁AI、こわれる 人間の悪手に翻弄、大石死す AI社会に警鐘:朝日新聞デジタル

                  ","naka5":"<!-- BFF501 PC記事下(中⑤企画)パーツ=1541 -->","naka6":"<!-- BFF486 PC記事下(中⑥デジ編)パーツ=8826 --><!-- /news/esi/ichikiji/c6/default.htm -->","naka6Sp":"<!-- BFF3053 SP記事下(中⑥デジ編)パーツ=8826 -->","adcreative72":"<!-- BFF920 広告枠)ADCREATIVE-72 こんな特集も -->\n<!-- Ad BGN -->\n<!-- dfptag PC誘導枠5行 ★ここから -->\n<div class=\"p_infeed_list_wrapper\" id=\"p_infeed_list1\">\n <div class=\"p_infeed_list\">\n <div class=\"

                    囲碁AI、こわれる 人間の悪手に翻弄、大石死す AI社会に警鐘:朝日新聞デジタル
                  • いま日本の囲碁界で35年越しの偉業が成し遂げられるかもしれないのでもっと知られて欲しい

                    日本の囲碁は江戸時代以来、囲碁の家元四家が俸禄をもらう立場となり、切磋琢磨をしてきて長らく囲碁の本場となっていた。 しかし1980年代に韓国に追いつかれると、1990年代では抜き去られ、以後差が縮めることをできずここ30年ほど後塵を排してきた その差は依然として大きく、世界戦が開催されては日本の棋士は大体二回戦までに全滅する、ということが続いてきていた しかしここに来て最近日本勢の調子がいい 井山が爛柯杯にてベスト4まで進出すると、なんと応氏杯という4年に1度開催される囲碁のオリンピックで一力遼が元世界1位棋士、現在でもトップクラスの棋士・柯潔を三番勝負で破り決勝へ進出したのだ! これは1996年の依田紀基以来、実に28年前ぶりの快挙だ そして日本の棋士はまだこの大会で優勝したことがなく 第10回にして日本勢初の優勝がかかった決勝なのである! しかしこの快挙と大一番が全く日本中に知れ渡って

                      いま日本の囲碁界で35年越しの偉業が成し遂げられるかもしれないのでもっと知られて欲しい
                    • そろそろみんなに届いて欲しい囲碁一問一答。全部おれに聞け

                      囲碁最大の問題は情報が届いて欲しい人に情報を届ける手段がない事だと思う はっきり言って何度も何度も同じ事を書いているが未だにぷよ碁を知らない人がいるし、入門コンテンツから先に入るべき人がいきなり対局を初めて挫折している ブクマを見ていて、そいつに情報さえ届ける事が出来れば解決するのにそれができずに毎回もどかしい思いをしているのである そこは俺に任せろと言いたい。全部俺に聞けと だからこの増田を見たらブクマしてバスらせてくれ 自分は囲碁を覚えた瞬間から普及活動に携わっているから入門指導のプロフェッショナルである。数々の人間を囲碁に入門させてきた。 囲碁の入門書を読み終わった瞬間にどうしてこのシンプルかつ楽しいゲームがこんなに広まってないんだろう、という想いに駆られた。 このシンプルでかつ面白いという両輪の部分が重要だ。面白いけど複雑だったり、シンプルだけどつまらなかったら、そりゃ広まらないよ

                        そろそろみんなに届いて欲しい囲碁一問一答。全部おれに聞け
                      • 僕の考えた最強の Python 開発環境 (2024)

                        はじめに こんにちは, 普段は情報科学専攻の大学院生をしながらバックエンドエンジニアをやっている @koki-algebra です. 普段は Go をよく書いているのですが, 大学でやっている機械学習の研究では Python を使うことがほとんどです. Go のエコシステムに慣れきった私は Python の混沌とした環境に耐えきれず, 最強の開発環境を整えることを決意しました. 具体的には Package Manager, Formatter, Linter, Type Checker, Test Tool を選定し, VSCode の DevContainer を用いてポータビリティに優れた開発環境を作ることを目指します. また, Deep Learning では GPU が必須である場合が多いので, GPU 環境も同時に整えたいと思います. 以下のレポジトリが今回考えた開発環境のテンプ

                          僕の考えた最強の Python 開発環境 (2024)
                        • Goで解放したメモリが少しずつ戻ってくる現象 - knqyf263's blog

                          情報を発信する人のところに情報が集まることを日々実感しているので、Linuxのメモリ管理に特に詳しいわけではないのですが最近遭遇した問題について自分の理解を書いておきます。ざっと調べても同じことを書いている人を見つけられなかったので、公開には意義があると考えています。識者の方がフィードバックをくださると嬉しいです。 ※ AIの出力をベースに書いているのでいつもと少し文体が違います。 背景 要約 調査 再現の難しさ Goアプリケーションの調査 pprofによる分析 GCログの調査 Linuxの調査 Goランタイムの調査 GoのGCとTHP khugepagedの問題 Goランタイムにおける回避策 回避策の削除 max_ptes_noneのデフォルト値について MADV_NOHUGEPAGEをやめた理由 調査内容まとめ 解決策 検証 C言語 Go言語 まとめ 背景 Go言語で書かれたOSSのア

                            Goで解放したメモリが少しずつ戻ってくる現象 - knqyf263's blog
                          • スレッドとプロセスの違いを完全に理解する

                            はじめに こんにちは、FarStep です。 プログラミングを学ぶ中で、「プロセス」と「スレッド」という言葉を耳にしたことがある方は多いと思います。 しかし、これらの違いを明確に説明できる自信がない方も多いのではないでしょうか。 本記事では、プロセスとスレッドの違いについて、エッセンスを抽出して 解説します。 説明を簡潔にしましたので、本記事は 5 分程度で読み終えることができます。 本記事の内容を自分の言葉で説明できるようになれば、プロセスとスレッドの違いの理解は十分でしょう。 それでは、始めます 🚀 プログラムとは プロセスとスレッドの違いを理解する前に、まずは「プログラム」について理解しましょう。 プログラムとは、プログラミング言語で書かれた一連の命令 のことです。 プログラミング言語の例としては、以下のようなものがあります。 C 言語 Java Python Ruby JavaS

                              スレッドとプロセスの違いを完全に理解する
                            • 囲碁というゲームがこの先も活き残るには|Go-Up

                              ■TL;DR囲碁と 囲碁界、 そして、 囲碁のルールを持つゲーム。 この先も活き残るには、 この3つを分けて考えるべき。 ■はじめに「囲碁」。 残念ながら日本でのプレイヤー数が大きく減少し、世間で話題になることが少なくなり、「衰退の一途を辿っている」状況となっている。 私は20年ほど前に囲碁に興味を持ち、普及の一助として「初心者向け囲碁対局サイト Go-Up!」や、それ以前もいくつか活動をしていました。 初心者向け囲碁対局サイト Go-Up! https://go-up-online.com/ Go-Up!の閉鎖をもって、私の囲碁との関係は終了します。 長きに渡る活動の中で、囲碁に纏わるいろんな事を端から追ってきました。 せっかくなので、囲碁を巡る現況について、見えていることや考えを書き残して去りたいと思います。 囲碁界に知人もおらず、直接の繋がりや恩義もない、しがらみの無い部外者にしか言

                                囲碁というゲームがこの先も活き残るには|Go-Up
                              • 鍵生成には暗号論的に安全な乱数を使おう

                                SSHの鍵生成には暗号論的に安全な疑似乱数を使おうという話。 暗号論的に安全ではない疑似乱数がどれだけ危険かというのを、簡単なCTFを解くことで検証してみました。 背景 SSH公開鍵に自分の好きな文字列を入れる、という記事を読みました。 かっこいいSSH鍵が欲しい 例えばこのSSH公開鍵、末尾に私の名前(akiym)が入っています。 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFC90x6FIu8iKzJzvGOYOn2WIrCPTbUYOE+eGi/akiym そんなかっこいいssh鍵が欲しいと思いませんか? かっこいい!真似してみたい! そこまではいいんですが、問題は実装です。 秘密鍵を生成する際の乱数生成には高速化のために Goのmath/randを使っていますが、乱数が用いられるのは公開しない秘密鍵自体であり、このアルゴリズム自体はLagged Fib

                                • Goで実装された高速な
仮想待合室サーバの実装と詳解

                                  ペパボのテックカンファレンスで話しました。

                                    Goで実装された高速な
仮想待合室サーバの実装と詳解
                                  • 強い思想: Go を Web 開発に採用する上で

                                    Go は Web 開発に向いているか? 最も向いている領域は「CLI ツール」「ミドルウェア」「マイクロサービス」だと思っている。なぜならそれらはコードベースを比較的小さく抑えることを前提としているからだ。 Go は大きなコードベースを抱えやすい設計の言語になっていない。 ミドルウェアとマイクロサービスに関しては小さく作ることが正義。 CLI ツールに関しては単一責務なツールであれば小さくなるが,複数を束ねるツールであっても Web サービス開発に比べれば考えることは少なくて済む。 Web 業界における「一般的な Web 開発」,すなわちモノリスを基本とした中規模以上の開発にははっきりと 向いていない と言うべきだろう。 フラットパッケージは正義か? 私が SNS で何度か言及した以下の記事がある。 フラットパッケージ戦略は,確かに Go の文化圏においては一定の支持を集めている。Go の

                                      強い思想: Go を Web 開発に採用する上で
                                    • 自社サービスのバックエンドを Go から TypeScript へ切り替えるための整理

                                      切り替える理由 自社の主力製品で利用している技術(WebRTC / WebTransport)がブラウザベースのため TypeScript を利用する Go を採用したのは sqlc が使いたかったという理由 sqlc-gen-typescript が出てきたのでもう Go を使う理由がなくなった 自社サービスチーム全員が Go にまったく興味が無い sqlc 自体は便利 そもそも自社に Go への興味がある人がいない 自社サービスの規模ではボトルネックになるのはデータベースであって言語ではない もしアプリでスケールが必要なときは Rust や Erlang/OTP に切り替えれば良い コネクションプールは PgBouncer を利用すればいい TypeScript からは 1 コネクション 1 接続で問題無い どうせフロントエンドでは TypeScript を書く 自社では React

                                        自社サービスのバックエンドを Go から TypeScript へ切り替えるための整理
                                      • Makefile覚書: Goアプリ開発に役立ちそうな基礎知識 | フューチャー技術ブログ

                                        はじめにTIG真野です。育休明けです。 フューチャー社内のタスクランナーはmakeやTaskなど複数の流派があり、チームによって使い分けられています。個人的にはmakeで良いんじゃないかと思っていますが、Taskも良いですよね。 makeは細かい記法をいつも忘れる+調べるとC言語向けの情報が出てきて脳内変換に手間を感じたため、makeを用いてWebバックエンドアプリをGoで開発するということをテーマに、役立ちそうな情報をまとめます。 なお、今記事におけるmakeは、GNU Makeを指します。バージョンは以下で動かしています。 MakefileのためのEditorConfigMakefileのインデントはハードタブである必要があります。誤りを防ぐためにもEditorConfigを設定しておくと良いでしょう。 makeは通常、Makefileという名称をデフォルトで認識しますが、同一フォルダ

                                          Makefile覚書: Goアプリ開発に役立ちそうな基礎知識 | フューチャー技術ブログ
                                        • シングルスレッドやマルチプロセスなどの並行処理の話について、 すぐに忘れてしまいます。 どうしたらもっと知識が定着すると思いますか? 色んなライブラリーでAPIサーバーを立ててパフォーマンスの差などを見てみたりするのですが、結局よくわかりませんでした。 | mond

                                          シングルスレッドやマルチプロセスなどの並行処理の話について、 すぐに忘れてしまいます。 どうしたらもっと知識が定着すると思いますか? 色んなライブラリーでAPIサーバーを立ててパフォーマンスの差などを見てみたりするのですが、結局よくわかりませんでした。 フレームワークに頼って実装していると、そのフレームワークが内部でどの様な仕組みで並列または並行処理しているのかが理解できず、ただ使っているだけの状態になり得ます。 フレームワークの設計者からすると、プログラマがそれらを気にしなくても利用できるというのがプロジェクトのゴールでもあるので、それはそれで正しいのですが「並列処理」や「並行処理」を理解したいというモチベーションでは逆にそれが邪魔をしてしまうかもしれません。 並行処理や並列処理を学ぶのであれば、API サーバ等といった物ではなく、コード片で学び始めるのが良いと思います。 例えば Rub

                                            シングルスレッドやマルチプロセスなどの並行処理の話について、 すぐに忘れてしまいます。 どうしたらもっと知識が定着すると思いますか? 色んなライブラリーでAPIサーバーを立ててパフォーマンスの差などを見てみたりするのですが、結局よくわかりませんでした。 | mond
                                          • Japanese Version - 100 Go Mistakes and How to Avoid Them

                                            Go Mistakes Book Details Go言語でありがちな間違い このページは『100 Go Mistakes』の内容をまとめたものです。一方で、コミュニティに開かれたページでもあります。「ありがちな間違い」が新たに追加されるべきだとお考えでしたら community mistake issue を作成してください。 Jobs Is your company hiring? Sponsor the Japanese version of this repository and let a significant audience of Go developers (~1k unique visitors per week) know about your opportunities in this section. 注意 現在、大幅に多くのコンテンツを追加して強化している新しい

                                              Japanese Version - 100 Go Mistakes and How to Avoid Them
                                            • 「GOする」と、もれなく手数料!? タクシー不足の原因にも…現場から不満噴出「配車アプリ」の裏側 | FRIDAYデジタル

                                              いつの間にか、いろいろな「手数料」が… 登場したばかりの頃は便利なシステムに思えたが、いつの間にかいろいろ“手数料”をとられるようになっているタクシー配車アプリ「GO」。 調べてみると、昨年11月14日の一般乗用旅客自動車運送事業の運賃改定に伴い、「迎車料金」がタクシー事業者ごとに変更されることになり、同時期に「アプリ手配料」なる手数料がプラスされたため、あまり話題にならなかった経緯がある。 もともと「運賃+迎車料金420円」のところ、変更後に「運賃+迎車料金300円〈※〉+アプリ手配料100円〈※〉(※タクシー会社・エリアによって異なる)」になったと説明されると、利用者側にはお得になった印象すらあったかもしれない。 しかし、混雑時間帯などによって、周辺のタクシー車両に空車がない場合に優先的に手配される「優先パス手配料」(300~980円。一定ではない)や、乗務員や車種指定、空気清浄機搭載

                                                「GOする」と、もれなく手数料!? タクシー不足の原因にも…現場から不満噴出「配車アプリ」の裏側 | FRIDAYデジタル
                                              • 内製オブジェクトストレージサーバ「b3」でコスト最適化を目指した話 - Mirrativ Tech Blog

                                                インフラストリーミングチームの近藤 (@udzura) です。今回は、ミラティブで内製しているオブジェクトストレージサーバ「b3」の紹介記事を書きたいと思います。 今回の記事は、6月にGopher Talkというイベントで発表した「Go製ミドルウェアを実践投入するにあたりやったこと」をベースに、内容を詳細にしたり直近の開発状況に合わせて更新したものです。一部内容はこの発表と重複していますがご了承ください。 オブジェクトストレージサーバを内製した背景 1. 大量オブジェクトの操作や増え続ける転送量に対応したい 2. 一定期間しかファイルの保持をしない 3. オンメモリ/SSD/HDDを組み合わせたチューニングがしたい オブジェクトストレージb3の特徴 S3 互換の基本的なAPIを実装 LSM-Tree index+WALなDB/マージ操作に対応 I/O 帯域を制限可能 非同期レプリケーション

                                                  内製オブジェクトストレージサーバ「b3」でコスト最適化を目指した話 - Mirrativ Tech Blog
                                                • Why Is SQLite Coded In C

                                                  Note: Sections 2.0 and 3.0 of this article were added in response to comments on Hacker News and Reddit. Since its inception on 2000-05-29, SQLite has been implemented in generic C. C was and continues to be the best language for implementing a software library like SQLite. There are no plans to recode SQLite in any other programming language at this time. The reasons why C is the best language to

                                                  • 米ホワイトハウス「将来のソフトウェアはメモリ安全になるべき」と声明発表。ソフトウェアコミュニティに呼びかけ

                                                    米ホワイトハウス「将来のソフトウェアはメモリ安全になるべき」と声明発表。ソフトウェアコミュニティに呼びかけ 米ホワイトハウスの国家サイバー局長室(The White House Office of the National Cyber Director:ONCD)は、サイバー空間における攻撃対象領域を積極的に削減する目的で、テクノロジーコミュニティやソフトウェアコミュニティに対してメモリ安全(Memory Safe)なソフトウェアの実現を積極的に呼びかけるプレスリリース「Future Software Should Be Memory Safe」(将来のソフトウェアはメモリ安全になるべき)を発表しました。 プレスリリースの中で、国家サイバー局長Harry Coker氏は「私たちは国家として、サイバースペースにおける攻撃対象領域を減らし、あらゆる種類のセキュリティバグがデジタルエコシステムに

                                                      米ホワイトハウス「将来のソフトウェアはメモリ安全になるべき」と声明発表。ソフトウェアコミュニティに呼びかけ
                                                    • GopherがRust入門したので違いをまとめてみた

                                                      はじめに ウホウホ。 Rustを使い始めてちょうど2年くらい経って、すこしRustのことがわかってきたので、改めてGoとRustのそれぞれの違いを整理したいなと思いこの記事を書きました。 筆者はウェブ開発の経験しかないので、ウェブを中心にまとめています。 気づいたらかなりな量になってしまったのとGopher向けにRustを紹介するような記事になってしまいましたが、よければ読んでみてください。 筆者について Goを使い始めて7年ほど経っていて、これまでCLI/TUIツールをいくつか作ってきました。 スペシャリストではないですが、プロダクトでGoを書く分には特に問題ないレベルかなと思います。 Rustは2022年夏ころから使い始めてちょうど2年ほど経ちました。 なにかツールを作ったわけではないですが、勉強がてらにいくつか作ったもの・書いた本があります。 普通にRustを書く分には問題ないですが

                                                        GopherがRust入門したので違いをまとめてみた
                                                      • Go でマルチスレッドプログラミングする際に最低限知っておくべきこと - Cybozu Inside Out | サイボウズエンジニアのブログ

                                                        この記事は、CYBOZU SUMMER BLOG FES '24 (クラウド基盤 Stage) DAY 10 の記事です。 こんにちは。クラウド基盤本部の野島です。Go は goroutine やチャネルなどの仕組みが備わっており、簡単にマルチスレッドなプログラムを書くことができる言語だと言われています。しかし、マルチスレッドプログラミングには独特の罠があり、何も知らない人が雰囲気でコードを書くとわかりにくいバグを仕込んでしまうリスクが非常に高いです。 この記事では、マルチスレッドプログラミングに詳しくない人に向けて、そのような罠を避けるための方法を紹介します。この記事は Go の基本的な使い方を知っていることを前提としています。 這い寄るデータ競合の恐怖 まずは以下のようなプログラムを考えてみましょう。これは複雑な計算を行って結果を返すような HTTP サーバーのコードです。 // 複雑

                                                          Go でマルチスレッドプログラミングする際に最低限知っておくべきこと - Cybozu Inside Out | サイボウズエンジニアのブログ
                                                        • ちょっとJavaのsynchronizedをGoに移植しようとしたはずが、なぜか1万文字の作文ができた - エムスリーテックブログ

                                                          AI・機械学習チームのブログリレーも9日目になりました。同チームの横本@yokomotodです。 本日はJavaとGoを題材に並行プログラミングまわりの自由研究をしたお話をしてみたいと思います。 3部構成で、パート1では発端となった「排他制御」について、パート2では「メモリの可視化」について、それぞれJavaとGoを比べてみました。 最後にパート3では、それらの動作を規定する「メモリモデル」について、わかりやすく解説されているリソースを紹介します。 長過ぎる! 3行で!! パート1: synchronized = 「排他制御」? Java synchronized vs Go sync.Mutex Goで再入可能なロック? 仮にGoで再入可能なロックを実装するなら? Javaが再入可能を選択した理由 パート2. sycnhronized = 「排他制御」+「メモリ可視性の保証」 Javaの

                                                            ちょっとJavaのsynchronizedをGoに移植しようとしたはずが、なぜか1万文字の作文ができた - エムスリーテックブログ
                                                          • 趣味でつくった2Dゲームエンジンが導いた「幸」あるキャリア 己の欲求に従い続けた「Ebitengine」開発者に迫る レバテックラボ(レバテックLAB)

                                                            TOPフォーカス趣味でつくった2Dゲームエンジンが導いた「幸」あるキャリア。己の欲求に従い続けてきた「Ebitengine」開発者に迫る 趣味でつくった2Dゲームエンジンが導いた「幸」あるキャリア。己の欲求に従い続けてきた「Ebitengine」開発者に迫る 2024年5月15日 Odencat株式会社 CTO 星 一(ほし・はじめ) ソフトウェアエンジニア。2009年にドワンゴでキャリアをスタートし、ドワンゴの関連会社やGoogle Japanなどを経て、2023年より現職。趣味では大学時代から2Dゲームエンジン開発に注力し、Google時代の2013年にEbitengineに着手し始める。2015年にVer1.0をリリース。カクヨムで「オレオ」と3文字だけ書かれた小説を手がけ、週間総合ランキング1位を獲得したことがある。 X GitHub Ebitengine公式サイト Odencat

                                                              趣味でつくった2Dゲームエンジンが導いた「幸」あるキャリア 己の欲求に従い続けた「Ebitengine」開発者に迫る レバテックラボ(レバテックLAB)
                                                            • タクシー利用者のモラルの低下にタクシー会社から切実な「お願い」 | おたくま経済新聞

                                                              この件について、X(Twitter)上で問題提起をおこなったのは、神奈川県藤沢市にある江ノ島タクシーの公式アカウント。特に「GOアプリ」を使用する人に向けて、モラルやマナーについて呼びかけています。 江ノ島タクシーの場合では、「GOアプリ」を通じて発生しているといい、こうしたキャンセル方法では「システム上、(タクシー会社側では)キャンセル料としても回収できないことになっています」とのこと。 ちなみにアプリ利用者に対しキャンセル料金が発生する場合でも、「GOアプリ」側のみに支払われ、タクシー会社には支払われない仕組みになっているそうです。 江ノ島タクシーの公式Xは「システム上出来てしまうのが悪いと言われればそれまで」と前置きしながらも、タクシー会社には人件費や燃料費がかかり、ドライバーは売上にならないので給与にも影響が出てしまうと説明。 最後に「ご利用のお客様におかれましては、モラルを守って

                                                                タクシー利用者のモラルの低下にタクシー会社から切実な「お願い」 | おたくま経済新聞
                                                              • Go界隈で巻き起こった go:linkname 騒動について - ANDPAD Tech Blog

                                                                お久しぶりです、ANDPADボードの tomtwinkle です。 この記事はGoの go:linkname 騒動は 6/18に行われた Go Bash で話した内容を要約したものです。 そもそも go:linkname とは何かといえば internal packageやprivate var/funcなど普通はアクセスできないオブジェクトシンボルをエイリアス出来るようCompilerに指示して、アクセス可能にするcompiler directiveです。 go:linkname はprivateな変数へアクセス可能な便利なものでしたが unsafe packageのimportを必須とする通り、せっかく互換性や安全を考慮して作られているGoプログラムを簡単に破壊できる諸刃の剣でした。 詳細は発表スライドを見てください。 go:linkname 禁止騒動 Go 1.23 のリリースまで2

                                                                  Go界隈で巻き起こった go:linkname 騒動について - ANDPAD Tech Blog
                                                                • なぜ Go ではロガーをコンストラクタ DI してはならないのか

                                                                  問題のある実装パターン 共通実装 以下のような applog パッケージ上のロガー実装を考えましょう。ここでは Go 標準の log.Logger をラップしていますが,様々な実装に拡張できることを想定しています。 package applog import ( "fmt" "log" "os" ) type Logger interface { Info(message string) Error(message string) } func NewLogger() Logger { return &logger{ inner: log.New(os.Stdout, "", log.LstdFlags), } } var _ Logger = (*logger)(nil) type logger struct { inner *log.Logger } func (l *logger)

                                                                    なぜ Go ではロガーをコンストラクタ DI してはならないのか
                                                                  • Organizing a Go module - The Go Programming Language

                                                                    A common question developers new to Go have is “How do I organize my Go project?”, in terms of the layout of files and folders. The goal of this document is to provide some guidelines that will help answer this question. To make the most of this document, make sure you’re familiar with the basics of Go modules by reading the tutorial and managing module source. Go projects can include packages, co

                                                                      Organizing a Go module - The Go Programming Language
                                                                    • 組織のコード品質を向上させる “レビューシステム”の取り組み

                                                                      dmm.go #6 の登壇資料です。 https://dmm.connpass.com/event/295065/

                                                                        組織のコード品質を向上させる “レビューシステム”の取り組み
                                                                      • awslim - Goで実装された高速なAWS CLIの代替品を作った - 酒日記 はてな支店

                                                                        最初に3行でまとめ AWS CLIは便利です。しかし起動が遅いので、Goで実装された高速な(ただし機能は少ない)代替品を作りました。awslim といいます リリースバイナリは無駄に大きいので、必要な機能だけを組み込んだビルドを簡単にできるようにしてあります。ビルドして使うのがお勧めです どうぞご利用下さい github.com 以下はこれに至るまでの経緯とか、実装や使い方の話とかです。長いです。 作成の経緯 AWSの各種サービスにアクセスするための AWS CLI は、スクリプトやコマンドラインから処理を自動化するために大変便利なツールです。AWSでサーバーサイドの開発、運用している人であれば、ほぼ全員がお世話になっているんじゃないかと思います。 しかし、AWS CLI (コマンド名aws) には「起動が重い」という問題があるなとずっと思っていました。具体的には、aws --versio

                                                                          awslim - Goで実装された高速なAWS CLIの代替品を作った - 酒日記 はてな支店
                                                                        • Goで自作RDBMS - abekoh's tech note

                                                                          はじめに Goで自作RDBMSに挑戦してみたログです。自作、といっても大部分は参考にした書籍の移植です。 ここ1年くらいRDBに向き合う機会が多く、その内部実装を手を動かしながら身を持って理解してみたいというモチベーションから始めてみました。ちょうど会社の『内部構造から学ぶPostgreSQL』読書会に参加したこともモチベーション上げるきっかけとなりました。 (他の方の記事ですが、読書会の記録はこちら↓) 『内部構造から学ぶPostgreSQL』読書会を完走した感想 [改訂3版]内部構造から学ぶPostgreSQLの社内読書会振り返り データベースをデータの箱としか思っていなかった私の『内部構造から学ぶPostgreSQL』を読んだ感想 普段何気なく使ってるRDBMSですが、ACID特性を守るため・大量の読み書きを捌くため、非常に緻密に設計されております。 これを完全再現といかなくとも自分

                                                                            Goで自作RDBMS - abekoh's tech note
                                                                          • 【Go】HTTPサーバーは安全に終了させましょう

                                                                            はじめに こんにちは。都内でソフトウェアエンジニアをしているtomoriです。 突然ですが、Go言語でHTTPサーバーを実装する際、サーバーの終了処理を適切に実装できている自信はありますか? 自分が開発に携わっているプロダクトでは、ほんの最近まで下記のような不適切な終了処理を行なっていました(話を簡単にするためにここでは panic を使っています)。 err := http.ListenAndServe(":8080", handler) if err != nil { panic(err) } HTTPサーバー実装のサンプルとかでよく見るやつですね。 これだとアプリケーション側で、いわゆる Graceful Shutdown ができておらず、実行環境にて不具合を引き起こす恐れがあります。 というわけで、最近それを修正したのでアウトプットとして記事にします。 Go言語でHTTPサーバーを

                                                                              【Go】HTTPサーバーは安全に終了させましょう
                                                                            • WebAssembly の過去・現在・未来 - Qiita

                                                                              はじめに WebAssembly (略して Wasm) では WASI や WIT、 Component Model など様々な仕様があります。 それぞれが登場した背景、モチベーションなどを理解することでなんとなく概要を掴んでいくことができるのではないかと考えたため、過去・現在・未来と時間軸で整理してみました。 まず Wasm とその特徴に関して簡単に紹介した後、Wasm の過去として生まれた背景やモチベーションを紹介します。 そして現在の Wasm がなぜ注目を集めているのか、そして現在策定中の仕様と目指している未来について紹介します。 WebAssembly とはなにか WebAssembly はスタックベースの仮想マシン用バイナリ命令フォーマットの仕様です。Wasm と略されます。 Wasm ファイル(Wasm モジュール)は一般に .wasm という拡張子で表されるバイナリファイル

                                                                                WebAssembly の過去・現在・未来 - Qiita
                                                                              • PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜 - Mirrativ Tech Blog

                                                                                こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術をPerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlとGoという2つの環境を同時に運用していますが、 基本的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレガシーな実装においては顕著) そこで PerlXS を利用することで Perl から Go を直接呼び出せるようにできないかと考え検証を進めることにしました Goの -buildmode=c-shar

                                                                                  PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜 - Mirrativ Tech Blog
                                                                                • Goのerrorがスタックトレースを含まない理由 - methaneのブログ

                                                                                  Twitterでこんな記事を見かけたので。 zenn.dev ジェネリクスの件もそうですが、Goの言語設計は現実主義なのになにか特別なポリシーによるものだと宗教化されてしまって、ファンには勝手に崇拝されてアンチにはディスられがちだなーと感じます。 Goのエラー処理を改善する実験プロジェクトxerrorsがGo本体のerrorsにマージされた時、 errors.New() はスタックトレースを取得していました。しかしGo 1.13がリリースされる前に削除されました。 削除された理由の1つは、今までの errors.New() のパフォーマンスに依存していたコードの速度が低下しアロケーションが増えることです。 github.com しかし、これが理由だと今まで思ってたのですが、実際にはもう1つより重要な理由がありました。エラーのフォーマットです。エラーに複数のフォーマットを持たせようという提案

                                                                                    Goのerrorがスタックトレースを含まない理由 - methaneのブログ