package search; /** * 文字列に対するマッチ処理を行うためのインターフェイス。 */ public interface Matcher { boolean match(String target); } package search; import java.util.HashMap; import java.util.Map; /** * マッチ対象の文字列集合を前処理し、ツリー構造で保持する。 * NGワードチェックなど、マッチ対象の文字列集合がほぼ静的に決定されるケースで高速に動作する。 */ public class TreeMatcher implements Matcher{ private CharTreeNode rootNode = null; public TreeMatcher(String[] words){ this.rootNode = ne
このページでは Ceph や RBD を使う上で分かり辛い RADOS、CRUSH、Placement Group の概念を掘り下げて説明する。 以下は関連ページ。 Ceph の覚え書きのインデックス Ceph を使ってみる Rados Block Device(RBD) を使ってみる Ceph の CRUSH マップの書き方 更新履歴 (2012.02.10) 作成。 (2012.10.27) Mapping Algorithm を追加。 目次 1. RADOS RADOS を使ってみる RADOS のファイルはどこに格納されたのか? 2. Replication 3. CRUSH バケット(Bucket) Bucket の種類 OSD の過負荷(overload)と残空き容量 4. Placement Group Placement Group を確認する オブジェクトを Placem
白ヤギの開発者の森本です。 白ヤギでは Go 言語でニュース記事のキュレーションをする カメリオ API というサービスを開発しています。約1年2ヶ月前、Go を使って開発し始めたときに当時調べた内容を整理して以下の記事を書きました。 Go言語で API サーバーを開発する 1年以上に渡り開発を継続してきて変わったこと、変わってないことなどをざっくばらんにまとめてみます。たまたま過去の記事のはてブコメントを見返していて 以下のコメント を見つけました。 最近 golang 導入事例増えて来たけど、導入後一年くらいのメンテナンスフェーズな事例について聞いてみたい。継続的デリバリーみたいなの。まだ早いのかな? まだまだメンテナンスフェーズにはなっていなくて現在も活発に開発中ですが、継続的デリバリーについて白ヤギでは特別なことをしてなく、ansible を使ってデプロイしているのみです。Go 1
2015年11月10日 プレイヤーが自然に感じる乱数の作り方 Tweet ゲームでは擬似乱数がよく使われるが、ある種のゲームは数学的に精度の高い擬似乱数(たとえばMT)を用いているにも関わらず、コンピュータが有利になるように乱数を操作していると批判に晒されている。 実際、数学的に正しい乱数と、プレイヤーが自然と感じる乱数には、ある種の差が存在する。北陸科学技術大学院大学の池田研究室では、プレイヤーに自然に感じる乱数の生成に関する研究を行っている。 プレイヤーが不自然に感じる理由 数学的に正しい乱数に対してプレイヤーが不自然に感じる理由としては認知バイアスが考えられる。特に本事象に関連する認知バイアスとして、次が挙げられている[1]。 確証バイアス: 人は自分のもつ仮説に一致する情報を求め、反証となる証拠を避ける傾向がある。ひとたび、サイコロが操作されていると感じると、それ以降、その仮説に都
Go 言語で Apache Bench (ab) を実装してみた。 https://github.com/takatoshiono/go-ab なぜか 以前、wc コマンドを実装した。その時に ab も候補に入っていたけど、ab は http 通信をするプログラムなので、より単純な wc を選択したのだった。その次に何やるか、ということで http クライアントのコードを書く練習になりそうな ab を実装してみることにした。 期間は2016年10月から1ヶ月くらいやったあと、2ヶ月くらいブランクがあって、2017年1月に再開して一ヶ月くらいやっていた。コツコツとよく続いたと思う。 Apache Bench (ab) とは Apache Bench (ab) は HTTP サーバーの性能を測定するためのプログラムでシングルスレッドで動作する。Apache HTTP サーバーのソースコードに含
まぁこれは基本的に膨大なログを見ている時に、ピンポイントで絞り込み検索をするという行動を前提としてるからだと思うんだけど、デバッグとかしてるときは「スゴク、コレジャナイ感…」がするわけです。 なので、そんな時はもう素直にkubectl get podsして、kubectl logs -f …. している自分がいました。 まぁこれでも充分なんです。充分なんですけど、辛い事が二つあって。 まず複数のコンテナにロードバランスされるペイロードに関しては自分が見てるコンテナにアクセスが来るとは限らないから全部のコンテナのログを見てるか、自分の見てるコンテナにアクセスが来るまで読み込み続けなければならない。 もうひとつは、開発をしている間の話なので、kubectl applyでdeploymentをガンガン入れ替えているのでコンテナもどんどん世代交代するわけです。そうすると… そう、当然コンテナはデコ
自分のプロジェクトでビルドの速度低下が問題になりつつあったので、原因になっていそうなライブラリを事前にビルドして、$GOPATH/pkgにアーカイブをインストールしたら、ビルドが速くなったので大変ありがたかったというお話です。 やること go build に -i を付けてビルドする。ただそれだけです。 そこそこのコード量があるgithub.com/aws/aws-sdk-goを利用する自前のコードがあったので、こちらで試してみます。 まずはフルビルドしてみる まずは -a 付けてフルビルドすると、どれくらいかかるか見てみます。 $ time go build -a ./main.go go build -a ./main.go 28.13s user 4.30s system 223% cpu 14.517 total
Go言語はシンプルさを念頭にデザインされた言語です。仕様は単純明瞭さのために小さく収められていますが、そのため表現力に欠けているとか、コードが冗長になるという印象を持つ人も多いでしょう。有名なところでは、ジェネリクスや例外といった機能が(今のところ)存在しないことが問題にされることが多いようです。 一般に、ソフトウェアエンジニアリングというものは書かれる言語だけに依るものではありません。視点を拡げてGoを取りまくツール群を含めて見てみると、go fmt や goimports といったツールが広く使われていること、また go generate コマンドの存在などを見ても、Goという言語には、人間のプログラミングを機械によってさまざまな面から補助しようという態度があります。
Go is a programming language built for working with bytes. Whether you have lists of bytes, streams of bytes, or individual bytes, Go makes it easy to process. From these simple primitives we build our abstractions and services. The io package is one of the most fundamental packages within the standard library. It provides a set of interfaces and helpers for working with streams of bytes. This pos
はじめに 面倒なWEBブラウザの定型作業を自動化したくて。 WEBブラウザの自動操作には定番のSeleniumを利用する。 Seleniumは主にウェブブラウザのテストに利用されているが、テスト用途以外でも利用はできる。 なおウェブスクレイピングが目的であれば、scrapeとかgoqueryなどを利用するほうが簡単。 それでもSeleniumを利用するのは、 実際のブラウザが利用できるという点であり、以下のような利点があると思っている。 IEなど特定のブラウザのみをサポートしているサイトの自動操作 ごりごりのJavascriptやFlashを利用されているサイトの自動操作 証跡として画面のスクリーンショットを取得できる 前提知識 WebDriverを介することで、スクリプトとしてJava,C#,Pythonなど多くの言語から利用できる ブラウザごとにWebDriverが用意されており、1つ
「職業に貴賎なし」とは言うけれど、いつの世にも花形とされる人気の職業があれば、嫌な顔をされる仕事もある。そして、移りゆく時代のなかで消え行く職業の存在も。──そういえば数年前にも、日本で最後の「三助」が引退したことが話題になっておりました*1。 書店に行けば、そういった「職業」の魅力を説いた本も数多い。でもその一方では、過去に存在していたことは知識として知っていても、実のところはよく知らない、知られていない職業も少なくないんじゃないだろうか。名前は知ってる、でも内容はよくわからん、という。 特にファンタジーな世界観のRPGなどを見ると、実在した職業を “ジョブ” として引用している作品は少なくない。騎士全般だとか、吟遊詩人だとか、錬金術師だとか、道化師だとか。しかし、ゲームの “お約束” としての役回りやステータス配分、スキルなどは知っていても、彼らの元となった「職業」については実のところ
’Tis the season for resolutions, and I thought it would make sense to write a little about what I hope to work on this year as far as Go is concerned. My goal every year is to help Go developers. I want to make sure that the work we do on the Go team has a significant, positive impact on Go developers. That may sound obvious, but there are a variety of common ways to fail to achieve that: for exam
概要 結論から言うと、Streamで扱っているものはStreamのまま扱うです。 具体的にはio.Readerを毎回ioutil.ReadAllで[]byteに変換せずにそのまま使いましょうです。 なぜStreamを使うべきか Node.jsの例ですが、こちらで非常に分かりやすく説明されています。 yosuke-furukawa.hatenablog.com それを踏まえて考えてみると、Goの場合以下の2つが大きいと思います。 1. メモリの効率化 ioutil.ReadAllなどで一旦全て[]byteに変換すると、その分メモリを消費しますし、アロケーションやGCに依る速度低下が起きます。 一方io.Readerやio.Writerは各chunkの処理に同じバイトを使いまわすので、メモリの効率が良いです。 2. 標準パッケージの多くがio.Readerをサポートしてる io.Reader、
この記事は Origami Advent Calendar 11日目の記事になります。 最近学習しているデジタル署名について、わからない人でもわかる基礎的なところから、簡単なサンプルプログラムの実装までまとめてみました。最後のサンプルプログラムを組むところまで実施すれば、デジタル署名のメリットや仕組みなどの基本的な部分は理解できるかと思います。プログラムはGoで書いてます。 デジタル署名について デジタル署名は公開鍵暗号方式の一種で、一般的には3つのアルゴリズムから成る。 鍵生成アルゴリズムG 署名者の"鍵ペア"(PK, SK)を生成する。PKは公開する検証鍵(公開鍵)、そしてSKは秘密にする署名鍵(秘密鍵)である。 署名生成アルゴリズムS メッセージmと署名鍵SKを入力とし、署名σを生成する。 署名検証アルゴリズムV メッセージm、検証鍵PK、署名σを入力とし、承認または拒否を出力する。
はじめに Goの標準パッケージには、goパッケージというものがあり、Goのソースコードを静的解析するのに便利な機能が提供されています。 goパッケージを使うと、以下のようなツールが簡単に作れます。 ソースコードを自動生成するツール ソースコードに対してlintやフォーマットを行うツール リファクタリングツール ソースコードから特定の何かを検索するツール ミニ言語の処理系 また、goパッケージを学ぶとコンパイラや言語処理系の知識も学べるので、他の標準パッケージとはまた少し違った知識を得ることができ、プログラミングの知識の幅が広がります。 しかしながら、goパッケージに関する日本語の文献は少なく、学習しづらいのが辛いところです。 私もこれまでgoパッケージについて、Qiita上でいくつか記事を書いてきましたが、どの記事が何をするときに役に立つのか分かりづらくなっていました。 そこでこの記事では
GPLv3: free as in freedom documented on the ShellCheck Wiki available on GitHub (as is this website) already packaged for your distro or package manager supported as an integrated linter in major editors available in CodeClimate, Codacy and CodeFactor to auto-check your GitHub repo written in Haskell, if you're into that sort of thing.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く