タグ

ブックマーク / gihyo.jp (28)

  • sqlcとdockertestでデータベースを使ったテストを書こう | gihyo.jp

    Goにおけるデータベース操作とテスト Goでデータベースを操作する際には、標準パッケージであるdatabase/sqlGORM、entなどの様々な選択肢が存在します。多くのライブラリではGoのコードを定義してSQLを生成しますが、sqlcはSQLをコンパイルしてGoのコードを生成するのが特徴のライブラリです。 このアプローチには、最終的に実行されるSQLが明らかであることやデータベースとやりとりするためのデータ構造を自分で定義する必要がないことといったメリットがあります。また、コンパイル時にSQLを解析し型や引数名の間違いを検出できます。そしてなにより、非常にシンプルです。 記事では、sqlcの一歩進んだ使い方としてdockertestと組み合わせたテストの書き方について紹介します。dockertestとは、Dockerコンテナを立ち上げてテストを実行するための使いやすいコマンドを提供

    sqlcとdockertestでデータベースを使ったテストを書こう | gihyo.jp
  • 第54回 Linuxカーネルのコンテナ機能 ―cgroup v2から使うCPUの帯域幅制限(2) | gihyo.jp

    前回は、CPUコントローラでの帯域幅制限がどのように行われるのかについて簡単に説明しました。 前回の最後に、説明のために挙げた例がかなり理想的な状況であると書きました。今回は、帯域幅制限の機能を詳しく見ていくために、前回よりはもう少し複雑な状況について説明していきましょう。 未使用クォータの返却 前回説明で示した例では、CPUは割り当てられたスライスをすべて使いきっていました。しかし、複数のCPUがある環境で、タスクが終了したり、I/O待ちなどにより、クォータが割り当たったCPUで実行可能なタスクがなくなった場合はどうなるでしょう? 図1 割り当てられたスライスが使われない場合 図1のように、クォータプールに10msクォータが残っているとします。 ①でCPU1でCPUを使用するタスクから要求がありスライスが転送され、クォータの残りが5msとなりました ②で再度CPU1でCPUを使用するタス

    第54回 Linuxカーネルのコンテナ機能 ―cgroup v2から使うCPUの帯域幅制限(2) | gihyo.jp
  • 第784回 Sniffnetやbandwhichでネットワークの流量と宛先を簡単に確認する | gihyo.jp

    連載を読むような人なら、インターネットはある種の生命線になっていることでしょう。普段から様々なネットワーク通信ソフトウェアにお世話になっているはずです。ある日突然、通信が遅くなった、何かが負荷をかけているかもしれない、今回はそんな状況を気軽に調べられるRust製のGUIアプリケーション「Sniffnet」とCLIツール「bandwhich」について紹介します。 Rust製の高速なネットワークモニタリングツールであるSniffnet ネットワークに接続されたコンピューター上のソフトウェアは、日々何らかのマシンと通信を行っていることが一般的です。特にデスクトップマシンなら、ソフトウェアのアップデートDHCPによるアドレスの確保、arp/neighに対する応答などなど、ユーザーが「何もしていなくても⁠」⁠、なにがしかの通信は行われています。 これはコンピューターでの作業中も同じで、何気なくブ

    第784回 Sniffnetやbandwhichでネットワークの流量と宛先を簡単に確認する | gihyo.jp
  • 新しい静的コード解析ツール「Ruff」をご紹介 | gihyo.jp

    福田(@JunyaFff)です。今月の「Python Monthly Topics」は、最近私が個人的に気になっている静的コード解析ツールRuffについて紹介します。 どんなプログラミング言語でも、静的コード解析ツール(リンター)やフォーマッターは非常に便利です。Pythonでコードを書く場合、皆さんはどんなツールを使っているでしょうか?Flake8やBlack、isortなどが人気で、世界中で多くのPythonエンジニアに利用されています。 Ruffは2022年8月にリリースされた比較的新しい、Pythonのリンター兼フォーマッターです。Ruffはリリースからまだ半年足らずしか経っておりませんが、多くの著名なライブラリで採用[1]され、毎日のようにアップデートされています。2023年3月時点でのRuffの使い方、そしてこれからの発展について、記事で紹介します。 Ruffとは? ここでは

    新しい静的コード解析ツール「Ruff」をご紹介 | gihyo.jp
  • ChatGPT APIを取り巻くライブラリ 〜LangChainとguidanceの紹介 | gihyo.jp

    こんにちは! 逆瀬川(@gyakuse)です! 前回はOpenAIが公開しているChat APIWhisper APIを用いて議事録文字起こしアプリケーションを作ってみました。今回は、Chat APIを便利に使うためのライブラリであるLangChainとguidanceを紹介していきます。 なぜ便利に使うためのライブラリが必要なのか? 単純にChat APIにリクエストを送るだけであれば、各言語に用意されたライブラリを使うだけで良いでしょう。たとえば、Pythonにおいてはopenai-pythonが用意されています。前回紹介したとおり、Chat APIを使うだけなら以下のようなリクエストを作るだけで済みます。 import openai openai.api_key = "sk-..." # APIキー completion = openai.ChatCompletion.create

    ChatGPT APIを取り巻くライブラリ 〜LangChainとguidanceの紹介 | gihyo.jp
    ktykogm
    ktykogm 2023/05/24
  • ChatGPTのおさらいと、プログラミングに活用するための第一歩 | gihyo.jp

    大量の文章から学習することで、多言語を取り扱う能力だけでなく、高度な推論能力まで手に入れました。 GPT-3.5、とりわけその初期モデルのCodexはGitHubに存在する5400万の公開リポジトリから採取された159GBのPythonコードでGPT-3をfine-tuning(微調整)することで生まれました。ChatGPTがとりわけPythonが得意なのはここから来ています。 ChatGPTの学習データを考えることはその能力を発揮させるときに極めて有効です。質問時も以下のように、『⁠涼宮ハルヒの憂』というライトノベル作品について日語で聞いたときはSOS団の略称を間違えるなどしますが、英語ではほぼ期待通りの回答を見せます。 図1 『ハルヒの憂』について日語で聞いた場合の回答 図2 『ハルヒの憂』について英語で聞いた場合の回答 知ったかぶりをするChatGPT ところで、ChatG

    ChatGPTのおさらいと、プログラミングに活用するための第一歩 | gihyo.jp
    ktykogm
    ktykogm 2023/03/24
  • Linux 6.1の注目機能「MGLRU」―メモリ管理に取り入れられたエイジングシステム | gihyo.jp

    Linus Torvaldsは12月11日(米国時間⁠)⁠、前週の告知どおりに「Linux 6.1」の正式リリースをアナウンスした。 Linux 6.1 -Linus Torvalds Linux 6.1はメインライン開発ではじめてRustを採用したことが大きな話題となったが、そのほかにもユーザ空間におけるメモリサニタイザーツールに似た動的エラー検出の「KMSAN」やB-treeベースのデータ構造「Maple Tree⁠」⁠、AMDの新しいPMFドライバのサポートなど多くのアップデートが行われている。Googleの開発者がメインラインへのマージを提案してきた「MGLRU(Multi-generational LRU⁠)⁠」もそのひとつで、古参のカーネル開発者であるAndrew MortonもMGLRUのメインライン化をバックアップしてきた。 Linuxカーネルではメモリ管理に「LRU(Le

    Linux 6.1の注目機能「MGLRU」―メモリ管理に取り入れられたエイジングシステム | gihyo.jp
  • eBPFとWASMに思いを馳せる2022 ~TechFeed Conference 2022講演より | gihyo.jp

    記事は、2022年5月に開催されたTechFeed Conference 2022のセッション書き起こし記事「eBPFとWASMに思いを馳せる2022(Masaya Aoyama⁠)⁠ — TechFeed Conference 2022講演より」を転載したものです。オリジナルはTechFeedをご覧ください。 日は「eBPFとWASMに思いを馳せる2022」というテーマで、CyberAgentの青山が発表させていただきます。 ふだんはKubernetes基盤のプロダクトオーナーとして勤めるほか、いくつかの会社で技術顧問やカンファレンスのCo-chairなどを務めています。また著書としては『Kubernetes 完全ガイド』(⁠インプレス)があります。 日は、WASMとeBPF関連のプロダクトの紹介を行っていきたいと思います。 WASMのおさらい WASMのおさらいですが、WASM

    eBPFとWASMに思いを馳せる2022 ~TechFeed Conference 2022講演より | gihyo.jp
  • 第1章 進化するHTTPの歩み ~ HTTP/1.1とHTTP/2をおさらいし、HTTP/3の基本を知る | gihyo.jp

    HTTP/3入門 第1章進化するHTTPの歩み ~ HTTP/1.1とHTTP/2をおさらいし⁠⁠、HTTP/3の基を知る この特集記事は2021年6月24日に発売されたWEB+DB PRESS Vol.123に掲載された特集1「HTTP/3入門」を再掲したものです。 先日2022年6月にHTTP/3を含むHTTP関連の仕様が正式なRFCとなりました。ここではRFCの正式リリースに伴い、いち早く変更点を抑え、囲みボックスを用いた加筆解説でわかりやすくお伝えしております。 特集のはじめに HTTP(Hypertext Transfer Protocol)の最新版であるHTTP/3が登場しました。HTTP/3では、より安全で速い通信が行えます。特集では、今までのHTTPにあった課題と、HTTP/3で課題をどのように解決し、改善が行われたかを解説します。 章では、HTTPそのものと各バージ

    第1章 進化するHTTPの歩み ~ HTTP/1.1とHTTP/2をおさらいし、HTTP/3の基本を知る | gihyo.jp
  • 第169回 pt-variable-advisorを使ってみよう | gihyo.jp

    連載にて度々登場しているPercona Toolkitの中に、pt-variable-advisorというものがあります。これは、SHOW VARIABLESの結果をもとに設定の見直しを提案してくれるツールになります。今回は、このpt-variable-advisorを使って設定を見直していきましょう。 なお、今回使用するPercona Toolkitのバージョンは、2022年4月時点で最新の3.3.1です。また、使用しているMySQLは8.0.28を使用しています。 また、Percona Toolkitのインストール方法などは過去に説明していますので併せてご確認ください。 第9回 pt-query-digestを使って遅いクエリーを発見する pt-variable-advisor pt-variable-advisorは、SHOW VARIABLESの結果をもとに、ルールに従っておすす

    第169回 pt-variable-advisorを使ってみよう | gihyo.jp
  • 第168回 MyDumperを使ってみよう[その1] | gihyo.jp

    MySQLの論理バックアップツールというと、mysqldumpは皆さんご存知のことでしょう。mysqldumpはシリアルで処理されるため、大きなデータベースのバックアップとリストアには大変時間がかかりました。 その後mysqlpumpが登場し、これによりバックアップはパラレルで処理するため高速化されましたが、リストアはmysqldumpと同様シリアルで処理されるため、これもまた時間がかかりました。 mysqldumpmysqlpumpについては以下記事をご参照ください。 第15回 mysqldumpを使ってバックアップする 第153回 mysqlpumpを使ってバックアップを取ってみる MyDumperはバックアップとリストアをパラレルで処理するため、mysqldumpmysqlpumpよりも高速です。 ただし、最近ではMySQL ShellにMySQL Shellダンプユーティリティ

    第168回 MyDumperを使ってみよう[その1] | gihyo.jp
  • 第174回 MySQLのデータ暗号化いろいろ | gihyo.jp

    概要 これらの暗号化についての概要を簡単に説明したいと思います。 前提 暗号化関数以外のデータ暗号化方式は、事前にキーリングプラグインをインストールしておく必要があります。詳しくは6.4.4 MySQL キーリングをご確認ください。 MySQL設定ファイル(my.cnf)のパラメータearly-plugin-loadにkeyring_file.soを設定します。 early-plugin-load=keyring_file.so マスター暗号化キーとテーブルスペースキーで構成される2層暗号化キーアーキテクチャを使用します。アプリケーションがデータにアクセスする場合、マスター暗号化キーを使用してテーブルスペースキーを復号化します。そのため、マスター暗号化キーの管理が必要になります。マスター暗号化キーが失われた場合、暗号化されたファイルのデータはリカバリできなくなりますので、お気をつけください

    第174回 MySQLのデータ暗号化いろいろ | gihyo.jp
  • 第688回 eBPFのコンパイラーに対応したツールでさまざまな挙動を可視化する | gihyo.jp

    実行中のシステムの挙動を詳細にトレースする仕組みは、特に「よくわからない問題」に遭遇している時に重要です。今回はLinux向けのトレーシングツールの命とも言えるeBPFを利用した各種ツールを紹介します。 eBPFに関する記事が今回以降、数回にわたって解説されています。あわせてご覧ください。 第688回 eBPFのコンパイラーに対応したツールでさまざまな挙動を可視化する(今回の記事) 第690回 BCCでeBPFのコードを書いてみる 第692回 sysfsやbpftoolを用いたeBPFの活用 第694回 libbpfとclangでポータブルなBPF CO-REバイナリ作成 第695回 入門BPF CO-RE eBPFとBPF Compiler Collection 改めて言うまでもなく、Linuxカーネルもしくはカーネル上で動いている各種タスクのパフォーマンスや挙動を調べなくてはならない

    第688回 eBPFのコンパイラーに対応したツールでさまざまな挙動を可視化する | gihyo.jp
    ktykogm
    ktykogm 2021/12/31
  • LINEのインフラ基盤「Verda」のビジョンとSREが果たすべき役割とは | gihyo.jp

    インタビュイー Verda SREチーム マネージャー 萬治渉 昨今、ソフトウェアエンジニアリングを活用し、サービスの運用効率化や信頼性向上に取り組む考え方や方法論である「SRE」(⁠Site Reliability Engineering)が広まりつつあります。LINEでも2019年にSREに取り組む専門チームが発足しており、同社のプラットフォームである「Verda」で提供するサービスの運用業務の効率化などに取り組んでいます。そのSREチームを率いるマネージャーである 萬治渉氏に、SREチームが発足した背景や現状の取り組みなどについてお話を伺いました。 LINEの多数のサービスを支える「Verda」 ――まずVerdaの概要について教えてください。 萬治:LINEでは一般的なパブリッククラウドを使う方針は基的には採らず、大部分のインフラを自社で保有し運用しています。このインフラのプラッ

    LINEのインフラ基盤「Verda」のビジョンとSREが果たすべき役割とは | gihyo.jp
    ktykogm
    ktykogm 2021/07/27
  • 第55回 MySQLのド定番機能 レプリケーションの構築運用に新風、PostgreSQLの活用事例セミナー報告とバージョンアップ情報 | gihyo.jp

    OSSデータベース取り取り時報 第55回MySQLのド定番機能 レプリケーションの構築運用に新風、PostgreSQLの活用事例セミナー報告とバージョンアップ情報 この連載では、OSSコンソーシアム データベース部会のメンバーが、さまざまなオープンソースデータベースの毎月の出来事をお伝えしています。 オープンソースカンファレンス(OSC)東京での「多様性時代のDB選択」の開催中止 今回の「取り取り時報」では、オープンソースカンファレンス2020 Tokyo/SpringでのOSSデータベース特集トラック、「⁠多様性時代のDB選択」の詳しい報告をする予定でしたが、新型コロナウイルスへの警戒が続く中、開催中止となりました。開催できなかったことはもちろん残念なことですが、参加者や関係者の健康と安全に配慮いただいて難しいご判断をされた実行委員会と事務局に敬意を表します。さて、OSSデータベースの発

    第55回 MySQLのド定番機能 レプリケーションの構築運用に新風、PostgreSQLの活用事例セミナー報告とバージョンアップ情報 | gihyo.jp
    ktykogm
    ktykogm 2020/04/10
  • 第56回 MySQLの高可用性構成案、PostgreSQLのかなり気の早い新バージョン情報 | gihyo.jp

    連載第55回でご紹介したMySQL InnoDB ReplicaSetは、従来型のレプリケーションの運用管理の効率を向上させることに主眼をおいて開発されているパッケージです。データの複製は非同期レプリケーションとなり、データベースの自動フェイルオーバー機能もないため、高可用性構成しては物足りない面もあります。 MySQL InnoDB Clusterで利用されているグループ・レプリケーションはコミットされたトランザクションが他のノードに複製されることが保証できるため、高可用性を求める場合にはより適切な選択肢となります。参照時のノード間のデータ整合性は設定により変更できます。ただし、グループ・レプリケーションの要件にはGTID(Global Transaction IDentifier)や行ベースのバイナリログが含まれているほか、制約事項のひとつとしては利用可能なストレージエンジンがInno

    第56回 MySQLの高可用性構成案、PostgreSQLのかなり気の早い新バージョン情報 | gihyo.jp
    ktykogm
    ktykogm 2020/04/10
  • 第614回 WireGuardでVPNサーバーを構築する | gihyo.jp

    新型コロナウイルスによる感染症の広がりにより、リモートワークの必要性が急遽クローズアップされています。 とはいえ、業務に必要なシステムをクラウド上に構築し、場所を選ばずに業務を継続できる環境をすでに整備できているという企業は、まだまだ少ないのが現実ではないでしょうか。社内ネットワーク上に業務システムが構築されている場合、とにもかくにも社内ネットワークにリモートから接続できないことには始まりません。そんな理由で、急遽リモートワーク用のVPN環境を整備することになった、社内情シス担当の方も多いのではないのでしょうか(ご苦労さまです…⁠)⁠。 今回は、最近Linuxカーネルにマージされたことでも話題となっているWireGuardを用いて、VPNサーバーを構築する方法を紹介します。 WireGuardとは WireGuardとは、Linuxのカーネルモジュールとして動作するオープンソースのVPN

    第614回 WireGuardでVPNサーバーを構築する | gihyo.jp
    ktykogm
    ktykogm 2020/04/10
  • ウェハースケールCPUの誕生――Cerebrasのクレイジーな挑戦 | gihyo.jp

    2019年11月、スパコン(スーパーコンピュータ)のトップカンファレンスであるSC19で、小形のAI専用スパコンがデビューをはたしました。「⁠CS-1」と名付けられたそのマシンは、ウェハースケール、つまり30cmシリコンウェハーを一枚まるごと使った巨大なCPUをもち、その広大な領域に埋め込まれた40万ものコアに、ターゲットのニューラル・ネットワークをそっくり全部マッピングして並列動作させます。 このあまりにもシンプルで、かつ壮大なアイデアをストレートに実現したのはCerebras Systemsというスタートアップ・カンパニーです。 筆者はいくつものスタートアップ、とくにハードウェア・システムを開発する企業を見てきました。Cerebrasについても二年ほど前から何度か訪問して開発状況などを見てきましたが、これほど野心的なスタートアップは滅多にありません。 このCerebrasの技術について

    ウェハースケールCPUの誕生――Cerebrasのクレイジーな挑戦 | gihyo.jp
    ktykogm
    ktykogm 2020/02/01
  • 第44回 Linuxカーネルのケーパビリティ[3] | gihyo.jp

    先日、CloudNative Days Kansai 2019というイベントに参加してきました。CloudNative方面に疎い私にとって勉強になり、かつ楽しいイベントでした。さらにアフターパーティーやその後の場で、今をトキメクCloudNative界の方々にこの連載をご覧いただいているという話を聞いたりして、書いてよかったと思える瞬間でもありました。実は参加するだけではなく、朝キーノートが始まるまでの受付もお手伝いしていましたので、このイベントに参加された方は私が受付を行ったかもしれません(^^)。 さて今年もAdvent Calendarの季節がやってきました。この記事は、Linux Advent Calendar 2019の10日目の記事です。 毎年この連載でLinux Advent Calendarに参加していますので、「⁠連載でAdvent Calendarにエントリ」ということ

    第44回 Linuxカーネルのケーパビリティ[3] | gihyo.jp
    ktykogm
    ktykogm 2019/12/10
  • 第55回 Perlコードの高速化―文字列処理の時間短縮とデータ構造の効率化(3) | gihyo.jp

    (1)はこちら、(⁠2)はこちらから。 データ構造 節では、主に複数の文字列を保持するデータ構造について、配列を中心に比較します。前節では文字列単体の照合や書き換えを行っていましたが、複数の文字列を扱う場合は、どのようなデータ構造を使うのが高速か、効率的かについてベンチマークを取ります。 ある値が一覧に含まれるかはexists()を使う ある文字列が一覧で定義した文字列と一致するかどうかを確認することは多いでしょう。たとえば、ドロップダウンリストから選択された値が有効であることや、URLやメールアドレスのドメイン部分が自社保有のドメイン名であることを検査する、などです。 次のコードでは、メールのReply-Toヘッダが一覧に含まれることの確認方法を、メールヘッダ名を要素として持つ配列に対するgrep()関数と、キーとして持つハッシュに対するexists()関数で比べたものです。 grep

    第55回 Perlコードの高速化―文字列処理の時間短縮とデータ構造の効率化(3) | gihyo.jp
    ktykogm
    ktykogm 2019/07/03