-
色々とCygwinで頑張ってましたが、オーバーヘッドの問題なのかやっぱり遅いと感じるようになって来ました。いや、単純に私のPCスペックがあれなだけだと思いますけど・・・。
ネイティブなLinuxでconfigureスクリプトやdoxygenを走らせてみると、比較にならないほどサクサク進んで驚きました・・・。
gtkやtracefやdotが使いたいので開発用Linuxが欲しいのですが、一部のアプリやLinuxディストリビューションの問題で中々Windows離れができないのです・・・。普通に別途インスールも手ですがいちいち再起動して切り替えるのも面倒なんですよね。他には仮想マシンとか流行ってますがどう考えてもスペック不足です。ありがとうございました。
-
std::localeなんてあったんですね・・・。
しかも中々便利そうな香りがするのですが。
http://www.6809.net/tenk/html/prog/stlpmemo/README.utf8.jp
http://d.hatena.ne.jp/Nilfs/20080908/1220877702
http://others2.blog.so-net.ne.jp/2010-09-24
http://dev.activebasic.com/egtra/2011/12/29/460/
あたりを見ていると夢がひろがりんぐ。
ですが何故こんなに影が薄いんでしょうか・・・?もしかして処理系に丸投げし過ぎだから?
-
面白いコードだったので軽くメモ
コピー元:http://stackoverflow.com/questions/1391746/how-to-easily-indent-output-to-ofstream
#include
#include
#include
#include
#include
static int level;
std::ostream& indent(std::ostream& o)
{
level++;
return o;
}
std::ostream& outdent(std::ostream& o)
{
level--;
return o;
}
class IndentFacet: public std::codecvt
{
public:
explicit IndentFacet(size_t ref = 0): std::codecvt(ref) {}
typedef std::codecvt_base::result result;
typedef std::codecvt parent;
typedef parent::intern_type intern_type;
typedef parent::extern_type extern_type;
typedef parent::state_type state_type;
int& state(state_type& s) const {return *reinterpret_cast(&s);}
protected:
virtual result do_out(state_type& tabNeeded,
const intern_type* rStart, const intern_type* rEnd, const intern_type*& rNewStart,
extern_type* wStart, extern_type* wEnd, extern_type*& wNewStart) const
{
result res = std::codecvt_base::noconv;
for(;(rStart
{
// 0 indicates that the last character seen was a newline.
// thus we will print a tab before it. Ignore it the next
// character is also a newline
if ((state(tabNeeded) == 0) && (*rStart != '\n'))
{
res = std::codecvt_base::ok;
state(tabNeeded) = 1;
*wStart = '0' + level;
++wStart;
if (wStart == wEnd)
{
res = std::codecvt_base::partial;
break;
}
}
// Copy the next character.
*wStart = *rStart;
// If the character copied was a '\n' mark that state
if (*rStart == '\n')
{
state(tabNeeded) = 0;
}
}
if (rStart != rEnd)
{
res = std::codecvt_base::partial;
}
rNewStart = rStart;
wNewStart = wStart;
return res;
}
// Override so the do_out() virtual function is called.
virtual bool do_always_noconv() const throw()
{
return false; // Sometime we add extra tabs
}
};
int main()
{
std::ios::sync_with_stdio(false);
std::locale indentLocale(std::locale::classic(), new IndentFacet());
/* Imbue std::cout before it is used */
std::cout.imbue(indentLocale);
std::cout <
}
-
こんなコードって通らないんですね。知りませんでした。
#include
template
void f(T t = 0)
{
std::cout <
}
int main()
{
f();
return 0;
}
デフォルト引数からテンプレート引数拾ってくれてもいい気がするんですけどねー。C++が人に優しくないのは仕方がない。C++0xなら関数テンプレートでもデフォルトテンプレート引数を使えば通るそうですが怖いのでおとなしくオーバーロードしておきます。
template
void f(T t = 0)
{
std::cout <
}
-
CygwinでRubyを入れてみる
パッケージマネージャには1.8しかないので
普通にRuby1.9.3を落としてきてコンパイルする。earthquake使いたいだけなのでdocはいらない。
$ ./configure --disable-install-doc --disable-install-rdoc
$ make && make install
しようとするとmakeあたりでextension(cursesとかreadlineとかpsychとか)が入らないって言われるので各ライブラリをインストール。
cursesとかCygwinのパッケージマネージャで入るものはlib*-develあたりを適当に。
psychはlibyamlというものを使ってるらしく、パッケージマネージャに無いので手動でインストール、
しても通らない。
原因が単に/usr/local辺りにパスが通ってないだけっぽいのでパスを追加するか
$ # rm -r /usr/local
$ ln -s /usr /usr/local
追記:Cygwinのアップデート時に書きなおされるのでfstabにbindあたりで設定したほうがよさげ
みたいにlocalそのものをリンク化する。副作用なんて知りません。
もともとlocalにあるものはパスは変わらないので適当にマージでOK。多分。
prefixがデフォルトで/usr/localだからだと思うけどパーミッションもへったくれもないのでCygwinに関してはいちいちprefix変えるよりもlocalをリンクにしてしまうほうがいいと思う。/usr/binも/binへのリンクだし。
参考:http://d.hatena.ne.jp/basyura/20110721/p1
-
つぶやき
最近というか前から思っていることなのですが、どうやら私はC++を書く時、newを割りと極端に避けているような気がします。というか、明らかに避けてました。vectorの値渡しとか未だに許せません。
そこまで回数を呼ばなければ影響がないのはわかっているのですが・・・。
ヒープを使ってシンプルに書くか、多少強引にしてヒープ使用を最小限に抑えるか・・・。
-
最近Cygwin+Vimで作業することが多いのですが、ずっと作業してるとだんだんフォントが飽きてくるので適当に変えてみたりしてます。
最初はCoding Font Tobiでしたがその後Incosolata、更にOsaka、VL Gothic、Bitstream Vera Sans Monoときて最終的にInconsolataになりました。
端末として最近Cygwinについたminttyを使ってるのですが、このminttyは結構独自の描画方法で描いてるようで一部太字の描画がおかしかったりするのですが、フォントスムージングについてOn/Off/Partialが選べるのは中々便利でした。普段はOSのフォントスムージング切ってるのですがVLGothic等は切ってしまうと非常に残念な感じになるのでそういう点では結構助かってます。
個人的に文字は1px離れていたほうが好きなのですが、スムージングをかけるとどうしてもくっついてしまうような気がします。そのへんも含めてフォントを選ばないといけないから面倒。ううむ。
-
このページって見てる人いるんですかね。
-
私にとってプログラミングって何かを考えてた。
--- 以下ゴミのような駄文 ---
今、私にとってのプログラミングは楽しい趣味です。
何が楽しいかは曖昧なところもあると思いますが、やはりコンピューターが自分の思った通りに動いてくれる点ですね。そんな単純な理由です。ですが心配なのはこの感覚がなくなったとき、自分にとってのプログラミングのあり方がどう変わるかという点。趣味である以上、楽しくなくなるようなら続ける必要はないと思ってはいますが。先は分からないものです。
趣味が必ずしも仕事に繋がるわけではないというのはTwitterを始め良く知られている事実だと思います。が、趣味で培った技術の一部は流用出来るはずと信じています。というか、私はもうそういう職に就くしか無いような立場にいるのでどうしようもないですし、かといって全く別の職につくという気力も勇気もヘタレな私には無いです。
-
あんなこと言ってましたが
普通にgdb便利ですねgdb
-
ある夢をみたのです。
それはある人が亡くなるのですが、
不思議にその人はいつも通りに生活をしているという内容。
この夢の途中からなぜか涙が
自分でもよく分からないけど、泣くようなことでは無いのに、本当に何故か涙が
うーん・・・
-
スタックトレース:
addr2line -e bin `cat bin.exe.stackdump | grep -e \^.\[0-9A-F\] | sed -e "s/\ \+/\ /g" | cut -d ' ' -f 2` | grep -e \[\^\(??:0\)\]
ダンプを有効化(Winパス):
export error_start='c:\cygwin\bin\dumper.exe'
gdb使いたくないでござる
-
Cygwinでgccのエラーをheadで削って拾おうとして、
$ gcc main.c -o bin 2>&1 | head -
みたいに使うとheadがひと通り出力した後、入力待ち状態になって、やむなく^Cで終了するとcc1plusが死なずに残ってハマるのでメモ。ちなみにkillでは殺せない?
$ echo "`gcc main.c -o bin2>&1` ^D" | head -
みたいにEOF付けて送ると正常に終わってくれる。
あとechoの""を忘れると改行が消える。
勢いでメモったけどcc1plusがいつまでも生き残るのはCygwinの問題なのかそれともそういう仕様なのか、よく分かりません。
-
kill `ps | grep some_process | sed -e "s/\ \+/\ /g" | cut -d ' ' -f 2`
some_processを全てkillする時とか
-
C++触りましたC++。あとVimも。
ここのところもっぱらVSでC#ばかり弄ってた分、なんか色々アレでした。
どれぐらい久しぶりかというとC++でSTLの使い方が曖昧になるくらいです。vectorのpush_backとか割りと忘れてました。これは不味い。
-
Gentoo楽しす。
Gentoo Linuxいいですね。
当初はTwitterで度々目にしていて存在だけは知っていました。
が、実際に使ってみると知名度(?)に負けずかなり強力でした。
CUIオンリーでのインストールはArch Linux以来で楽しかったです。
UbuntuみたいなGUIインストーラーでは味わえない感覚ですね。Ubuntuが霞んで見える・・・。
今はテストでVMwareに入れているのですが、色々実験してみて、全体的に十分使えそうならUSBに入れて実用化してみようと思います。
Gentooの特徴なのですが、パッケージは全てコンパイルしてからインストールするのでやっぱり時間がかかってしまいますね。長所であり短所でもあると思います。ほぼ白の状態からgnome-lightをemergeしようとしたら260パッケージ必要だそうで。何時間かかるんだろう・・・。
-
泣きメロはいいものだ。
-
// 無難過ぎ笑えない
#include
#include
int main(int args, char* argv[])
{
int i = 1, max;
if(args == 1)
max = 100;
else
max = atoi(argv[1]);
while(i <= max)
{
int isStr = 0;
if(i % 3 == 0) printf("Fizz"), isStr = 1;
if(i % 5 == 0) printf("Buzz"), isStr = 1;
if(!isStr) printf("%d", i);
puts("");
i++;
}
return 0;
}
-
本気で、人に絡めない病を治したいです。
とはいうものの、何故自分が人に絡めないのか、ある程度予想はついてるんですけれども。。
1つは、やっぱり鬱陶しがらるのではないかということ。このリプライを送ることで相手に不快感を与えるのではないではないかという不安。それによって嫌われるのではないかという恐怖。これは大きいです。何度かそれに近いことをやってしまっているので特に。
2つはその人の中での自分の位置。その人は多くの人ととリプライを飛ばし合っていますが、その中に自分が紛れ込んでもいいのだろうかと、不安感を覚えます。迂闊にリプライをして、なんだこいつみたいな感じになってしまわないだろうかと。
これに対する答えが、何もしない。絡まないという現状です。
絡まない代わりに嫌われはしない。
そしてこれが更に悪化して、ツイートをしているのは壁の向こう側なんだと、自分とは繋がりは無いようなものなんだ、自分がリプライするの場違いなんだと。Twitterのうち、自分はストリームを通して遠くから眺めているのであってその人達の会話を近くで聞いているわけではないという風に思えてきて。
今気づきましたがこれは2chのROMにかなり近い気がします。。
もともとコミュニティ障害だとかそのへんはそういう体質として繋がっているものなのでしょうか。
重度の寂しがり屋、というわけではないと自分では思っているのですが、Twitterで楽しく会話されてる方たちを見ていると、やっぱり寂しくなったりしますし自分も会話にまざりたいと思ったりもするわけです。
-
色々あってC#を使ってるのですが、ヤバイくらい書きやすくて困ります。
かなり前に同じ事を書いた気がしますが。
もうWindowsAPIとは何だったのかというレベルで楽です。
ある意味.Net Framework見直しました。
ただ、APIの変更があったりするせいか、一歩踏み込んだドキュメントが少ないです。
特に日本語は少ない印象を受けます。( "C#" 自体が検索しにくいのもあるかもしれません。。。)
私が最初に触った言語はVB.NETなのですが、当時は全くもって手探り状態でした。
オブジェクトブラウザの存在さえ知らず、クラスの概念が理解できず、ろくにループが使えないという惨状。
そんな中、本とネットでコピペコーディングしていたわけです。当然、例の無いコードは書けないわけです。これはひどい。
で、C、C++、java、etc. と、それなりに他の言語を学んで今日に至るわけですが、やはり感触が違います。やりたいことは大体出来ますし、コンパイルエラーはささっと直せます。それこそ、全くの別言語と化してます。
初心者向けに作られた一面も持つ(と思っている).Netがある程度言語を学ぶだけで別言語と化すのには若干の皮肉を感じたり。
(当時の私の頭が残念だったという可能性の方が高いですけど。)
余談ですが、作業してる時にたまたまPlaystation SuiteがC#対応の話題が流れてきたのには少し笑いました。