ディップ Advent Calendar 2017 2日目です! チームに貢献してますか? エンジニアの現場は、チームで開発することが多いですよね。 過去にいろんなエンジニアと仕事してきましたが、チームで動く時に 頼りになるなぁ。支えてるなぁ。とんがってるなぁ。などなど、 チームへの貢献の仕方は個々に違うなと感じてました。 スプラトゥーンの衝撃 前作からS+までやり込んだら、チーム貢献について、すごく学ぶものや共通点が多かったので、 まとめてみようという趣旨で、書いていきます。 ところで、スプラトゥーン知ってますか? 知らない人は、公式ホームページでムービーを! チームでの仕事とスプラの共通点 エンジニア(だけじゃ無くても)は、常にチームとしての成果を求められます。 最近、漫画から学ぶ的なのも多いですが、スプラにも学びはたくさんあるんです。 ということで、チーム開発とスプラの共通項ですが、
sort.Slice の実装をかいつまんで紹介し、様々な型 (特に様々なスライス型) を受け取りつつ速度を落とさず処理をするヒントを探ってみようと思います。 Go 1.8 から追加されている sort.Slice は、従来の sort.Sort と同等の速度で動作します。 気になるのが、sort.Slice には様々な型のスライスを渡せるのに、要素の交換についての処理をユーザーが記述しなくても良いということです。 // 従来の sort.Sort では、ソート対象に関する操作を定義して sort.Interface として渡している。 type ByValue []string func (s ByValue) Len() int { return len(s) } func (s ByValue) Swap(i, j int) { s[i], s[j] = s[j], s[i] } fu
MySQLのデータ型としてFLOAT型という型があるのですが、これを採用するのは混乱の元ではないか?と感じたので、その詳細を紹介します。 そもそもこの話のきっかけは「MySQLで6桁までの小数点を丸めずに扱うならFLOAT型を使うべき理由」という記事が目に止まったことです。それなりに人気を集めている記事のようですが、私の読んだ限りではFLOAT型を使うだけの根拠が文中から読み取れず、さらに類似する一次情報や英語記事が全く見つからなかったので、真偽が怪しい情報だと感じました。 その後、MySQL上で実験したりCソースコードを読んでみたりした結果、私の得た結論は真逆のものになりました。MySQL警察の方や浮動小数点数警察の方、追試や反論など頂けると助かります。 MySQLのFLOAT型とは MySQLのFLOAT型は原則としてIEEE754浮動小数点数単精度型(32bit)で実現されます*1。
Google に代表される「キーワードサジェスト」機能を Elasticsearch を前提に日本語向けに設計。 よくある要件サイト内で過去に検索された有効なキーワードをサジェストしたい。入力されたテキストに関連性が高く、過去に検索された回数の多い順でサジェストしたい。最初に入力された言葉の後に空白を入力すると、最初の言葉と一緒に検索される複合語の候補サジェストしたい比較的シンプルな要件のように見えますが。。日本語を対象にしたサジェスト機能を実装する場合、入力途中の日本語のテキスト受けながら、ひらがな、カタカナ(半角・全角)、漢字、ローマ字(大文字・小文字・全角・半角)のコンビネーションを合わせて、関連性の高い言葉を素早くユーザーに提案しなければなりません。以外と難しいのです。。 Elasticsearch にも Completion Suggester と言うサジェスト向けの機能があるの
Web標準の1つである「Service Worker」は、Webブラウザで表示されるWebページのバックグラウンドで実行されるスクリプトです。 Service Workerを利用することで、ネットワークに接続されていないオフラインのときでもプロキシサーバのようにWebページからのリクエストを処理することができるため、オフラインに対応したWebアプリケーションを実現することが可能になります。 今後の高度なWebアプリケーションの実現に、Service Workerの機能は欠かせないものになっていくとみられています。 Service Workerは、すでにChrome 63とFirefox 57でサポートが開始されている一方、SafariとMicrosoft Edgeではサポートされていませんでした。 SafariとEdgeの開発版でService Workerが利用可能に そのSafariと
最終目標は、最小限のコードで正規表現ユースケースの大部分をカバーできるくらい十分堅牢な構文を提供することです。 1文字と一致させる まずはじめに、1文字のパターンと1文字で構成される文字列を引数に取り、一致するかしないかを示すブール値を返す関数を作成してみます。1文字のパターンである . はワイルドカードとされ、任意の文字リテラルと一致します。 下記のようなかんじです matchOne('a', 'a') -> true matchOne('.', 'z') -> true matchOne('', 'h') -> true matchOne('a', 'b') -> false matchOne('p', '') -> false function matchOne(pattern, text) { if (!pattern) return true // 任意テキストが空パターンと一致
はてなアプリケーションエンジニアの id:takuya-a です。 この記事では、Microsoft の検索エンジン Bing で採用された BitFunnel アルゴリズムを紹介します。 昨年のエンジニアアドベントカレンダーでは、文字列検索のアルゴリズム全般について紹介しました(文字列アルゴリズムの学びかた - Hatena Developer Blog)。今年はそのなかでも、インデックス(索引)を使った全文検索アルゴリズムについてのお話になります。 この記事の前半は全文検索の入門にもなっていますので、検索技術になじみがない方にも楽しんでいただけるのではないでしょうか。 逆に、「そんなのもう知ってるよ!」という方は、本題である「BitFunnel アルゴリズムの詳細」から目を通していただければと思います。 この記事は、はてなエンジニア Advent Calendar 2017の21日目の
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く