2019年12月21日のブックマーク (14件)

  • Art of Abstraction

    kawasin73
    kawasin73 2019/12/21
  • 終わらないLambda実行 - Qiita

    この記事はAWS LambdaとServerless #1 Advent Calendar 2019 の21日目の記事です。 はじめに API Gatewayと組み合わせてのAPIサービング、SQSトリガーからのジョブ、DynamoDBの更新をフックにした処理など、いろいろな活躍をしてくれるLambdaですが、API Gatewayからのレスポンスが返ってこないな、テストが終わらない?、という状況になったことはありませんか? 今回は私が開発中に出会った、いろんな意味でLambdaLambdaを使った処理が終了していない、終了していないように見えるパターンについて紹介します。 Postgresへの接続 Postgresへ接続したFunctionのテスト DynamoDBトリガーのLambdaでの例外によるリトライ Serverless FrameworkでNode.js + TypeScr

    終わらないLambda実行 - Qiita
    kawasin73
    kawasin73 2019/12/21
  • 最近よく書く HTTP サーバ基礎部分 - あれ

    この記事は Go3 Advent Calendar 2019 13日目の記事です qiita.com TL;DR x/sync/errgroup はいいぞ 編 最近よく書くサーバの起動部分のコードを紹介します 分かる人には見るのが一番早いと思うので、早速コード全体を載せます やりたいことは localhost:8888 で HTTP サーバを起動 SIGINT を受けると HTTP サーバを graceful shutdown 各所での ctx.Done() のハンドリング これらを混乱しないように記述したかったのが最初のモチベーションです package main import ( "context" "fmt" "net/http" "os" "x/sync/errgroup" ) func main() { os.Exit(run(context.Background())) }

    最近よく書く HTTP サーバ基礎部分 - あれ
    kawasin73
    kawasin73 2019/12/21
  • TinyGo Tutorial

    この記事はQiita AdventCalendar 2019 Go6の17日目のエントリです。 「TinyGoでマイコン開発に入門してみよう!」という内容で現状のTinyGoをご紹介。 TinyGoって? Goフロントエンドを使ってバックエンドにLLVMを利用する形で マイコンに向いたバイナリを出力可能にしたものです。 特徴 Goのマイコン向けサブセット AVRやARMシリーズに対応 WASMPC向けバイナリも出力可能 LLVMバックエンドのため高効率(サイズ、処理性能) なぜGoはマイコンに向かないのか? OS依存が大きいとかランタイムが大きいなど ネットワークライブラリがモノリシックで巨大 メモリの利用方法が富豪的 組込に必要なGCの保留やvolatile機能の不足 TinyGoがサポートする標準ライブラリ まだ、Goとの差異はいくつか残っていてその影響で半数ほどのパッケージは

    kawasin73
    kawasin73 2019/12/21
  • Go言語の crypto/xxx は New して Sum するより直接 Sum する方が速い - Qiita

    Help us understand the problem. What is going on with this article?

    Go言語の crypto/xxx は New して Sum するより直接 Sum する方が速い - Qiita
    kawasin73
    kawasin73 2019/12/21
  • 海で使う IoT デバイスの開発に Go を採用する理由 - Qiita

    私は今ウミトロン株式会社で、水産養殖に使うIoTデバイス、およびそれを用いたサービスの開発をしています。 IoT デバイスのプログラミングに Go を採用しているのですが、そういった例はあまり多くないということで、理由について書いてみます。自分は IoT の開発は今の会社が初めてなので比較が色々と難しいのですが、Raspberry Pi の使用例の記事によくある Python や Node を使っているようなケースとの比較と、あとは C / C++ 等のコンパイル言語に比べた時の Go の特徴が生きてくる理由の紹介になります。 サービスについて デプロイがいつでもできるわけではない 水産養殖に使うIoTデバイスということで、デバイスを海で動かしています。ネットワークは無線ですし、電力はソーラー。デバイスを使うのも充電も昼間のみなので日が沈んだらスリープ状態にしますし、そもそも主電源をユーザ

    海で使う IoT デバイスの開発に Go を採用する理由 - Qiita
    kawasin73
    kawasin73 2019/12/21
  • Go言語でつくるインタプリタをやってみた - Qiita

    tl;dr ただの『Go言語でつくるインタプリタ』紹介記事です。 動機 私はいつも自分の開発や日々の細かい作業をツールとしてより効率化をすることを考えています。 その結果としていくつかのCLIコマンドやVimプラグインを書いたりしているわけなのですが。 その中で今まで知らないことを盛り込むことで都度新しい知識を仕入れることを心がけています。 最近Language Server Protocol(LSP)周りにご執心なのですが、 ふと自分でLanguage Server(LS)をつくりたいなと思ったのですが、そのための知識が足りないことに気が付きました。 そうLSをつくる上で対象となる言語の解析への理解は欠かせないのです。 そこで私は一回インタプリタを作ったら一通りの流れを理解できるのでは? と考えて以前から気になっていた『Go言語でつくるインタプリタ』を注文したのです。 似たような話でDQ

    Go言語でつくるインタプリタをやってみた - Qiita
    kawasin73
    kawasin73 2019/12/21
  • GoはネットワークI/Oをどう実現しているか - 日記マン

    goroutine自体はOSスレッドに多重化してスケジュールされる。 ランタイムでは goroutine関数をG、OSスレッドをM、GをMに割り当てるスケジューラをP、と名称し実装されている。 qiita.com ではG全てがI/O実行を行いブロック状態になった場合、Gに紐づかれたMがそのままブロック状態になるのだろうか。 100個のgoroutineが同時にI/O待ちのときに、100個のOSスレッドがI/O待ちの状態になっているのか。 結論からいうとならない。なぜならラインタイム以下で非同期I/Oを実現している。 ネットワークI/Oの場合はGoの標準ライブラリではあたかもブロッキングI/Oのようなインターフェイスを提供しているが、 Goランタイム(で動くsysmonという特別なワーカー)が待ち状態のgoroutineのI/Oを非同期I/Oに変換している。 (Linux環境ではepoll(

    GoはネットワークI/Oをどう実現しているか - 日記マン
    kawasin73
    kawasin73 2019/12/21
  • ペンテスターはDBサーバーに夢を見るか? - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

    この記事は、Akatsuki Advent Calendar 2019の21日目の記事です。 こんにちは、セキュリティエンジニアの小竹 泰一(aka tkmru)です。 アカツキでは、アプリケーションや社内ネットワークに対する脆弱性診断やツール開発/検証を担当しています。 この記事では内部ネットワーク診断でDBサーバーを発見したときに確認する項目を紹介したいと思います。 内部ネットワーク診断とは 社内ネットワークにつないだ診断員のPCからネットワーク上の端末へ攻撃を行い、ミドルウェアの設定不備による脆弱性や、ソフトウェアが古いバージョンのまま放置されていることによる脆弱性などを発見するのが内部ネットワーク診断です。 脆弱性を見つけるだけではなく、見つけた脆弱性を使って更にどれだけ会社にダメージを与えられるかまでを検証し、ペネトレーションテスト相当のことにまで踏み込んで診断を実施しています。

    ペンテスターはDBサーバーに夢を見るか? - Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)
    kawasin73
    kawasin73 2019/12/21
  • CMU Database Systems をひたすら追っていく ~10 Query Processing~ - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」19日目の記事です はじめに 今日の動画 Query Processing Query Plan Processing Model Iterator Model Access Methods Sequential Scan Index Scan おわりに はじめに どうも、最近という出だしでブログ記事を 19 個も連続で書くと流石にそろそろネタがなくなってくるけんつです。 今回は SQL の実行周りに関連する話で、久々に CMU の講義に戻ってきます。 今日の動画 www.youtube.com Query Processing Query Plan Query がどのように実行されるかというと、まず SQLDBMS に投げられるとそれを構文解析に通してツリー構造

    CMU Database Systems をひたすら追っていく ~10 Query Processing~ - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
  • SystemPage の実装 - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 18 日目の記事です。 はじめに 実装 おわりに はじめに どうも、最近ダクソリマスタードで RTA をやりはじめたけんつです。黒騎士斧槍めちゃ強いですね。 今回もめちゃくちゃ短いが、SystemPageの実装についてです。 SystemPage と言っているけどおそらく catalog といったほうがよくてテーブルの情報を持っているやつです 実装 import "encoding/json" type SystemPage struct { MaxPageId uint64 `json:"MaxPageId"` TableName string `json:"TableName"` ColumnTypes []string `json:"ColumnType"` C

    SystemPage の実装 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
  • Disk Manager の実装について - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」17 日目の記事です。 はじめに データの永続化 ディレクトリ構成 何故こうなったか Page System Page 実装 おわりに はじめに どうも、最近そろそろ DBMS 作るのでなく MySQL とかの勉強をしたいなと思い始めたけんつです。 今日はディスク周りの話です。 といってもすることがあまりないのでめちゃくちゃ短くなりそうです。 データの永続化 ディレクトリ構成 .toybox ├── hello │   └── page_0 ├── sys │   └── hello.json └── world └── page_0 ディスク周りの永続化は↑のようなディレクトリ構成のもと実行される。 カタログと言われるテーブル情報を保持するデータは sys ディレクト

    Disk Manager の実装について - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
    ページごとにファイルを分けてるけどファイルの読み書きで都度 open close が起きるし、ファイルディスクリプタたくさん使いそう。1つのファイルにまとめて各ページをオフセットで管理して pread pwrite すれば効率的になる
  • Buffer Pool を実装する。 - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 16 日目の記事です。 はじめに Buffer Pool の実装 Buffer Pool が持つべき責務を考える Buffer Pool 全体の仕様 Buffer Pool で持つ他の情報 構造体 Buffer Pool の操作 おわりに はじめに どうも、最近 co shu nie*1 にめちゃくちゃハマっているけんつです。 「asphyxia piano ver」 がめっちゃいいので聴いてください。壊れそうなぐらい綺麗な透き通った声がめちゃくちゃ好きです。 www.youtube.com 今回はくそがつくほど苦戦した Buffer Pool の実装についてです。 もう解説するのが非常に厳しいので単純に紹介していきます。 普段は MySQL に寄せようと頑張って来ま

    Buffer Pool を実装する。 - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21
    Buffer Pool って初期化時に全てのメモリを Page の配列として確保して使い回すものだと思ってたけど、AppendPage でどこかでメモリ確保された Page を渡すのか。ちょっとモヤモヤ。後でコードを読む
  • B Tree Index を実装する - それが僕には楽しかったんです。

    この記事は「けんつの1人 DBMS アドベントカレンダー Advent Calendar 2019 - Adventar」 15 日目の記事です。 はじめに B Tree を実装する インデックスの色々 クラスタインデックス セカンダリインデックス B Tree アルゴリズム 実装方針 実装するにあたっての知見・感想 アイテムの閾値 ラッチの実装 Golang の interface を上手く使う B Tree の実装 終わりに はじめに どうも、最近眼精疲労がひどすぎるけど眼球ってどうやって休めたらいいかわからないけんつです。 今日明日は現状最も苦戦した B Tree Index と Buffer Pool の実装話になります。 B Tree を実装する 今回は B+ Tree でなく B Tree を実装する。また削除は考慮しない。 完全に考慮しない訳ではなくて一応削除を実装することを

    B Tree Index を実装する - それが僕には楽しかったんです。
    kawasin73
    kawasin73 2019/12/21