2015-4-29[水] vs12 で openFramework をちょっと弄る※追記:間抜けてました。以下は間違い、単にvs12指定してもvs11がinstallしてある環境だとそれが使われてただけの模様(新しいマシンに移行してvs12インストールしなかったらダメだった)
久しぶりに openFramework (のexample)をコンパイルしてみた。
一年程前にvc12で試した時(ver0.8.1|2前後?)は poco 等のc++系ライブラリの .lib のリンクでVCバージョンチェックに引っかかったり諸々エラー出て断念したのだけど(もちろんvc11はok) ...
Drag&Drop example
oF では char文字列は概ね UTF8 扱いになっている。oFが利用しているライブラリの poco とか glfw とかが UTF8 で扱っいて それらに任せてる状態のようだけど。 正攻法で直すとするとファイル・アクセスはpoco系にまかせてオンメモリ状態のファイルから画像イメージを取り出す形にすればよいのだろうけど... freeImage には wchar_t*ファイル名のAPIも用意されてるので oF 側を修正するのがお手軽な感じ. ofImage.cpp の template<typename PixelType> static bool loadImage 関数中の if(fif == FIF_UNKNOWN) { // or guess via filename fif = FreeImage_GetFIFFromFilename(fileName.c_str()); } if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { bmp = FreeImage_Load(fif, fileName.c_str(), 0); if (bmp != NULL){ bLoaded = true; } } を #ifdef TARGET_WIN32 extern std::wstring convertNarrowToWide( const std::string& as ); if(fif == FIF_UNKNOWN) { // or guess via filename fif = FreeImage_GetFIFFromFilenameU(convertNarrowToWide(fileName).c_str()); } if((fif != FIF_UNKNOWN) && FreeImage_FIFSupportsReading(fif)) { bmp = FreeImage_LoadU(fif, convertNarrowToWide(fileName).c_str(), 0); if (bmp != NULL){ bLoaded = true; } } #else 略(前記元ソース) #endif
な感じに修正.
それと、winでのドラッグ&ドロップについては もう一つ問題があって、ドラッグされたファイルのパスのドライブレターが省かれてしまい同一ドライブ以外からのドラッグだとファイルが読めない状態になっている。 これは ofAppGLFWWindow.cpp の 関数 ofAppGLFWWindow::drop_cb の for(int i=0; i<(int)drag.files.size(); i++){ drag.files[i] = Poco::URI(dropString[i]).getPath(); } の部分で Poco::URI(dropString[i]).getPath() が ドライブレターを取っ払ってしまうためで、とりあえず アルファベット1文字+':'で始まってたらローカルPC中のパスだろうとして for(int i=0; i<(int)drag.files.size(); i++){ #ifdef TARGET_WIN32 if (isalpha(dropString[i][0]) && dropString[i][1] == ':') { drag.files[i] = dropString[i]; continue; } #endif drag.files[i] = Poco::URI(dropString[i]).getPath(); } な感じに修正することで 対処可能。
UTF-8 表示
char*はUTF-8だけれど、残念ながら表示については マルチバイト系全滅かもしれない。 元々 oF を vs12 で使いたかったのは(1年前 vs12購入した理由は) #pragma execution_character_set("utf-8") で幸せになれそうな気がしたためだけど、画面表示がこれじゃあ... よく探してないので 別(addonとか)に あるかもしれないけれど。 お仕事でターゲット向けに作ってた文字列表示処理を思えば作れないものでもないだろうけれど。 正直 今は oF 以外に興味行ってるので、このへんで挫折です。
2015-4-20[月] KEYEVENTF_EXTENDEDKEY
win で fltk のサンプルを動かしてるとキー入力全般で、拙作のキーバインディングソフトDiaKbdMouse経由でのカーソル移動がテンキー数字に化けてしまった。調べてみると fl_win32.cxx で WK_KEYUP/DOWN処理でlParamのbit24=拡張キーをみて、拡張キーじゃなかったら まさにそのようなキーが押されたようにする処理になっている。状況的に DiaKbdMouse側で設定足りてないせいだろうで ググれば まさにな頁発見。 しかし fltk でこんな処理をしてるってことはIBM拡張キーボードとは非互換かつ多少なりとも普及したテンキー付キーボードがあった?…ではなく、拡張キー扱いでない時の fltk でのキーコードは、単に (virtualでない) bios のキーコードと同じようなので、本来はそういう扱いをするものなんですかね。いままで KEYEVENTF_EXTENDEDKEY 付けてなくても困ってなかったから WK_KEYUP/DOWN処理で律儀にlParamのbit24見てるソフトは滅多にないと思うけれど... fltkなソフトを今まで使ってなかったとも言えるか。
2015-2-7[土] devian7 軽量インストール (続 vaio c1 に linux)
前回以降も、たまに ちびちび弄ってたりする vaio c1。
debian7 を入れてみてたのでベストにはほど遠いけれど作業メモ。 インストール前回のgrub4dosインストール済のC1環境なので、grub4dos の iso ファイル起動を用いて hdd より netinst (debian-7.7.0-i386-netinst.iso) をしてみた。と、いっても例によってCDドライブは見失うので、isoファイルを展開した usb メモリを別途用意&装着。grub4dosのmenu.lst に 以下を追加。
title netinst debian7 find --set-root /debian-7.7.0-i386-netinst.iso map /debian-7.7.0-i386-netinst.iso (0xff) || map --mem /debian-7.7.0-i386-netinst.iso map --hook chainloader (0xff) rootnoverify (0xff)
isoファイル起動にしたのは net経由のためPCカードスロットにCDでなく(無線)LANアダプタを繋げるためだったのだけど、インストール時に認識できず(というかその後もうまく認識させられず)、結局 電源ありのUSBハブを繋げてそこに USB-LAN とUSBメモリを装着してインストールした。
grub4dos のmenu.lst に起動エントリを用意
title Debian 7 gui root (hd0,7) kernel /boot/vmlinuz-3.2.0-4-486 root/dev/sda8 ro acpi=off quiet vga=786 initrd /boot/initrd.img-3.2.0-4-486 また 通常(runlevel 2)のGUI起動以外に テキスト(CUI)のみの起動もしたいので
title Debian 7 text root (hd0,7) kernel /boot/vmlinuz-3.2.0-4-486 3 root/dev/sda8 ro acpi=off quiet vga=786 initrd /boot/initrd.img-3.2.0-4-486 のように runlevel 3 で用意. コンソール環境にてまずはコンソール環境で作業。su で root になって、/etc/sudoers に自分(ユーザ名)の設定を追加(viやemacsの使えない己は nano で)
#ユーザー名 (ALL:ALL) ALL ユーザー名 (ALL)NOPASSWD: ALL 当初は上のコメント側の設定だったが、gui側で shutdown/reboot の設定(を楽)する都合パスワード無にした。多少心地悪いが 己の vaio c1 の使用具合や puppy等LiveCD系をインストールした場合を思えば許容範囲だろうとしとく。
sudo apt-get remove exim4 exim4-base exim4-config sudo apt-get remove bluez bluetooth (その他も何か削除したような気はするけど忘却)
sudo apt-get install ne utf8で多少なりとも win/dos系な操作の代物を使いたく(^Zがundoじゃなくsuspendで泣くけど... fgは覚えた)。
ファイラ fdclone(fd) もインストール。己には必須。すぐさま使いたい場合は apt-get install fdclone
なんだけど昔から apt-get で入れた場合どうも全角表示が化けてしまうようで(utf8未対応でコンパイルされてる?)、ちゃんと使いたい場合はソースからインストール。 ※ sudo ってディストリ(設定)によって sudo -s したときのユーザが 自分自身のままだったり rootに変わったりするよう。ubuntu系?だと自分自身のままのようで、それに慣れてると root で ~ ディレクトリも変わってるのを忘れて作業してミスしたり、fdclone等 で /home/ユーザー名/.各種個人config が読み込まれず難儀したり... ということでfdcloneは共通側(usr/local/etc/fd2rc)に個人設定を反映してしのいだ。(sudoをどうにかできればよいのだろうけど よくわからず)
X無でも 日本語表示 したいので fbterm とフォント も install。 sudo apt-get install fbterm sudo apt-get install unifont 実際には unifont だけでなく fonts-takao や fonts-umeplus 等他のフォントも入れているが 指定に使うフォント名調べるの面倒臭がってとりあえず unifont。で、
sudo fbterm -n unifont と、すれば起動。1度実行すると ~/.fbtermrc が作られているので、その中のフォント関係を font-names=unifont font-size=16
に修正(sizeは好みでだけど unifontではこのサイズがスッキリみえるかなと)。 sudo chmod u+s /usr/bin/fbterm してユーザーでも使えるように変更。この環境は すでにセキュリティ的なことは緩いので、お手軽設定でヨシとしとく。
キーバインド変更ソフトの"窓の憂鬱linux版"(mayu)もインストール。(これでダイアモンドカーソル使えるようにしておかないとnote系キーボードをようさわれん奴なので) ただ今回の環境では窓の憂鬱 常駐(実行)状態で (あとでインストールする)Xを 起動すると、jpキーボード設定なのに usキーボード配置に化けるということが起きた。 試してみると scim,uim,ibus だと駄目だったが fcitx だと設定次第でちゃんとjpキーボード配置になったので fcitx を採用することにした。(fcitxのインストールは後述) 設定次第とは /etc/default/keyboard のキーボード設定で、該当部分を XKBMODEL="jp106" XKBLAYOUT="jp" XKBVARIANT="OADG109A" のようにすることで対応。XKBVARIANT="OADG109A"がミソのようで、こうすることでjpキーボード(OADG109A系)扱いになった。(逆に XKBMODEL は別のでも影響なさげ) ※当然 窓の憂鬱 か X どちらか起動しなけりゃ scim,uim,ibus でも問題無く。ググってみても他の窓の憂鬱使いで同様な問題起きてそうな人は見当たらないので 環境(C1)依存か己の何かの設定ミスかもしれず。
あと、非X環境での日本語入力は諦めた。 ※実は、X起動後に 窓の憂鬱を起動すれば、usキーボード化けは起きないので そうすれば uim (やscim,ibus)を用いることはできるのだけど... X起動直後に自動で適切にmayu有効にする方法わからず断念 (runlevel 2,3でmayu起動タイミングを代え、gui時は .profile で sudo /etc/init.d/mayu start すればそれっぽくできたのだけど、WMのメニューから login し直した後に結局usキーボード化けしたりと 細々面倒で)。 ※配布サイト見に行こうとしたら消失してる?模様(去年末はみれてたと思うのだけど) icewmGUIも使いたいので、まずは x をインストール。 sudo apt-get install xorg 次に window manager として icewm をインストール。 sudo apt-get install icewm startx で起動、ログアウトでコンソールに戻ってくる。
jwm も入れてみたけれど 好みで今のところicewm.
(jwm も設定いじればできる類かもしれないが未調査) 個人的には4つめの 左上アイコン・ダブルクリックでのcloseがツボだった。これ、win3.1時代(&以前)の窓閉方法なんだが、己は未だに使ってしまうことがあるため地味にありがたかったりする。MS って戦略的に大きな変更をたまにするけれど ものによっては"まだ維持してたの?!"とあきれるような細かい互換を維持し続けてたりするので... その類を他で実現されるとね。
icewm の環境設定として、/usr/share/icewm/ (ものによっては/etc/X11/icewm) より ~/.icewm へ preferences (や menu, toolbar 等)をコピー。 ShutdownCommand="sudo poweroff" RebootCommand="sudo reboot"
予め sudoers でパスワード無しに設定しくことで、これですます(諦めた)。
※ 色とかフォントは、theme 側の設定が使われるので preferences 側のを弄る意味無し。
sudo apt-get install rox sudo apt-get install leafpad sudo apt-get install iceweasel
できればroxよりpcmanfmを使いたいところだけれどやはり重く。 エディタは素早い起動で高機能のものがあればだけど未調査。
webブラウザは firefox 常用なので iceweasel を一応入れたが激重。
sudo apt-get install fcitx-mozc
anthy と mozc では変換効率とリソース負荷を天秤にかけて mozc を選択。 ※ あと己はmayuでcapslock/EISU キーでダイアモンドカーソル出来るようにしているため、mozcの設定で EISU キーへの機能割り当ては全部削除したり、ことえりぽく muhenkanとhennkanでime off/onさせるように書き換えたりしてる。がこの辺は省略。(忘れそうなので Fcitx Config → Global Config → Hotkey → Activate input method に HENKANMODE, inactivate input Method に MUHENKAN を設定だけメモ)
slim通常は起動時からguiを使うことにしたいので、 ログイン(desktop) manager として slim をインストール。 sudo apt-get install slim /etc/slim.conf を弄り好みで設定を変更。 default_user ユーザー名 ユーザー1人しかいないのだしデフォルトユーザー名を設定しておく。
sessions default,icewm sessions には実際にインストールしている wm だけに変更(選択肢文字列なだけで、選択しない限り関係ないけど、選択できてしまうのが面倒、と) wm 切り替えることが早々無く自宅でしか使わないなら いっそ auto_login yes にして ユーザー名&password 入力無く起動出来るようにしとくのも手。
あと、ログイン画面の背景画を変えたい場合は current_theme my-theme
な感じで debian-joy の代わりに新規theme名をつける(debian-joy直接書きけるのでもよいだろうけど一応別にしておく)。
と runlevel 3 の場合は gui でなく cui(text)で起動したいので、slimを実行しないよう /etc/rc?.d への登録を変更する。 # Default-Start: 2 4 5 # Default-Stop: 0 1 3 6 のように該当行を書換(3をStartからStopへ移し)てセーブ。その後 sudo insserv -r slim sudo insserv -v slim を実行。
CUI専用環境での 日本語入力GUI(X)を使わないCUI環境だけのdebian7インストールを(別途)行う場合は、fcitx に拘る必要ないので、uim-fep で 日本語入力を行えるようにできるだろう。 sudo apt-get install uim uim-anthy uim-fep (ここでmozcでなくanthyなのは uim-fep試した時使ってたのがこれだった為) CTRL-SPACE で fep o/off して変換おこなえるが、全角半角や変換・無変換等のキーは使えず別キーを使う必要がある。 コンソール環境では歴史的に新しめのキーやローカル(日本語)キーなんぞは仕様・ソフト的(ncursesやそれが参照するterminfo,termcap)に未対応のようなので仕方ないけれど... 逆に F13~F36(F63?) とか、実キーとしてはめったに無さそうなキーコードは存在してたりする。 ので、窓の憂鬱で、普通は使って無さそうなファンクションキーコードを流用して、例えば、全角半角キーなら F16、無変換なら F17、変換ならF18、かな ならF19、のようにキーコードを置換するようにし、日本語変換(エンジン)側のキー設定もそれに合わせて F16-F19を設定しておけば、コンソール環境でも日本語変換キーで変換が行えるようになるはず。(F16-F19で不都合ありそうなら番号ずらす) .mayu の設定例として(漢字キー以外の変換無しの場合) include "linux109.mayu" keymap Global key Kanji = F16 key Muhenkan = F17 key Henkan = F18 key Hiragana = F19 (もし既存の .mayu に追加するなら Kanji,Muhenkan,Henkan,Hiraganaの4行を keymap Global の範疇に追記) ~/.uim で該当部分に (define-key generic-on-key? '("F16" "ZENKAKUHANKAKU" "<Control> ")) (define-key generic-off-key? '("F16" "ZENKAKUHANKAKU" "<Control> ")) のように F16 を追記。 あと ~/uim.d/customs/ 下の *.scm 中の、"zenkaku-hankaku", "Muhenkan", "Henkan_Modo", "hiragana" のある定義に、日本語キーに対応する "F16","F17","F18","F19" を追記していけば大体意図通りになる
……ハズ、と思う。
2015-1-1[木]新年あけましておめでとうございます。 去年中にやりきれなかったことを今年(中)はやり遂げたい...とぜんぜんひきづっててあらたまってないな。 お仕事は一昨年秋くらいからのスマフォ・ガチャアプリ系の下っ端仕事がまだ続いていて1つの作品に連続でここまで長く携わるのは初めてかも(さすがにもうそろそろ切れるだろうけど)。最初のリリースまでは激務で以後は緩急あるけど穏やかな進行で、ターゲット(技術)は今までの延長だけど仕事運び的には業種の違いを実感。
やっぱ納期に対する要求具合の違いは全体的にいろいろな局面で判断基準が違ってくるものですね(会社ごとのカラーもあるでしょうが)。 と、ま、ぼちぼち生きてます。
2014-12-28[日] VAIO C1 でlinux 補足(遅延書き込み) 前回(雑記/2014-12-21)以降、grub2誤インストール→install-mbrしたりごちゃごちゃ→w2kの回復セットアップでごちゃごちゃ→drive c 破壊、と間抜けしてしまい。 C1のリカバリDISC は CだけでなくDドライブも(連続したパーティションで)必要なようでリカバリ諦め。Dドライブの w2k が生きてれば実質は問題ないので CドライブはFAT32でフォーマット、 w2k のDISC より、 NTLDR NTDETECT.COM BOOTFONT.BIN をC:\にコピーして、c:\boot.ini を [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(2)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(2)\WINNT="Win2K" /fastdetect のようにして作成. あと Puppy linux で grub4dos を/sdaにインストールして(menu.lstをそれっぽくして)無事起動。
それと、 debian7 を最小構成でインストールして icewm や jwm を試してみたら軽さ的には結構よさげなのかも。もちろんその他の必要そうなもの次々いろいろインストールしてサービス等常駐物増えてくとメモリ消費や重さはますけど...
|