ITエンジニアのブログ

IT企業でエンジニアやってる人間の日常について

2015-01-01から1年間の記事一覧

プログラミング言語を作る。第1回:構想

新しいプログラミング言語のコンパイラを作りたいと思ってなかなか行動に移していなかったのですが、社会人になることですし、そろそろ開発をしていきたいと思います。 最初から道筋が決まっていてそれを解説するのではなく、作りながら試行錯誤を繰り返して…

sudo時にコマンドが実行できない場合の対処

CentOS で Python3.5 をインストールして pip3.5 をしようと次のコマンドを実行しました。 sudo pip3.5 search nltkすると、コマンドが無いということで実行できませんでした。普通に pip3.5 をコマンドとして入力すると実行できるので、sudo にした際にパス…

PHPとMySQLの文字列設定について

自然言語処理のために文字列のアノテーションを行うためのブラウザインターフェースを、 PHP, MySQL, JavaScript で作っていたのですが、コーパスの文字コードが統一されていなくて、それを UTF-8 に変換して使うために苦戦したので記しておきます。 PHP の…

OCaml の比較で間違っていた話

OCaml の処理系の実装を大学の課題で取り組んだことがあって、そのときは let多相の実装まで取り組めなかったので、改めてやってみることにしました。 let多相というのは、例えば引数を一つ受け取って同じ値を返す関数 id を定義すると、 # let id x = x;; v…

D言語のコンパイラdmdがバージョンの衝突で動かなかった

Mac で Homebrew によって D言語のコンパイラ dmd を導入していたのですが、 brew upgrade をするとなぜか import std.cstream; import conv: to; int main(){ dout.writeLine(to!(string)(3)); return 0; } だけの簡単なプログラムすら動かなくなってしまっ…

何故か確率的にしか動かないC言語の構文解析プログラム

Scala で構文木出力のためのパーサーコンビネーターを書きました。多言語対応にするつもりで、現在はC言語のそれが大体動くようにはなったのですが、 何故か構文解析プログラムで勝手にトークン列が変更されてしまうという原因不明のバグにはまってしまった…

JavaScript の関数での間違い

先日書いていた Node.js で動作させる JavaScript のプログラムを実行したところ、何故かエラーで動かなかったので色々と調べてみました。 原因は function 式にセミコロンを付与していなかったことなんですが、結構わかりづらいバグで苦戦しました。動作環…

Scala の immutable が何故か変更可能

手元で実行した Scala 2.11.1 のインタプリタで、 immutable の Array, Set などが何故か変更可能になっている。 scala> var s = scala.collection.immutable.Set[Int]() s: scala.collection.immutable.Set[Int] = Set() scala> s += 1 scala> s s: scala.c…

D言語

D 言語を扱ってみたくなったので Hello World! プログラムを探して DMD でコンパイルした。 import std.stream; int main(){ stdout.writeLine("Hello World!"); return 0; } しかしコンパイルエラーになってしまった。 D 言語は開発途上で仕様が頻繁に変わ…

再帰をスタック構造を利用してループに変更する。

再帰をスタックに直したことが無かったので、 factorial と fibonacci について実行してみた。( factorial(0) が正しく動かないのは見逃してください。) #include <iostream> #include <stack> using namespace std; int factorial(int n){ int ans = 1; stack<int> s; s.push(n)</int></stack></iostream>…

ナップザック問題

動的計画法を用いる機会が無くてナップザック問題すら解いたことが無いのでナップザック問題を解きました。入力 n w w1 v1 ... wn vnn 種類の荷物から自由に選択し、重さ w 以下で価値が最大となる組み合わせを選択する。 i 番目の荷物の重さは wi で価値は …

動的計画法によるDNA配列の最長共通部分列

動的計画法を学習してから数年、全然使っていないと思って DNA 配列の LCS を求めるプログラムを書きました。 長さ n の文字列 s と長さ m の文字列 t が与えられたとして、部分文字列がより長く一致する空白(ギャップ)の与え方を求めます。 s の i 番目ま…

Python3 コンストラクタ__init__ の初期化の値について

Python3 で Wikipedia のデータを解析するために、 class Entry: def __init__(self, title, redirect_from=[], document=None, link_from=[], link_to=None): self.title = title self.redirect_from = redirect_from self.document = document self.link_f…

git ファイルの登録解除

enchant.js を使ったゲームのソースコードを GitHub のリポジトリに追加する際、間違って enchant.js までアップしてしまったので、 git rm --cached js/enchant.jsで削除しました。これで、手元にファイルを残したままリポジトリから削除出来ました。

.gitignore が効いていない

.gitignore に .DS_Store などを登録しておいたが、 git add . とコマンドを入力するとなぜか .DS_Store まで含まれてしまいました。 とりあえず git config --global core.excludesfile ~/.gitignoreを実行したんですが、 .gitconfig にただ内容を追加して…

SSH の鍵認証の設定

OS

今まで SSH はパスワードを使ってログインしていたのですが、先日、初めてさくら VPS に鍵認証の設定をしたので、それをメモしておきます。(OS:Ubuntu)なぜ鍵認証をしたかというと、ポート番号の変更がなぜか出来なかったからです。(他の PC では普通に出来…

ARC018 [C]席替え

ARC018 の C 問題「席替え」を(解説を見ながら)解きました。 i 行 j 列 (i,j) の人の成績 G(i, j) とするとき、 (a,b) まず、 x_i = (x_(i-1) + a) % p で、 a%p!=0, m*n 成績がすべて異なる値をとるとき、行は floor(G[i][j]/m) で確定し、列は交差しない…

ARC017 [C]無駄なものが嫌いな人

N 個の数値のうち、好きなだけ選んで合計を X にできるパターンの個数を求めるという問題で、 N が小さい値ならばそのまま全探索(O(2^N))すれば良いんですが、 N が 32 だと時間切れになります。解説を読むと、N 個の数値を半分に分割し、片方の合計を p, も…

bit DP で TSP を解いてみた。

bit DP どころか DP すら碌に書いたことが無いレベルだが、 ARC016 の C 問題で bit DP を使うことになるようなので練習しました。学んだことを記しておきます。 bit DP とは 例えば TSP (巡回セールスマン問題)で、拠点 ABCD を回ることを考える場合、既…