第29回リファクタリング(3) 制御フラグの削除、クラスの抽出 平田敦 2015-12-03
Go Conference 2014 Autumnレポート 鵜飼文敏氏「Goに入ってはGoに従え」可読性のあるコードにするために~Go Conference 2014 Autumn基調講演2人目 この記事では2人目の鵜飼文敏氏の基調講演についてレポートを書きたいと思います。この基調講演では「Goに入ってはGoに従え」というタイトルで、Go言語らしく書く方法について話がされました(スライド)。 写真1 鵜飼文敏氏の講演の様子 Go言語の可読性レビュー Go Readability Approver まずはじめに、「Go Readability Approver」と呼ばれる、GoogleにおけるGo言語のReadability(可読性)をレビューするチームについて話がありました。このチームは、コードレビューを通じてGo言語の良いコードの書き方を教えることを目的としているそうです。メンバー
Unityを使えば、個人でも短期間でゲームが作れる 「ゲームを作りたい!」 誰もが一度は思ったことがあるのではないでしょうか? 私もそうでした。しかしいざゲーム開発の本を読んでみると、C++で書かれた難解で膨大な記事に圧倒されて自分には無理だと諦めていました。 ですが、私はこれまでに2か月間で2つのゲームを作ることができました。なぜ、そのようなことができたのか? その答えは「Unityを使ったから!」です。 Unityを使えばC++の難解で膨大なコードを書く必要がありません。ゲームのオブジェクトをGUIで配置して、それらを操作するスクリプトを少し書くだけで、ゲームを作ることができます。スクリプトを書くのに使うプログラミング言語は、C#、UnityScript(静的型付JavaScript)、Boo(静的型付Python)から選ぶことができます。 また、Unityではゲームに使用する3D
今回はOpenStack installerを使って、そこそこのスペックだけれどもNICが1枚しかないPCに、OpenStack環境をコマンド1つ、たった30分で構築する方法をご紹介します。 OpenStackをインストールするということ 「OpenStack」と言えば、現在のクラウドコンピューティング世界を支えるクラウドプラットフォーム構築ソフトウェアの1つで、フリーソフトウェアというだけでなく、豊富な機能と活発な開発コミュニティによって幅広く利用されています。 そんな「クラウド」を語るうえで欠かせない存在になりつつあるOpenStackですが、そのインストールは難解です。Ubuntuは比較的初期の段階からインストールしやすいほうではありましたが、それでもJujuだのJuju Deployerだの続々とインストールアシストツールが出る程には難しい状態でした。 ただソフトウェアのインストー
mroongaのN-gramについては、bigramだけでなく、uni-gramやtri-gramの他、多数の派生N-gramでのトークナイザに対応しています。さらに2013年5月末リリースのmysql-mroonga-3.04にて、待望のWプラグマに対応しました。これにより、Tritonnからmroongaへ移行する際の障壁はEプラグマのみになったと言えます。 Tritonnから乗り換えるならば、mroongaの1択ですね。 Tritonnからmroongaへ移行する7つのメリット それでは早速、Tritonnからmroongaヘ移行するメリットを見てみましょう。 MySQL 5.6対応であること もはやレガシーとなったMySQL 5.0という縛りがなくなることで、MySQL 5.1以降の先進的な機能を取り入れることができます。特にMySQL 5.6ではその進化が甚だしく、次の点を始めと
あけましておめでとうございます。よういちろう です。新春企画でソーシャルというキーワードを担当して今年で3年目となりました。さっそく2012年のソーシャルWebがどうなっていくのか、占っていきたいと思います。 前回、そして前々回にどんなことを書いていたか気になる方は、以下のリンクからお読みください。 2011年のソーシャルWeb(前編) 2011年のソーシャルWeb(後編) 2010年のソーシャルWeb(前編) 2010年のソーシャルWeb(後編) ソーシャルゲーム分野 まずは、IT業界において昨年最も注目を集めたソーシャルゲーム分野を取り上げます。 ソーシャルゲーム市場拡大の鈍化 インターネットにおける2011年度の最大の出来事、それはソーシャルゲーム市場の急速な拡大でした。その代表格がGREEおよびモバゲータウンであったことは、誰の目にも明らかでした。一昨年のソーシャルゲームの市場規模
こんにちは、太田です。前回はクロスブラウザの入口として、各ブラウザの特徴をまとめつつ、実際にクロスブラウザなコードを紹介しました。今回はクロスブラウザ対策における基本である、各ブラウザ環境の構築について解説したいと思います。 前回紹介した通りブラウザにはたくさんの種類・バージョンがあります。それぞれが動作する環境を用意するだけでも、一苦労ではすみません。なるべく少ないマシンで、各バージョンをインストールして、さらにデバッグするための環境作りについて紹介します。なお、Safari以外はWindows環境を想定しています。さらに、特に断りがない限りはWindows XP SP3をベースに解説させていただきます。ご了承ください。 各ブラウザのデバッグ環境は近年目覚しいほどの進化を遂げています。統合デバッグ環境の草分けであるFirebugを筆頭に、Safari/Chrome(WebKit)のWeb
前回(第35回)はwwを使ってWebのダブルとなるサーバを作り、スパイ機能を使ってクライアントからのリクエストの状況を目視確認する方法を説明しました。 今回は、ミニブログへのメッセージ投稿を通じて、wwを自動化テストに組み込む方法を説明します。 RSpecの自動テストの中からサーバを起動停止する wwは、単一のサーバプロセスとして起動させるほかに、自動化テストの中で定義・起動・停止するためのAPIを備えています。前回作ったダブルサーバを、RSpecから起動・停止するテストコードは次のようになります。 # spec/miniblog_client_spec.rb $:.unshift File.expand_path("../lib", File.dirname(__FILE__)) require 'miniblog_client' require 'ww' describe Minibl
プログラミングをはじめよう いよいよ2010年度がはじまりました。この春からの新入社員や新入学生の方の中には、これからLinuxでプログラミングを始めるという方も多くいると思います[1]。Windowsでプログラミングといえば、Visual Studioのような統合開発環境を使用するのが一般的のようですが、Ubuntuではどうすればよいのでしょうか。 UbuntuはUnixの文化を受け継ぐOSですから、プログラミングのためのツールは豊富に揃っています。しかしそれゆえに「とりあえずこうすればOK」という定石がよくわからないという人も多いかもしれません。 Linuxにおける開発環境は色々ありますが、やはり一番メジャーな統合開発環境といえばEclipseとNetBeansでしょう。しかし今回から3回にわたって、開発環境としてのEmacsを紹介します[2]。 Emacsのインストール Emac
TCPとUDPはOSIのレイヤ4(トランスポートプロトコル)であり、よく以下のように説明されていますよね。 ●TCP ・信頼性が高い ・コネクション型プロトコルである ・ウインドウ制御、再送制御、輻輳(ふくそう)制御を行う ●UDP ・コネクションレス型プロトコル ・信頼性を確保する仕組みがない ・処理が簡単で遅延が少ない しかし、これらの説明には重要な視点が欠けていると思います。 データを「ストリーム」として扱うTCPと、「データグラム」を処理するUDPという考え方です。 トランスポートプロトコルとは? まずは、そもそもTCPやUDPなどのトランスポートプログラムがなぜ必要なのかを考えてみましょう。 ふつう、私たちが利用しているPCやサーバーでは、同じコンピュータの上で複数のアプリケーションが動作していますよね。アウトルックでメールを書きながら、ブラウザでホームページを見たりすることがで
はじめに Web APIを使って様々なサービスと連携するというアーキテクチャはすっかり定着した感があります。みなさんも、Web APIを使ってデータをやりとりするアプリケーションを書く機会も増えているのではないでしょうか。 Web APIを使うアプリケーションの開発では、テストやデバッグをする際のAPIアクセスが悩みどころとなります。本物のサーバを使ったのではテストデータの初期化などに手間がかかりますし、逆にHTTPアクセス自体をスタブやモックを使って間接化してしまうとそれが本当に有効なテストなのか不安が残ってしまいます。 筆者も、仕事やプライベートでのコーディングでこのような悩みに何度も遭遇しました。これらを解決するために開発したのがwwです(wwと書いて'double-web'と読みます)。 ダミーWebサーバ作成ライブラリww(Double Web) wwは、Webサービスの簡単
WEB+DB PRESS plus(ウェブディービープレスプラス)シリーズは, Webアプリケーション開発のためのプログラミング技術情報誌『WEB+DB PRESS』編集部が自信を持ってお届けするシリーズです。 UnicodeとUTF-8とUCS-2,UCS-4など,Unicode関連用語は,いわゆる用語解説にあたるだけでは理解するのに混乱しがちな話題かもしれません。それぞれの用語が登場した経緯や,符号化文字集合,符号化方式としてどういった存在かについて追っていくと,きちんと理解されることと思います。ここでは,簡単に整理してみることにしましょう。 まとめると,Unicodeは整数値で表される符号位置と文字とを対応付けています。そして,その整数である符号位置をコンピュータで用いるバイト列の形で表現するための方式として,UTF-8やUTF-16やUTF-32といった各種の符号化方式が定められて
はじめに DTrace とは 皆さんは DTrace をご存知でしょうか? DTrace は Sun Microsystems のブライアン・キャントリル(Bryan Cantrill)氏によって開発された、汎用情報採取のフレームワークです。 キャントリル氏へのインタビューでも語られているように、カーネルの動作状況を調査/確認することは、これまで非常に困難な作業でした。 しかし、DTrace の登場により、実際に稼動中のシステムのカーネルからも、安全に(かつ低コストで)情報を採取できるようになりました。 また、DTraceによって解析が容易になったことで、これまで解決することができなかったSolarisカーネルの(潜在的だったものも含めた)実装上の問題も、多数改善することができたのだそうです。 カーネル開発に関わったことがある方ならもちろん、通常のアプリケーション開発であっても、次のような
はじめに 前回までで、検索エンジンの基本となる仕組みの大枠は説明しました。 今回は、復習を兼ねてこれまでの連載全体を見ていき、検索エンジンを作る上で説明が足りなかった部分を補足していこうと思います。本連載では実際のコードはあまり載せられませんが、ぜひこの際に簡単な検索エンジンを作ってみることをお勧めします。 全体の構成 第2回で紹介した検索エンジンの構成をもう一度見てみましょう。 図1 検索エンジンの構成 検索エンジンは索引とその索引を構築する部分、そしてその索引を検索する部分の3つに分けられることを説明しました。本連載では、索引に関しては第3~6回、構築方法に関しては第7回、そして検索方法に関しては前回の第8回でそれぞれ説明してきました。各項目をとても足早に説明してきましたが、一応全部の要素がカバーされていますので、これまでの知識を使って簡単な検索エンジンを作ることはできてしまいます。
代表的な関連度指標には、コサイン類似度(cosine similarity)やOkapi BM25などがあります。具体的な計算式や詳細はここでは省略しますが、上記の値を組み合わせて、関連度を計算します[3]。 コサイン類似度は、文書とクエリをタームを次元としたベクトル空間にマップし、文書ベクトルとクエリベクトルの成す角度により、文書とクエリの関連度(類似度)を求めます(成す角度が小さければ関連度が高い)。またOkapi BM25は、文書がクエリに対して適合かどうかは確率的に決定されるという統計的な原理に基づき、文書とクエリの関連度を求めます。 検索時にこれらを計算するには、索引の構築時に上記の統計値を計算し保持しておく必要があります。実装にはさまざまな方法が考えられますが、たとえばfd,tはポスティングリストの中に埋め込んでおき[4]、ftやFtは辞書と一緒に保存しておくといった方
はじめに ここ最近、NoSQLというキーワードが注目を集めています。 リレーショナルデータベースは、一般的にスケールアウト(サーバの台数を増やして性能向上を図る手法)が難しく、特に大規模サービスにおいてパフォーマンス上のボトルネックとなりえます。また、タグやグラフ構造のようなデータは関係モデルに馴染みにくいため、それらを扱う際にはアプリケーションコードもぎこちないものになりがちです。 これらの問題を背景に、何にでもリレーショナルデータベースを使うのではなく、用途に応じてKVSなど他のデータストアを選択する流れが広まりつつあります。このムーブメントがNoSQL(Not Only SQL)と呼ばれているものです。 今回は、NoSQLなデータベースの1つであるMongoDBをご紹介します。 MongoDBとは MongoDBは高いパフォーマンスとスケーラビリティを特徴とするドキュメント指向型デー
2010年のJavaScriptと題しまして、JavaScript周辺の「これまで」と「これから」についてまとめてみたいと思います。 2009年までのJavaScript JavaScriptは各ブラウザベンダなどが個別に実装するという特殊性から、ブラウザ(実装)ごとの非互換性の問題に悩まされ続けてきた言語です。まず、そのJavaScriptの歴史を簡単に振り返ってみます。 ECMA-262 3rd editionとスピードコンテスト JavaScriptはNetscape社によってLiveScriptという名前で誕生し、その後ECMAScriptとして標準化が進みました。1999年12月にECMA-262 3rd editionが策定されてから、Internet ExplorerのJScript、MozillaのSpiderMonkey(TraceMonkey)、SafariのJav
SQLアタマアカデミー 第7回性能改善の鍵、インデックスの特性を知る~B-treeとハッシュ (2)ハッシュ ハッシュ 概要 チューニング技術としてB-treeの次に重要なのは、ハッシュ(hash)です。ハッシュとは「ごちゃまぜ」とか「細切れ」という意味で、ハッシュドビーフとかハッシュポテトなどの料理名にも使われています。 ハッシュのポイントは分散です。キー値に対して適当な関数を適用して、データを格納する先のアドレスを割り当てるのですが、このときポイントなのは、異なる値のキーに対しては、異なるアドレス(それもなるべく離れた)を割り振れるかどうかです。これができるほど、ハッシュ関数として優れているということになります(図6)。 図6 ハッシュのイメージ図(ハッシュパーティションの場合) なおハッシュは、Postgre SQLやMy SQLのようにインデックスとして実装しているDBのほか、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く