monolog

monora log #=> ものろーぐ

Programming カテゴリのアーカイブ

2016年1月あたりの今日このごろ

Programming 雑記

こんばんは。
面白そうな事にどんどん手を出し続けた結果、日々忙しい生活を送っています。

ふと、季報的な物を書きたくなったので書きます。

10/27: monora rebuild

12/7: Adventar::List release

12/11: 某社に見学に行く / バイトを始める

12/14: monora improve

12/16: ネットワークスペシャリスト試験合格

read more »

SECCON 2015 Online CTF に参加しました (Write-up)

Programming

CTF 完全初心者なのになぜか SECCON 2015 九州大会「Attack & Defense」 というオンサイトCTFへ参加し、 -163125 点を獲得した kyontan です。
その節は本当に申し訳ありませんでした。関係各位へお詫び申し上げます。

15:57:20 MMA(kyontan) got -163215 points from ….

http://pastebin.com/KTqNZ4Jf

さて、今回は人生2回目のCTF大会である、SECCON  2015 Online CTF へ、学校の同級生である h-otter / @hogextend と共にチーム overflow として参加しました。

最終順位は 1200点 147位 でした。初心者なりには良くできたのではないでしょうか…… (http://score.quals.seccon.jp)

seccon2015-ranking

read more »

sinatra-activerecord で seed_fu を使ってみた

Programming

Sinatra で、sinatra-activerecord を使っているときに、$ rake db:seed すると、既に存在するレコードが重複登録される。

これ、とても一般的な問題で、 Rails だと、seed_fu というのを使って解決したりするらしい。

Rails (ActiveRecord 4.x) で動くなら Sinatra (sinatra-activerecord) でも問題なく動くとおもいきや、$ rake -T しても db:seed_fu が表示されない……

ソースやらなんやら見ながら唸っていたら、どうも Rake のタスク追加を、 Railtie を使ってやろうとしているところを発見した。
どうやら Rails だと、初期化時にここのコードが走るらしいのだけれど、Sinatra にそんなものはないので当然タスクは追加されない。

というわけで、Rakefile にベタ書きしてみる。
メインのアプリケーションソースが ./app.rb にあるということになっています。(適宜書き換えてください)
あと、なぜか <<< < に置き換えられたので修正してください。

namespace :db do
  desc < <-EOS Loads seed data for the current environment. It will look for ruby seed files in (settings.root)/db/fixtures/ and (settings.root)/db/fixtures/(settings.environment)/. By default it will load any ruby files found. You can filter the files loaded by passing in the FILTER environment variable with a comma-delimited list of patterns to include. Any files not matching the pattern will not be loaded. You can also change the directory where seed files are looked for with the FIXTURE_PATH environment variable. Examples: # default, to load all seed files for the current environment rake db:seed_fu # to load seed files matching orders or customers rake db:seed_fu FILTER=orders,customers # to load files from settings.root/features/fixtures rake db:seed_fu FIXTURE_PATH=features/fixtures EOS task :seed_fu => :environment do

    if ENV["FILTER"]
      filter = /#{ENV["FILTER"].gsub(/,/, "|")}/
    end

    if ENV["FIXTURE_PATH"]
      fixture_paths = [ENV["FIXTURE_PATH"], ENV["FIXTURE_PATH"] + "/" + settings.environment.to_s]
    end

    SeedFu.seed(fixture_paths, filter)
  end

  task :load_config do
    require "./app"
  end
end

Rake::Task["db:seed_fu"].enhance(["db:load_config"])

SeedFu.fixture_paths = [
  Pathname(settings.root).join("db/fixtures").to_s,
  Pathname(settings.root).join("db/fixtures/#{settings.environment}").to_s
]

コードとしては、seed_fu の rakeファイル を元に、sinatra-activerecord から、データベースの接続設定を拾ってくる部分を参考にしたりした。

Rake::Task["db:seed_fu"].enhance(["db:load_config"])

の部分がミソで、これでアプリケーションを通してデータベースに接続する必要がある。ここで2時間ぐらいハマった。

non-root な環境で UTF-8 対応の nano をビルドする

Programming

Ubuntu なレンタルサーバーで、 GNU nano を使おうとしたらそもそも nano が入ってなくて、適当にソースを拾ってきて野良ビルドしたら日本語が打てなくてつらくなった。
つらくなったので、--with-utf8 を付けてビルドしようとしたら、 configure で以下のエラーが出てつらくなって結構ハマったので備忘録。

*** UTF-8 support was requested, but insufficient UTF-8 support was
*** detected in your curses and/or C libraries. Please verify that your
*** slang was built with UTF-8 support or your curses was built with
*** wide character support, and that your C library was built with wide
*** character support.

これを non-root な環境で以下の方法にて解決した。
とてもシンプルではあるんだけど、 –enable-widec とか忘れるねん……

バージョンは執筆時点のものです。

$ wget http://www.nano-editor.org/dist/v2.4/nano-2.4.2.tar.gz
$ rm nano-2.4.2.tar.gz
$ cd nano-2.4.2
$ apt-get source libncursesw5
$ cd ncurses-5.9-20140118
$ ./configure --enable-widec --prefix=$HOME --with-shared
$ make
$ make install
$ cd ../nano-2.4.2
$ ./configure --prefix=$HOME --enable-color --enable-multibuffer --enable-nanorc --enable-utf8
$ make
$ make install

追記 (2015/10/14)

とのことなので、Gehirn RS2 では non-root でも何もしなくても nano が使えるようになるらしい。ありがたい……。

Gehirn DNS を DDNS っぽく使えるようにする gddns2 を作った

Programming

皆さん Gehirn DNS 使ってますか? 僕は使ってます!

Gehirn DNS というのは、エイリアスやらマイグレーションやら機能が充実している DNSサービスです。
Web インターフェースもモダンで結構使いやすいのですが、もちろん API も叩けるので CLI でアップデートできて便利。
ステマっぽいですが、使ったところで僕には1円も入りません……

そんな Gehirn DNS を、gddns を使って DDNS っぽく使っていたのですが、Gehirn Infrastructure Service の開始に伴い API体型もガラッと変わりました。

新しい Gehirn DNS でも DDNS っぽく使いたいですよね。
というわけで gddns2 を作りました。

read more »