SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

Python

Pythonで関数型プログラミング.

SICPを読むようになってから、完全に関数型プログラミングの魅力にハマってしまったんだけど、そのおかげか仕事で書くPythonコードがかなりキレイに書けるようになってきた。行列演算する時に、map, reduce, filterあたりの高階関数をlambdaの無名関数と合わ…

次世代データ解析IDE, JupyterLabをインストール.

データ解析でよく利用されるJupyterNotebookでは、後継であるJupyterLabというIDEの開発が進んでいる。今回はそのJupyterLabのインストールと良さ気な機能を少し書こうと思う。 JupyterNotebookとは JupyterNotebookはブラウザ上でPythonプログラミングが簡…

Pythonで全角と半角を変換するスクリプト.

スクレイピング処理などで文字列を扱う場合に全角と半角を揃えたいことがある。たとえばBag Of Wordsで単語を使った自然言語処理などでは大抵やらなければいけない前処理だろう。昔、検索エンジンを書いていた頃に正規化するための簡単なスクリプトを書いた…

PyCon JP 2016、良かったTalkまとめ.

PyCon JP 2016の面白かったTalkをまとめる。今年も最高だった。やっぱりこうやって社外のコミュニティに参加して、新鮮な情報や知識を入れることは大事なことだ。モチベーションも自然と高まるので、より技術力向上に精が出るだろう。ではでは、Talkのまとめ…

PyCon JP 2016、参加した.

今年も参加、PyCon JP @早稲田大学。Pythonプログラマーの祭典。ひたすらPythonの話。 日本ではニッチだったPythonもこうやって集まると人口増えたのかなと思ってしまう。 聴きに行ったセッションとしては、OSS公開の話、数学とDeepLearnigの話、複数言語を…

Python Best Practice.

In my carrier as a software engineer, Python programming is the longest experience of developing in all programming language. It's a same for my private, I've developed some programs using Python: a search engine on XML-RPC server, a web-a…

Tips, Ipython to get hash.

It is easy for you to use hash by Ipython. about Ipython IPython is a rich archtecture for interactive computing which is powerful extended from Python. It provides below; Powerful interactive shells (terminal and Qt-based). A browser-base…

Udacity「Writing READMEs」を修了した.

割と僕はREADMEの書き方で怒られる。Udacity提出課題や外国人エンジニアな友人のコードレビューを受けていた時は、READMEの書き方を学べとよく言われていた。READMEで提出課題が再提出扱いになった時は、マジか、、と若干憤慨したが、普段からOSSを使ってい…

ミャンマーで研修講師した.

仕事でミャンマーへ行って研修の講師をしてきた。 僕はミャンマー現地のエンジニアに対してPythonプログラミングの講義をやった。初の講師かつ英語でのトライだったのでどうなるものかと思ったが、ミャンマーのエンジニアはモチベーションがむちゃくちゃ高く…

Infrastructure's machine learning.

I guess that you wanna detect anomaly from server logs. Using Jubatus, you can create reporting system that check per anomaly of access log of web site from Apache2. Using Apache2 Fluentd Jubatus Python First, Start Fluentd with option of …

Sphinxで研修教材を作る.

仕事でプログラミング研修教材を作っている最中なのだが、その際に使ったSphinxが便利すぎた。SphinxはPythonのドキュメンテーション生成ツールで、簡易的なリッチテキストで文章書けたり、ドキュメント構成もindex.rstに生成したドキュメント名を追記してい…

Intro to Machine Learning at Udacityを修了した.

Udacityの機械学習コースの「Intro to Machine Learning」を修了した。内容自体は割と簡単で、機械学習を勉強すると避けては通れない数式は一切出てこなくて、機械学習モデルの概念を実際にScikit-Learnのライブラリを使ってコード書きながら学んでいく形式…

Gitおじさん、リベンジ.

以前、SIerな職場にGitを導入して華麗に失敗したというエントリを書いた。 今回はそのリベンジした結果について書こうと思う。 tl;dr 前回はSVN派のGit反対勢力の懇願もあってGit導入に失敗したが、今回は開発チームではなく弊社のプロパ相手に導入を進めた…

Programming Foundations with Python at Udacityを修了した.

Pythonの基礎的な内容を改めて受けたいと思って、Udacityの「Programming Foundations with Python」を受講した。 www.udacity.com ビギナー向けの簡単過ぎる内容ではあったが、最近はPython初めての人に基本的な書き方を教えるための教材を作っているので、…

Intro to Descriptive Statistics at Udacity を修了した.

前回と同じデータサイエンス分野の「Intro to Descriptive Statistics」を修了した。 www.udacity.com 今回も統計学の基礎的なMOOCだったが、基本的なところを固めるには良い勉強になった。知ってる内容も多かったのでちょっと流し気味に受けていたが、翌日…

自宅の勉強机に本立てを導入した.

コードの写経がとても捗る。500円くらいだったので良い買い物をした。瞬間最大作業効率120%なので、また当分は学習意欲高めで勉強できる。 しかし今日はまた環境周りでハマってた。ほんとにコード書きたい!って時にどハマりするから嫌になる。 自宅マシンの…

サポートベクターマシンを使って顔識別.

Scikit-Learnのサポートベクターマシンと“Labeled Faces in the Wild”のデータセットを用いて顔認識を行った。パラメータチューニングについては、GridSearchCVを用いている。GridSearchCVは設定したチューニングパラメータを設定し、それぞれのパラメータパ…

Tips RSA, 合同式の逆元を求める.

僕は暗号化あたりのアルゴリズムが好きなんだけれど、RSAの合同式の逆元の求め方ってなんだっけ?と年始早々ど忘れしたので改めて勉強し直そうと思う。 合同式(モジュラー算術、時計算術とも言う)とは以下の定義のものを指す。 二つの整数aとbにおいて、そ…

Reproducing Failures.

ソフトウェアに不具合があった場合、不具合の元となるバグを再現することによってデバッグ実験の観察を行わなければならない。実験の結果、バグに対する修正を行うことになるが、修正に対してチェックするためにはバグを再現させる必要があり、再現性なくし…

Androidアプリの特徴ワードをGooglePlayから抽出する.

Androidアプリの特徴となる単語を抽出するためにGooglePlayサービスに対してスクレイピング処理を行う。 Androidアプリにはパッケージ名というアプリを一意に識別する値が文字列として与えられており、GooglePlayのプラットフォームに対するクエリにパッケー…

直近一ヶ月の曜日別平均起床時間と就寝時間を算出してみた。

よく人から「眠そう」だと言われるので曜日別の平均起床時間と平均就寝時間を算出しようと思う。僕はiPhoneアプリで自分の行動をざっくり記録に残すようにしているのだけれど、その記録から直近一ヶ月の睡眠時間と起床時間を抽出して、平均を算出する。Pytho…

GoogleCustomSearchAPIでカテゴリー辞書を自動生成。

ナイーブベイズの学習用途として、まずはGoogleCustomSearchAPIを利用して文書カテゴリーを定義づける単語辞書を作った。最初は自分の手で静的に一つ一つ作っていこうとしたけれど、実際に辞書を手で作っていくと膨大な時間がかかってしまうことになり、僕は…

PythonでWebスクレイピングと形態素解析。

Webは情報の宝庫なのでクローラーを作って巡回させたりすると楽しい。僕も入社1年目の時に検索エンジンを自作して一人遊んでいたが、最近また久しぶりにスクレイピングで遊んでみた。 Webページをスクレイピングして、そのページを特徴付ける単語を抽出した…

ダイクストラ法で最良優先探索。

グラフにおける単一始点の最短経路をダイクストラ法で求める。 ダイクストラ法は、辺の重みが全て同一の非負数の場合にグラフ上の2頂点間の最短経路を求めるアルゴリズムである。 擬似コード Shortest disntances from V: # V is a Top Node. dinstances to …

2015年の目標を再設定.

今年に入って仕事の内容が大きく変わったので残り三ヶ月くらいだけれど、2015年の目標を再設定する。 というか未だにどこから手をつけていけばいいのかがわからなくて、暗中模索でいろんなとこに手を出してしまっているので整理したいという意味が大きい。僕…

完全情報最尤推定法による欠損値補完.

仕事の関係でGraphClusteringについての論文を漁っていたのでここらへんの勉強が止まってしまっていた。いやまさか社会人になってから英語の論文を漁ることになるとは思っていなかった。ここらへん最近改めて思うのだけれど、僕は文系学卒出身の人間なので、…

NativeとRussian Peasantsの処理速度の差。

アルゴリズムで全然処理速度違ってくるよ、という基本的な話。 乗算演算のNative AlgorithmとRussian Peasants Algorithmで処理速度の差を見ていく。 Native Algorithm 一番シンプルな掛け算。xの数分yの値を足していく。 def native(a, b): x = a; y = b z …

差分デバッガに自動で単純化させればいい。

仕事の大半は単調で退屈な作業ばかりだったりする。外から見れば華やかに見えるその仕事も、実は事務作業をコツコツとやる時間が多くを占めていて、中の人は意外とドロくさいと言うかもしれない。 僕が二つ前のプロジェクトで一番嫌いだった作業はただただ単…

Tips, decorator.

デコレータってよく使うのだけれど、使おうとするたびにどう書いたっけとググってばかりいるため、今度こそちゃんと覚えようと思う。汎用的に使いたい機能をデコレータ関数として定義し、利用したい関数の前に書いてやれば、なんとなく拡張されていい感じで…

差分統計処理のための平均計算。

データを定期的に収集して統計計算を行うシステムを書いている際に、差分処理を行いたい場合がある。データはどんどん蓄積されていき、インプットとなるデータが巨大となった時、処理速度はそれに比例して遅くなってしまうためである。そういった時は逐次計…

Tips, select count in psycopg2.

psycopg2を使ってDBを操作していた時にSELECTの戻り値でハマりました。 testコードの期待する結果としては、Playersテーブルの件数を0としていました。テーブルに対してはinsertはしておらず、空の状態であり、単純にselect count(*)としているので0と返って…

Tips, about Cookie.

WebにおいてCookieは重要な概念なのでTipsとして残します。 Cookie CookieはWebブラウザがキャッシュデータを保持するためのHTTPの機能。Cookieを使うことで一度アクセスしたwebページに対して、再度アクセスする度にキャッシュ情報から利用者の識別がされ、…

サクっとRot13を実装する

ノロウイルスが治り、3日遅れながらも今年初出社いたしました。 病み上がりなので、GAEとPythonでROT13ストレッチをします。 ROT13(rotate by 13 places) 文字を任意の個数ずらすシーザー暗号の一種で、暗号化と復号化が同じ仕組でできる。 13字ずらす方式…

PythonでPageRankを実装する

この世界で最も有名なプロダクトの一つであるGoogleの検索エンジンですが、その検索エンジンを実現しているPageRankというアルゴリズムについてPythonで実装したいと思います。 PageRank Webで文字列の検索をかけると最も適したWebページが検索結果の上位に…

Pythonならたった一行でWebサーバを建てられる

ローカルにwebサーバを建てたいと思った際、わざわざApache入れて云々せずともPythonならたった一行のコマンドで非常に簡易なWebサーバを建てることが出来る。モジュールを直接指定する「python -m SimpleHTTPServer」コマンドをインタプリタで打ち込むこと…

再帰関数の実装

再帰関数とは定義した関数をその関数内で呼び出すことを指す。 再帰関数で重要なことは、ベースとなるケースを定義することである。停止条件とも言い換えることが出来るが、ベースケースが無いと循環的に呼び出しが行われ、無限ループに入ってしまう場合があ…

Hashテーブル

前回記事のWebクローラーの勉強の続きとして、効率的な検索のための簡単なハッシュテーブルの実装を行う。Webクローラーで取得したweb上の文字を単にリストへ格納した場合、検索をかけるとリストの頭からループを行う必要があり、処理時間がかかってしまうた…

Webクローラー

検索エンジンは面白い。 ここ最近、Webクローラーのハンズオンに参加したり、web上のスクレイピング記事を漁ってみたり、PythonのScrapyを使ってみたり、UdacityでWebクローラーの講義を受けたりしている。この世界で偉大なプロダクトの一つであり、有名なGo…

文字列検索

一週間に一度のブログ更新の頻度を上げようという試みをしようと思う。 簡単なものでもいいので、コードをとにかくGistに上げて、ここに張り付けるだけでも実践しよう。 その試み第一弾が以下の文字列検索のコード。 引数一つ目の文字列の中に、引数二つ目の…

メタプログラミング

ずっとメタプログラミングについて?が頭の上に浮かんでいて、とりあえず今持っている認識を残したいと思う。 メタプログラミングとは、メタクラスから作られるインスタンスをクラスとして書くことが出来る。つまりクラスがインスタンスを定義するものとすれ…

The Zen of Python

Pythonの裏コマンド的なやつで、Pythonの哲学が読める。 >>> import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat …

デーモンスレッド

最近会社の伝統人事施策があったため、まとまった時間が取れずに記事を書けずにいたけれど、前々から書こう書こうと思っていたテーマを書きたいと思います。 以下、HelloWorldを1秒ごとに5回表示するプログラムがあります。 import time from Lib.Task impor…

AbstractFactory

先日よりデザインパターンの勉強会を始めました。 デザインパターンとは、先人ハッカーたちが繰り返し取り組んだ過去の知見を再利用しやすいようにパターン化したもので、GoFというエーリヒ・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリ…

djangoを読み始めますた。

今やオープンソースな時代ですし、 よきコードはGithubに行けばいくらでも拾ってくることができるので、、 djangoのソースを毎日読んでいこうと思います。最初は、『django/django/core/handlers/base.py』 ミドルウェアのロード部分をピックアップ。 class …

コマンドプロンプトからpythonプログラム実行

インタプリタではなく、コマンドプロンプトから実行する方法。 引数は、sys モジュールのリスト argv に格納されている。argv[0] にスクリプトファイル名が入り、 argv[1] 以降に引数が入る。スペースをタブに変換するコードを例に。 def unexpand(astring, …

pythonで配列をfor文で回している時のカウント

pythonで配列をfor文ループで回す際の配列カウントってどうやるのだろうと、、 count = 0 for i in ["a","b","c"]: print count,i count+=1 となるのかなと思ったけれど、 もっとよい書き方があった。(単純だけど。。) for i, item in enumerate(["a","b",…