掲示板お問い合わせランダムジャンプ



この広告は30日以上更新がないブログに表示されております。 新しい記事を書くことで広告を消すことができます。

別のblogとか

2016年08月01日
git push のこと
最近は Arduino 用のプロジェクトでも Git を使うようになったが、ブランチを切り替えた時に master を push しようとして引数なしの git push しようとしたら出来なかった。そういえばデフォルトが変わったんだっけ。

一般に push.defaultsimple にするのが誤操作が防げるので良いとされる。これは、「カレントブランチと同名のブランチがリモートにあるときだけ push する」である。従来の挙動は、「ローカルと同名のブランチがリモートにあるなら一通り全部 push する」であった。私はこちらで慣れていた。従来の挙動に戻すには次のコマンドを入力する。
$ git config --global push.default matching


なぜ私が新しいデフォルトの挙動を気に入らないのかというと、この「一通り全部 push する」という操作を意図して行うことが多いからである。別のブランチで作業中に master を push するというような作業を行ったりする。
そもそも私は作業用ブランチをリモートに送らない(リモートを設定しない)から問題にならないのである。逆に言えば、作業用ブランチをリモートに送るから問題になるのである。ローカルと同名のブランチがリモートになければ、何もしない。新たにリモートにブランチを作りたいときは、明示的に
$ git push -u origin foo
のように指定する。

要は慣れの問題なのだが私のような使い方をする人は稀と思われる。どうも一般ユーザーと比べて私の思考がコンピューター寄りで、人間よりもむしろコンピュータとの親和性が高いことに起因するのかもしれない。思い当たる節としては、C言語で最初につまづく所がポインタであると言われるところ、私はポインタでつまづいた覚えがない。本当に関係あるかは不明だが……。
[ 投稿者:芙蓉美晴 (MihailJP) at 03:12 | コーディング | コメント(0) | トラックバック(0) ]

2013年11月05日
LinuxでのNVIDIA GPU温度調節
GPU温度がどうも最近上がりやすいようなので、私のWindows環境では設定でファンの回転数が上がりやすくしてあります(静音性は二の次です)。しかし、Linuxではそういう設定項目が見当たらないようです。GPUのダウンクロックも試してみましたがそちらは効果が薄いみたいなので……
調べてみたら、 nvidia-settings でGPU温度の取得とファンの速度設定ができるようなので、これを使って bash のスクリプトを書いてみました。ファンの捜査に使うコマンドは次のとおりです。
  • nvidia-settings -q gpucoretmp でGPUの温度がわかる。但しこれをスクリプト中で利用するには sed などで出力を加工する必要がある。
  • nvidia-settings -a GPUFanControlState=1 でファンの速度が手動設定になる。
  • nvidia-settings -a GPUFanControlState=0 でファンの速度が自動設定に戻る。
  • 手動設定になっている状態で nvidia-settings -a [fan:0]/GPUCurrentFanSpeed=100 でファンがフルスロットルになる。数値は35〜100の範囲で指定可能。


続きを読む ...
 
[ 投稿者:芙蓉美晴 (MihailJP) at 22:26 | コーディング | コメント(0) | トラックバック(0) ]

2013年08月31日
MiHaJong の中国麻雀バージョンを作っています
最近は久々に MiHaJong のコードに手を入れたりしています。
しかし、昔に書いたコードって自分のコードとは思えないですよね……勘を取り戻すのに苦労しました。

それと、実は前々からやりたいと思っていた、 MiHaJong のコードから派生した中国ルール版 MiHaJong を今作っています。
今のところ Google Drive の MiHaJong 用フォルダーでパッチの形で配布しています。MiHaJong のインストールフォルダーに追加する形になりますのでご注意ください。
[ 投稿者:芙蓉美晴 (MihailJP) at 23:59 | コーディング | コメント(0) | トラックバック(0) ]

2013年06月09日
tak(20, 10, 0)関数ベンチマーク
tak(20, 10, 0) ベンチマーク結果
Tak 関数という再帰関数があって、ベンチマークによく使われるのだそうです。そこで、私のLinux環境で試してみました。結果はグラフにまとめてあります(なお、対数目盛での表示です)。
動作環境は OpenSUSE 12.3 x64 @ Core i5 750 で、bash の time コマンドの実時間の値を取得しています。

Haskellの結果が意外と遅いですが、tarai 関数が遅延評価で速くなるのに対し tak 関数はそうではないという特徴によるものです。GHC, interpreted とあるのは runghc で実行したものですが、1分以上かかるという「らしからぬ」結果。runhugs にいたっては2分以上でした。

Ruby 2.0 がスクリプト言語にしては意外に速く、最初は何かの間違いかと思いました。あとで調べたら引数の入力ミスを見つけたのですが、それとは関係なしに速かったようです。

スクリプト言語の中でも軽い部類に属する Lua ですが、標準実装では Ruby 1.9 とどっこいどっこいの約10秒、でも LuaJIT を使うと1秒弱と、もうコンパイラ言語に迫る勢いになっています。

Java が遅いと言われていたのも今は昔、最近のJavaVMは速いみたいで、Tak.class を java Tak で起動するともはや C 言語に引けをとらない速さで動いてしまいます。逆に gcj でネイティブコンパイルすると遅くなるという本末転倒な結果に。

Perl では約1分かかっていますが、こいつに限ってはメモリをバカ食いするんです。tarai(14, 7, 0) を計算させたらスワップアウトの嵐の果てにインタプリタが落ちてしまいました。

Bash でも tak(20, 10, 0) を計算するスクリプトを書いてみましたが、20分以上かかるというもはや冗談みたいなレベル。

Go言語は処理系の使い方がわからずに苦労しました……以前使ったことがあるのに忘れてます。

やろうと思ったけど断念した処理系もあります。
Open Watcom Fortran コンパイラも計測しようとしましたが、名前に F77 と付いていて、再帰関数が書けなさそう(再帰関数はF90でサポートされた)なので断念。
GNU Common Lisp は処理系のインストール以前に configure スクリプトがフリーズしてしまうため断念。
CMU Common Lisp は非常識な構造(解凍すると単一のディレクトリでないもの出力される)の Tarball で配布されていた上にインストールの方法がわからず断念。
F95 はインストールの方法がわからず断念。ぶっちゃけると ./configure && make && sudo make install でインストール出来ないのは苦手です。
Clojureもインストールの仕方がわかりませんでした。
GDC はビルド途中に Linux をインストールしているパーティションが満杯になってしまったため断念。GCCGO や GNU Pascal のインストールも断念しました。
[ 投稿者:芙蓉美晴 (MihailJP) at 00:20 | コーディング | コメント(0) | トラックバック(0) ]

2013年03月13日
MinGW/Autotools 対応化でハマったこと
風呂あがりにお茶飲んだら盛大に噎せた……
どうも、ミハイルです。

今 Visual C++ 2010 Express で作っている自分のプロジェクトですが、将来的なLinux移植を見越して MinGW の Autotools でもコンパイルできるように調整しているのですが、単にMakefile.amやconfigure.acを書くだけではだめで、他の部分の修正も必要になります。
例えば、MinGWでAutotoolsを使うからには GNU C++ コンパイラの使用が前提となりますが、Visual C++ で何気なく使っていてコンパイルできたものが実はMicrosoft拡張で、GNUコンパイラではエラーになる、というものがありました。
さらに、「ライブラリのファイル名はlibで始めないといけない」というLinux文化圏あたりから持ち込まれたらしいルールがあるらしく、ライブラリの改名を余儀なくされました。
そういう、修正が必要だった箇所を書き残しておきます。


続きを読む ...
 
[ 投稿者:芙蓉美晴 (MihailJP) at 03:53 | コーディング | コメント(0) | トラックバック(0) ]

2013年01月13日
Eclipseを入れてみる
以前インストールしてすぐ消しちゃったんですが、ふとしたことからまたEclipseをインストールしてみようという気になりました。いや、Visual Studio ShellはExpress Editionと共存できないらしいので……
いつ使うのかは自分にもわかりません(えっ

Pleiadesの3.7 Indigoの Ultimateをインストールしました。なんで4.2(Juno)じゃないのかというと一部のプラグイン(ScalaとかD言語のやつ)が使えないからです。

今のところ入っているプラグインは……ほかにもいくつか。なお、別途処理系が必要です。

この他にPrologとかCOBOLとか(!)の開発環境プラグインがあるんですね。
Linuxにも入れようかなこれ……とするとGitとの統合プラグインも入れたほうが……とか色々考えてたりしますが私はC++erです。
[ 投稿者:芙蓉美晴 (MihailJP) at 00:57 | コーディング | コメント(0) | トラックバック(0) ]

2012年12月26日
中二病なプログラミング言語ってあるのかなぁ
前の記事に関連して「中二病Lisp」ってのとかできないかなとか変なこと思ってしまった私は一体どうすればいいのでしょうか。
まぁ私はろくにLisp使ったことないんだがな!

例えば、
「冥王(ハデス)との契約のもと我命ず。汝の左手を掲げ示せ。我が真眼に、汝の知恵を……foo-bar!」
などという文章が
(car foo-bar)
と等価だというなら、それは痛々しくてソースコードが黒歴史になってしまうだろう。ちなみに「汝の右手を〜」ならcdrに相当する。

しかしたったこれだけの厨二台詞を考えるだけでも暫く時間を使うのは……
[ 投稿者:芙蓉美晴 (MihailJP) at 23:55 | コーディング | コメント(0) | トラックバック(0) ]

中二病プログラマってなんだろうな
中二病プログラマってどんなのか……
コメントとか識別子が痛々しいことになってたりするのだろうか、と妄想してみる。

その結果たるツイートがこれ↓



せっかくなので、ほかのヘッダについても詠唱っぽいのを考えてみた。
但し、こういうコメントを書き残すと後で見た時あまりにも痛々しくソースコードが黒歴史になってしまうのでやめたほうがいいかと。

我、大いなる契約のもと命ず。
《普遍たる大書架(シュタンダルトビブリオテーク)》よ……

(assert.h) 我に《確信(ユーバーツォイグング)》の力を与えよ!
(math.h) 我に《演算(ベレヒヌング)》の力を与えよ!
(stdio.h) 我に《可視(ジヒトヴァイテ)》の力を与えよ!
(stdlib.h) 我に汝の知恵を与えよ!
(string.h) 我に《言霊(ヴォルトガイスト)》の力を与えよ!
(time.h) 我に《時流(ツァイトフルス)》の力を与えよ!

……ここまで書いて力尽きた。
本物の中二病患者はこういう台詞をスラスラと思いつくんだろうなぁ。
[ 投稿者:芙蓉美晴 (MihailJP) at 17:42 | コーディング | コメント(0) | トラックバック(0) ]

2012年11月13日
コーディングというよりエディタの話
パンチカード使ってたような古いコンピュータで使われていた言語には、昔ながらの固定形式(何桁目からコードを書くか決まっている)と、今風な自由形式があります。私の知る限りこれはFortranとCOBOLに当てはまります。
一方、プログラマに好まれるような高機能なエディタにはシンタックスハイライト機能(予約語やリテラル文字列などを色分けして表示してくれる機能)やオートインデント機能(ブロックを始める記号やキーワードを書いて改行すると自動的に字下げしてくれる機能)があり、コードが書きやすくなります。
ここで、FortranやCOBOLのように固定形式と自由形式の2つがある言語では、どちらの形式でシンタックスハイライトを行うかという問題が発生します。ユーザーが切り替えることが出来れば実用的な問題はなくなるのですが。

VimのCOBOLモードが残念過ぎる
Vimでは、FortranとCOBOLの両方とも固定形式がデフォルトになっています。但しFortranの場合は、.vimrcにlet fortran_free_source=1と書いてやればいいらしいです……ということですが、Vimのマニュアルによれば「固定形式か自由形式かを自動認識するが、固定形式が優先される」というのが正しいようです。それ故、新規のFortranファイルを作成すると固定形式とみなされます。let fortran_free_source=1と書くと、自由形式に固定されます。古いFortranのコードを扱わないならばこれでよいでしょう。
COBOLの場合は実は自由形式がデフォルトらしいとマニュアルに書かれているのですが、対応状況が残念な事になっています(画像参照)。

Notepad++の場合、COBOLは自由形式に対応しているようですが、残念なことにFORTRANが固定形式にしか対応していません。但し、「ユーザー定義」扱いとして自由形式のFortranが使える設定ファイルが公開されています。他にはGo言語、F#、Erlangなんかもユーザー定義用のファイルが公開されているようです。

Kateの場合、Fortranは自由形式に対応しています。しかし、COBOLには対応していません(シンタックスハイライトができないだけであって、KateでCOBOLのコードを書くのはもちろんできます)。XMLを追加すれば可能なようですが、あいにくCOBOL用の設定ファイルは作られていないようです。

最後に、全く関係ないですが言語比較メモ(英語です)
[ 投稿者:芙蓉美晴 (MihailJP) at 05:15 | コーディング | コメント(0) | トラックバック(0) ]

2012年10月22日
うにゅー……
ちょっと精神的に疲れていました。
というのも、C++でソケット(TCPソケットの自作ラッパークラス)を使うプログラムを組んでいたのですがなかなか通信が同期しなくて(ストリームのバイト位置に依存するような低レベルな独自プロトコルを使っていました)、なかなかバグが直らないものだから精神が滅入ってしまったりしたのです。
わかった原因としては「ユーザーの識別番号とソケットの識別番号を混同していた」それと「ユーザーの番号とソケットの識別番号の対応をシャッフルした時に正しくシャッフルされていなかった」でした。
テンプレートで配列のボックス化みたいなことをしてたんですが、普通に代入しても正しくコピーが行われなかったようです。コピーコンストラクタを作ればよさそうなものですが、それをするとPODじゃなくなるのが辛いところ……DLLだとPODじゃないオブジェクトを渡せないっぽいので困るのです。

実は似たような問題を他の言語でも経験していまして……例えばLuaのテーブル。
例えばfooというテーブルがあるとき bar = foo としてしまうと foo と bar の実態が共有されてしまうのです。まあLua自体が「軽いこと」を重視した設計になっていて参照の複製のほうが速いのでそれはそれでいいのですが、それで困るときは自分でテーブルをコピーする関数を作る必要があります。プロキシテーブルの場合は工夫が必要なんですがね……
多分こんな感じ


(10/23 17:40頃追記) 代入演算子をオーバーロードすれば楽にできるっぽい……
(10/23 17:55頃追記) ……けど代入演算子オーバーロードするとPODじゃなくなるからなぁ、結局呼び出し側でループかけるか、オーバーロードに頼らない別のメソッド定義するか……
[ 投稿者:芙蓉美晴 (MihailJP) at 23:48 | コーディング | コメント(0) | トラックバック(0) ]