サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猫
aki-yam.hatenablog.com
column コマンドと less を組み合わせれば,CSVなどのデータファイルはすごく見やすくなる. ソース:linux - Command line CSV viewer? - Stack Overflow column -s, -t < INPUT.csv | less -#2 -N -S column のオプション: -s, : 区切り文字をコンマに変更(デフォルトはスペース). -t : 列ごとに並ぶように整形する.列が等幅になるようにスペースを挿入. less のオプション: -#2 : 左右のカーソルキーで画面をスクロールする量.デフォルトだと画面表示の半分ごとにスクロールされるので,閲覧しにくい. -N : 行番号を表示. -S : 折り返しをしない. よく使う場合はエイリアスを設定しておけば便利. tcsh の例: alias tless 'column -t < \!*
土曜日なので,コッホ曲線を描いて遊んでみた. コッホ曲線とは, こんな感じのパターンを定義して,パターンの各線分をパターンで置き換える,というのを再帰的に繰り返してできるフラクタル図形. 一度置き換えると,こんな感じ. 5回で, となる. パターンを これに置き換えると, こんな感じになる. プログラムはPythonで作って,Gnuplotで描画した. #!/usr/bin/python from numpy import * from math import * def Rot(p,theta): c= cos(theta) s= sin(theta) p2= array([p[0]*c-p[1]*s, p[0]*s+p[1]*c]) return p2 def DrawLineRecursively(x1,x2,p_list,n,N): if n==N: print ' '.join(
デバイスをオープンし,ちょっとした設定のあと,Linuxで提供されている js_event 構造体に読みこむだけ.Cでも同様.PlayStation 2/3用のコントローラをUSB接続したものでも使えた. 参考: joystick tutorial and code サンプルコード #include <iostream> #include <iomanip> #include <vector> #include <cstdio> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/joystick.h> #define JOY_DEV "/dev/input/js0" using namespace std; int main() { int joy_fd(-1), num_of_axi
よく忘れるので防備録的な感じでメモ. LaTeX で PNG や JPEG を単純に読み込むと,no BoundingBox とかエラーが出るので,バウンディングボックスを指定してやる必要がある.そのためのコマンドに ebb とか extractbb があるが,extractbb を使おう(解像度が高い).ファイルに出力すると,ファイルが増えて邪魔なので,extractbb に -O オプションをつけて標準出力に出力して,includegraphics の bb オプションでバウンディングボックスを指定する. バウンディングボックスの抽出: extractbb -O FILE_NAME(extractbb の代わりに ebb を使うことはお薦めしない) 出力は以下のような感じ: %%Title: ./FILE_NAME %%Creator: extractbb 20090708 %%Bou
(主に英語)論文を書くために使っているツール,ウェブサイトを紹介. ☆は使用頻度. 表現・語彙検索ツール系 AntConc (Linux/Win/Mac) ☆☆☆ コンコーダンスソフト.論文のテキスト(PDF などをテキスト形式で保存)を何本もデータベースとして読ませておいて,単語,熟語などを検索する.Google Desktop(下)と似ているが,AntConc の方が検索方法を細かく指定できる.例えば,正規表現で検索したり,「単語Xと単語Yの距離がZ語以内である文」の検索など.難点は,PDF をテキストに変換して読み込ませないとダメ(もちろんデータベースの保存は可能)な点と,慣れるまでちょっと使いにくい点. Google Desktop (Linux/Win/Mac) ☆ パソコンに保存されているドキュメント類(論文など)の検索.AntConc と違って,自動的にPDFなども(テキスト
いちいち Gnuplot を起動してグラフを描画するのが面倒なので,コマンドラインから使える Gnuplot のラッパスクリプトを書いた.変化するデータファイルをリアルタイムにプロットするスクリプトも組み込んだ.とても使いやすいので紹介する. スクリプト qplot は最後に掲載. 使い方 qplot [オプション] 描画ライン「描画ライン」はそのまま gnuplot の plot コマンド (or splot) に渡される.つまり,gnuplot の > plot "hoge.dat" u 1:3 w l, "hoge.dat" u 1:5 w lに相当するコマンドラインは qplot "hoge.dat" u 1:3 w l, "hoge.dat" u 1:5 w lとなる.ただし, ファイル名の前のコンマは省略できる(自動的に挿入される) ファイル名のクォートは省略できる(同上) の
Microsoft の kinect SDK をダウンロードしてくると,インストールは簡単だし,Visual Studio でサンプルプログラムを簡単にコンパイルして実行できる.しかし,コードはそれなりに煩雑で(と言っても1000行程度だが),自分でアプリを作る場合にどこから始めればいいか,今一つピンとこない. そこで,GUIなどを一切使わず,単にkinectでスケルトン (skeleton) を計測してファイルに保存するだけ,という最小のプログラムを書いてみた.言語は C++.基本的には,このページの内容をそのまま流用している. 準備 Visual Studio は各自で用意して頂く. Kinect for Windows SDK v1.0 Beta 2 をインストールする.もっと新しいのが出てたら,そちらでもよいと思う. 試しに,インストールしたディレクトリ (e.g. C:\Prog
あるテンプレート関数(テンプレート型引数 T)で,例えば std::vector::iterator itr を定義しようとすると,コンパイルエラーとなる(std::vector::iterator が型であると認識されない).この場合 typename std::vector::iterator itr のように,前に typename をつけて,型であることを明示する.もし,iterator に相当するものが,テンプレートクラスの場合,template キーワードを使ってテンプレートであることを明示しなければならない. 例えば, template <typename T1> struct TTest { struct TIn { double X; }; }; こんな構造体があったとして, template <typename T1> void Func (void) { TTest<
テンプレート関数の明示的インスタンス生成で解説したように,テンプレートクラスとかテンプレート関数を明示的にインスタンス化しておくことで, ヘッダファイルの肥大化(コンパイル速度の低下) 望ましくない実装の公開 といった問題を避けられる.一方,テンプレートクラスやテンプレート関数で,ある型についてのみ特殊な実装を行う,「テンプレートの特殊化」という技術がある(過去の記事で何度か使っている).本記事では,インスタンス化と特殊化を同時に使うと,思わぬ落し穴にはまることを,サンプルを交えながら解説する. 以下の内容は標準規格などで確認できていないので,g++(4.3.3)に限った話かもしれないことを注意しておく. まず,以下の3つのファイルからなるユニット unit1 を用意する: ヘッダ: /*! \file unit1.h \date Feb.19, 2009 */ #ifndef unit1
作成時刻やバージョン情報を PDF にスタンプするためのスクリプトを作った. LaTeX とか pdftk を使う. アウトライン pdfstamp というスクリプト(以下にソース掲載)を使って,時刻やバージョンが刻印されたPDFを作る.このPDFと,スタンプしたいPDFを pdftk で重ねる. pdfstamp とりあえずソース #!/bin/bash usage="`basename $0` OPTIONS OPTIONS: -t TEXT -o OUTPUT_FILENAME [-m|-margin MARGIN](0.1cm) [-p|-pos lt|ct|rt|lb|cb|rb](rt) [-page PAGE_SIZE](a4j) [-f] : force overwrite [--] : terminate to parse option [-help] : show he
シミュレーションなどでデータをファイルに出力する際,リアルタイムにデータをプロットしたい場合がある.gnuplot を popen し,自動的に replot によって描画を更新する python スクリプトを作ってみた. たぶん linux 限定ですorz... cygwin 上でなら使えるかも. itplot os.popen でプロセスを開いて,write メソッドで書き込み,flush メソッドでフラッシュする.前半はコマンドラインオプションのパース. #!/usr/bin/python import os,time,sys usage='''iterative graph plotter using gnuplot usage: itplot [OPTION] PLOTLINE OPTION: -s XXX setting line -i T iteration interval
C++ でメンバ関数を部分特殊化しようとすると(例えばテンプレートクラスのテンプレートメンバ関数を,ある特定の型について特殊化する),コンパイルエラーとなる.gcc なら "error: invalid use of incomplete type" だとか, "error: enclosing class templates are not explicitly specialized" などのエラーが発生する.しかし,現実には,部分特殊化したいことも多い.そこで,やや強引な解決策を実装してみた. 問題提起 template <typename T1, typename T2> struct TTest { T1 ex() { ... } }; template <> void TTest<void, void>::ex() // OK { ... } これは,メンバ関数 TTest::
linux のコマンドラインで % ej dictionaryとか打つだけで,英辞郎 on the Webの検索結果が表示されると便利だ. そんなシェルスクリプト32nd Diary (2005/08/26)で紹介されていたので,日本語とか熟語が使えるようにしてみたりした: 修正(@Jan.01,2009): sed のパタンを一部修正. さらに修正(@Apr.16,2010): sed のパタンをかなり修正 #!/bin/bash # src: http://taka.no32.tk/diary/20050826.html KEY=`echo $@ | nkf -w -w80` echo $@ >> ~/.eng-list # 履歴を保存(不要なら削除). URI="http://eow.alc.co.jp/$KEY/UTF-8/" RS=`echo '▼ 検索結果本体 ▼' | nkf
nVIDIA の GeForce 8800 GT を搭載しているマシンに, Debian-lenny をインストールし, KDE 3.5.9 で作業している.夜パソコンを起動したまま帰宅し朝見てみると, X.Org が固まっている.この問題を解決できたようなので,レポートする. 症状 X.Org が固まっている (CPUを100%使用している) マウスは動く Konsole (KDE用Xターミナル) にフォーカスがある場合は,キー入力を受け付ける ほかのウィンドウにフォーカスを移動できない Ctrl+Alt+F2 でコンソールに移動できる ~/.xsession-errors や /var/log/Xorg.0.log を見ても,有益な情報はない こうなった場合は Ctrl+Alt+F2 でコンソールに移動し, sudo kill -KILL (XorgのPID) で X.org を落す.
STL (standard template library) コンテナを include すると,それなりにコストが掛かる(参考).このコストは,場合によっては「前方宣言 (forward declaration)」によって大幅に軽減できる.STL コンテナの場合,前方宣言が少々ややこしいので,まとめておく. 前方宣言 (forward declaration) 前方宣言とは,関数やクラスの定義を与えずに,宣言だけ書いておくことだ.関数やクラスを参照するが,その定義までは知る必要ないときは,前方宣言を書いておくだけで済む.例えば,ヘッダファイルに void func1(const double &x); とだけ書いておいて,定義は別のファイルに書いても,このヘッダファイルを include するだけで func1 を使うことができる. 次の例も可能だ: class TTest; void
これまではてブを使っていたのだが,検索したブックマークの編集ができないなどの不満があったので,Google Bookmarks へ移行を始めた.Delicious 経由でdel.icio.us to Google Bookmarksを使う方法だとうまくいかなかったので,ブックマークを移行するスクリプトを書いた. はてなブックマークをやめる理由 検索したブックマークの編集ができない(右上の検索ボックスにしか検索結果が表示されない) 詳細な編集ページを開くのが大変(*usersをクリック,→このエントリーのブックマークを編集・削除をクリック) 詳細な編集ページでもURLは編集できない(余分なパラメータを消したいときに困る) しかもプライベートモードにしているとタイトルが編集できない(タイトルは共有だから? でも,chrome のはてブ拡張なら可能だ.わけわからん) 以前に比べると速くなったが,
プログラミングしていると,あるシンボル(変数名,関数名,クラス名,etc.)がどのオブジェクトファイル(or アーカイブファイル)や共有ライブラリで定義されているか,調べたいことがある(どのファイルをリンクすればいいかわからないときなど).通常はシンボル名でググればよろしい.だが,稀に,ググるのでは解決できないことがある.そのような場合の対処法として,無理矢理 /usr/lib や /lib にあるライブラリファイルを検索する方法を紹介する. ライブラリの種類 予備知識なので,読み飛ばしても可. プログラムをコンパイルして生成されたオブジェクトファイル (*.o) をコマンド ar でアーカイブすると,アーカイブファイル (*.a) ができる.これが,静的ライブラリ (static library).実行ファイルの生成時に静的にリンクされるため,実行時にはアーカイブファイルは不要. 一方,
リモートサーバにある Git リポジトリから HTTP (WebDAV) 経由で pull したり clone を作ったりする場合の注意点について,おぼえがき. 注意: Git は最近使い始めたばかりなので,正確でないかもしれません. 一般的な前準備(参考程度に) リモートサーバ(apache2/Debian を仮定)で WebDAV を有効にして,リポジトリのパスを /git にエイリアスし /git の認証設定を行う設定ファイルを Alias /git /home/akihiko/git <Location /git> Options Indexes # DAV on AuthType Basic AuthName "Git repository" AuthUserFile 適当な .htpasswd ファイルのパス Require valid-user </Location>こんな感
ここ最近の octave / liboctave のインストール方法についてメモ.(Debian / Ubuntu) (追記@Feb.06,2010)共有ライブラリの指定について. 対象は Debian - lenny, squeeze あたり. Ubuntu 9.10 なども,同じ方法でよかったはず. パッケージのインストール まずパッケージのインストール. octave3.0 系なら, sudo apt-get -f install octave3.0 octave3.0-headers octave3.0-htmldocだけでよい. libatlas, libfftw3 などは自動で入るようになったようだ. 共有ライブラリの指定 (updated at Feb. 06, 2010) 共有ライブラリ liboctave.so はディレクトリ /usr/lib/octave-x.x.x
そんなスクリプトをわざわざ作らなくても,Settings -> Calendars -> CALENDAR -> Notifications -> Daily agenda にチェックを入れておけば,5am(実際は4:30am頃?)にメールで予定一覧を送ってくれる.が,フォーマットが気に入らない(携帯メールに転送すると文字数制限をオーバーする),好きなメールアドレスに送れない(G-mailのフィルタで転送すればいいが)といった問題があるので, Google Calendar API を使って,1日の予定を一覧するPHPスクリプトを作ってみた. Google Calendar API Google Calendar の Settings -> Calendars -> CALENDAR -> Private Address: -> XML を選択すると, http://www.google.
include するヘッダファイルが多くなればなるほど,コンパイルに掛かる時間が増加する.では,それぞれのヘッダファイルを include するコストはどれくらいなのか? ということで,調べてみた. 調べ方 ヘッダを include するだけのプログラム e.g. #include<list> int main(){return 0;} を書いて,-E を付けて g++ でコンパイルし(プリプロセッサの処理のみ行う),出力される文字数を比較した.要するに,include されるファイルをすべて展開した結果の文字数(==コンパイルに掛けられる文字数)での比較だ.もちろん template の処理とか,内容によってコンパイル時間が違ってくるので,「コンパイルに掛けられる文字数」と「コンパイル時間」は必ずしも比例しない.が,ひとつの目安にはなると思う. 実際は, #!/bin/bash file
gnuplot のようなプログラムには,パイプを使ってほかのプログラムからデータを送ることができる.std::cout などのストリームクラスのように,パイプストリームクラスを作成すると便利そうなので,実装してみた. パイプストリームクラス (pstream.h) #ifndef pstream_h #define pstream_h //------------------------------------------------------------------------------------------- #include <cstdio> #include <iostream> #include <sstream> //------------------------------------------------------------------------------
コマンドラインで,例えば pwd などで出力させた文字列をクリップボードにコピーする方法は, echo -n `pwd` | xclip -i -selection clipboard とやればよい.そうすると konqueror などのアドレスバーに Ctrl+V で張り付けると言ったことができるようになる. 前半で echo -n `pwd` としているのは, pwd だけだと改行が入ってしまうからだ. 上のままでは少し長いので,適当にエイリアスしておく.
Inkscape という強力なオープンソースのベクタ図形描画ソフト (illustrator みたいなもの) がある. linux で使えるベクタドローソフトでは, Inkscape か OpenOffice.org あたりが代表的だと思うが,多分かっこいいイラスト(?)を書くのには Inkscape が一番だと(個人的には)思う. Inkscape で書いたイラストを latex に貼るとき(論文執筆などで),eps に変換する必要があるが,ぼかしなどを含む場合は,ちょっとしたテクニックが必要になったりするので,紹介. とりあえず,最新バージョンに 現時点での最新版は 0.47 だが,これをインストールした方がいい(古いバージョンだとepsの吐き出しが限定的だったり,gnuplotで吐いたSVGをちゃんと読めなかったりする). linux の場合はInkscapeのページからソースをダウ
例えば,ディレクトリ /tmp/hoge に print.ps というファイルが作成されたら,それを自動的に印刷するようにしたい場合,ファイル作成イベントを監視する必要がある. inotifywait というコマンドを使えばそれが簡単にできるので,紹介する. 次のbashスクリプトは, /pstmp というディレクトリにファイルが作成されたら,そのファイルを別ユーザアカウントで kghostview で開く,というものだ*1. #!/bin/bash # required package: inotify-tools psout_dir=/pstmp m_account=aki-yam events=(-e CREATE -e MODIFY -e MOVED_TO) while inotifywait ${events[@]} $psout_dir; do psfile=$psout_di
眠かったから,ncurses ライブラリを使ってシューティングゲームを作ってみた.10年以上昔,N88-BASICで同じようなプログラムを作ってたのを思いだした. 作ったのは, こんなん.十字キーで動かしてスペースでミサイルを発射(3発まで).敵を全部撃ち落とすか,自分が敵にやられると終了.嫌になったらqキーで終了. コード(雑) //------------------------------------------------------------------------------------------- /*! \file sample.cpp \brief shooting game on console \author aki-yam \version 0.1 \date Apr.02, 2009 \version 0.2 \date Apr.28, 2009 スレッド関連
C/C++ で,エラーを検出してプログラムを強制終了する場合, exit(EXIT_FAILURE) とか abort() を使う.このうち abort() はコアを吐いてから終了してくれるから(linux の場合),コアを gdb などで解析することにより,デバッグが楽になる.例えば gdb a.out core として gdb を起動し, bt コマンドを使えば,バックトレースできる.しかし abort() による終了は穏便ではない.例えば, exit だとグローバルオブジェクトが破棄されるが, abort() だと破棄されない.そこで, success:正常終了, qfail:正常終了(エラーを返す), btfail:正常終了(バックトレースし,エラーを返す), abort:異常終了, df:デフォルト という4+1段階の終了オプションを選択できる終了関数 lexit を定義した.
メモリの二重解放とは, new などで確保したメモリ領域(ヒープ領域)を2回 delete などで解放することを言う. new と delete をきちんと対応させて書いていないときに起こる問題だ.特にクラスのメンバに動的確保したメモリへのポインタを含む場合にやってしまいがちである.ここでは二重解放によって発生する問題を解説する. 結論から言うと,メモリを解放した後 (delete p1;),ほかの用途でメモリを確保し (p2=new T;),たまたまそれが解放したメモリと同じアドレスに割り当てられてしまった場合 (p1==p2),最初のメモリを二重解放すると (delete p1;),新しく確保したメモリ (p2) が解放されてしまう.この結果,新しく確保したメモリにアクセスすると値が書き換えられていたり,セグメンテーションフォルトが発生する場合がある.プログラマはまず,新しく確保したメ
C++では, #define で定数を定義するな, const TYPE によるグローバル変数(もしくは適当な名前空間に内包されたグローバル変数)を使え, #define でマクロ関数を定義するな,代わりに inline 関数を使え,みたいなことが言われる.これは確かにその通りだ. 1項 #define ではなく, const と inline を使おう Scott Meyers (スコット・メイヤーズ): Effective C++ (吉川訳, アスキー出版局, 1998) に書いてあるように, プリプロセッサよりコンパイラに仕事させるべき だ.でもマクロにしかできないことも多々あるわけで. case 1: 配列のサイズを取得 #define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof((array)[0])) SIZE_OF_ARRAY(配列)
次のページ
このページを最初にブックマークしてみませんか?
『akihiko’s tech note』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く