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

GCC 4.3の新機能 2進数表記

c gcc

GCC4.3のChangelogを見ていたら、 GCC4.3から 2進数表記が対応したみたい。 大学のプログラミングの授業ではこんな機能が あったらいいな〜って思っていたけど、今になると そこまでうれしくないかな。 #include <stdio.h> int main(void) { printf("%d\n", 0b1111); </stdio.h>…

逆ポーランド計算機 Perl版

Perlで書いたらだいぶ簡単ですね。 やっぱりサブルーチンリファレンスがあると 気持ち楽にかけます。 #!/usr/local/bin/perl package ReversePolish; use Moose; use MooseX::AttributeHelpers; has stack => ( metaclass => 'Collection::Array', is => 'rw…

GCCの4.3の新機能 __COUNTER__マクロ

c gcc

もう一つ気になった機能で __COUNTER__マクロがあります。 これは呼ばれるたびに 0から1ずつインクリメントしていく というものです。 利用方法がよくわからないけど、便利なのかな? マクロって結局実行前に展開されてしまうからね。 そこが難しいところで…

シンプルな逆ポーランド式計算機

c

数字は一桁しか対応してません。 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define STACK_MAX 1024 typedef int (*OP_TYPE)(int, int); static OP_TYPE get_operator(char c); static int is_operator(char c); static int add(int a, int b); static int sub(int a, </ctype.h></stdlib.h></stdio.h>…

右クリックにしかならない問題

ニコニコ動画を見ているとクリックが右クリックに しかならないときがある。動画をリロードしたら治った けど、commandキーを押しながらクリックしたら左クリック になった。 firefoxの問題なのかなんなのかわからないですけど、 これで解決しました。

A-Eのような表記を ABCDEに展開するプログラム

c k&R

K&Rに出ていた問題を解いてみた. static int expand(char *dest, const char *src) { int i, j, dest_index; int length; char prev, next; length = strlen(src); dest_index = 0; for (i = 0; i < length; i++) { if (src[i] == '-' && (i != 0 && i != le…

リモート環境での screen

Snow Leopard Macの Terminal.appを使ってリモートの Linuxマシンに ログイン後 screenを起動すると表示が乱れるという問題が 生じた. ついでに Emacsを開いても色が全く出ない.調べてもよくわからなかったので, itermを入れてみた。 そしたら解決された。デ…

Macの perldocがおかしくなった

突然 perldocの調子がおかしくなった. エスケープシーケンスが ESC??みたいな具合に表示されて しまい見づらくて仕方がない. また perldoc perldoc等一部の ものは上記の問題に加えて vimが起動するということになってしまった. 原因はわからないけど, port…

GNU dateのすごい機能

会社で休日出勤するときは代休を取らなければいけません。 何日以内に必ず取得しないといけないんですけど、それを 調べるのにウェブサービス探したり、自作スクリプトを書いたり ってやっていましたけど、dateコマンドだけでいけることが わかりました。BSD…

同期書き込み

システムコールの本を読んでいると、writeシステムコールは 同期書き込みが行えるようです。やりかたはファイルを open するときのフラグ引数に O_SYNCをつけるだけです。 O_SYNCをつけた同期と、非同期書き込みで最後にfsyncで ディスクに書き出すプログラ…

MacOSでの pingの場所

なにげに pingがうちたくなって試してみたところ エラーになった。 % ping zsh: command not found: pingmanでは出てきたのでさすがにどこかにあるだろうって 思ってスーパーユーザのディレクトリの中身をみてみたら あった。 % ls /sbin SystemStarter* fst…

数値定数について

Cリファレンスマニュアルを読んでいると数値定数について 知らなかったことがいくつかあったのでメモ。"0x"をつけた数字は C89以降では unsigned int以上で扱われる。 C89では可能性として long, unsigned longもあるんですけど、 規則によるとオーバーフロ…

Perlで localeを扱う

昨日のエントリの問題の解決。コマンドラインで LANG=Cとしなくても解決できる方法が ありました。localeをその場で変えてあげればいいだけ でした。setlocaleという CのAPIがあるようでそれを 使えば解決できます。Perlでも同様の APIが POSIX パッケージに…

日付解析できない原因がわかった。

昨日のエントリーで Time::Pieceモジュールの strptimeメソッドが うまくいかない理由がわかりました。同時に解決方法もわかりました。 結論からいうと、 ロケールに問題がありました。昨日のうまくいかない 例をたどってみると曜日、月の解析ができないこと…

日付解析がうまくいかない

昨日のエントリのように ISO8601形式であれば日付の解析が 行えたが、RSSにある pubDateの形式の場合はなぜかうまくいかない Time::Pieceモジュールに含まれる Piece.xsを確認したところ、 Cライブラリの strptimeを呼び出しているだけであったので、 C言語…

日付の解析

RSSにある更新日時を解析するのを正規表現使ってやっていましたけど、 楽な方法がないかな〜と思って調べてみた。 Cライブラリの strptimeを使えばいいみたいです。 Perlでは Time::Pieceから strptimeが使えます。 フォーマットから勝手に解析してもらえる…

JIS配列からUS配列への変更

メインのマシンのキーボード配列を US配列にしたので サブのマシン(日本語キーボード)も同様に修正。 Gnomeの設定からキーボードで 変更してもうまくいかず、コマンドラインから修正。 % setxkbmap -model us -layout usこれで Shift押しながら 2を押せばア…

リアルタイムシステム

社長に散々怒られたのでメモ。リアルタイムシステムというのは早ければいいというわけではない。 遅くても構わない(あまりないだろうけど)。大事なことは 一定時間に処理が終えることを保証できること。これができなければそのシステムはリアルタイムシステ…

ディレクトリにあるファイル名の取得

Perlだったら楽勝なんですが、C言語ではどうやるかが わからなかったので調べてみた。opendirでディレクトリを読み出して、readdirでディレクトリ エントリを読み出してファイル名を取得できる。 #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> int main (int arg</sys/stat.h></dirent.h></sys/types.h></stdio.h>…

続 Emacsのエンコーディング指定プラグマを挿入する

以前書いたバージョン では, 各プログラミング言語用にコメント記法をリストで保持していましたけど、 comment-regionを使えば、Emacsが認識する言語であれば正しくコメントアウト してくれるはず。ということで以下のようなものにした (defun insert-encodi…

標準エラー出力を標準出力にリダイレクト

方法がわからなかったので、perldocで調べてみると通常の openで "&"をつければいいみたい。そこで dupシステムコールと同じとあるん だけど、dupの意味が分からなかったでそちらも調べました。名前から 察するに単に複製って思っていたんですけど、既に開い…

WWW::Mechanizeで Basic認証

ちょっと必要になったので調べてみた。 my $mech = WWW::Mechanize->new(); $mech->credentials( username => password ); $mech->get($url); credentialsメソッドでユーザ名、パスワードを指定 してあとは通常通り getメソッドで urlを取得という ことでい…

WWW::Mechanizeを使ってみた

毎度お馴染み画像取得スクリプト #!/usr/bin/perl use strict; use warnings; use Time::HiRes; use IO::Handle; use File::Basename; use WWW::Mechanize; my $url = shift @ARGV or die "Error: please input url\n"; my $mech = WWW::Mechanize->new(); $…

Roleの使いどころ

Moose::Roleは Javaでいうところの Interfaceみたいに使うものと思って いたけど、もうちょっと高度なことにも使える。Interfaceだと、とにかく 決められたメソッドを実装するということになるけど、Roleだとそこに あるメソッドを定義して、そのメソッドに…

矩形処理

連続する行の先頭にスペースを何個か入れたいというようなことは よくあります。そんなときは Emacsでは string-rectangleをよく 使います。使い方は C-x r t [文字列]となります。 1:aaaa 2:bbbb 3:ccccこんなときに 1行目の先頭にマークをつけ、3行目の先…

UTF-8でないXMLファイルの解析

極めて稀ですが、XMLファイル(RSS)等がUTF-8でエンコーディング されていないときがあります。一応処理はできるようなんですが、 いろいろと設定がやるのが面倒くさいので以下のようなことで 実現しました。 #!/usr/bin/perl use strict; use warnings; use …

HTML::TreeBuilder::XPathを使ってみた。

XPathを知りたくてというか実践したくて使ってみた。 返り値となるオブジェクトがいろいろとでてきてわからないが、 そんなときは refとか isaで型をチェックして、ドキュメントを見て ということを繰り返せばなんとかなる。以下毎度お馴染みのサンプルです…

nullと undefinedの違い

GreaseMonkeyスクリプトを書いていたらなんかエラー出てるなって 放置していたけど意味がようやく理解できた。Javascriptって nullか どうかのチェックで undefinedのチェックができないんですね。 ていうか undefinedと nullが違うということさえ知らなかっ…

HTML::TokeParserを使ってみる

いろいろと HTMLを解析することがあるけど、最近はほとんどテンプレートから 生成されたものなので、正規表現で簡単にかけることが多い。でもたまに、 手書きだったり、オーサリングツール使っていたりするサイトだと、微妙に 属性の順番が変わっていたり、…

HTML::Parserを使ってみる

HTTP::Messageのソースコードを読んでるときに, HTML::Parserが使われて いたので perldocを読んでサンプルコードを書いてみた。 イベントドリブンなツールなんで毛嫌いしていたところもありますけど、 そんなに難しくなかった。ただコンストラクタが若干あ…