2015年12月6日日曜日

Ubuntu14.04でGTX750tiを使う

最近、研究用途でLinuxを使うことが増えたんですが、処理が重いので仮想マシンを使うより、直に動かそうかなと思ったのですが、グラボのドライバがなかったので辛いものがありました。

というか、インストール時に文字が読めないのがめっちゃ辛かったです。(感覚でやりました)←

で、インストール後、<C-A-t>でterminalを起動し、<C-+>で文字を大きくして作業しました。

こちらを参考にドライバ(?)を入れたら動くようになりました。
ただし、2項目目までで十分動いたのでそこまでにしときました。

32Bit版
$ wget http://us.download.nvidia.com/XFree86/Linux-x86/343.22/NVIDIA-Linux-x86-343.22.run
64Bit版
$ wget http://us.download.nvidia.com/XFree86/Linux-x86_64/343.22/NVIDIA-Linux-x86_64-343.22.run
で落としてきて、
$ sudo apt-get purge nvidia*; sudo apt-get install nvidia-331-updates-dev
で実行。


GTX750tiだけじゃなくて使えるっぽいので何かの参考になれば。

UbuntuをMac風にする


PearOSが某大企業(MSかな)に買収されてから悲しみにくれていたわけですが、PearOSもUbuntuベースだとかどうとか。それだっらMac風にすればいいじゃんとか思ってたら、めっちゃ便利にまとめてくれたサイトがあるじゃないですか。

何を隠そう、やれんのか、おい! - MBuntu で Ubuntu 14.04/10 に Mac OS X スキン革命を起こす方法の丸パクリです。なんの悪びれもせず丸パクリです。
悪びれはしてませんけどめっちゃ感謝してます。ありがとうございます。
自分用の備忘録なので画像は端折ってますんで、上記がめっちゃわかりやすいです。



$ wget http://drive.noobslab.com/data/Mac-14.10/MBuntu-Wallpapers.zip
でMac風の壁紙を手に入れられるっぽいですね。
"Mac wallpaper"とかでググれば出てきそうなもんですけど、コマンドのほうがコピペするだけだから楽か。

$ sudo add-apt-repository ppa:noobslab/themes
$ sudo apt-get update
$ sudo apt-get install mbuntu-y-ithemes-v4
$ sudo apt-get install mbuntu-y-icons-v4
S sudo apt-get install mac-ithemes-v3 mac-icons-v3
でテーマをインストール、

$ sudo apt-get install unity-tweak-tool
でテーマを適応するためのツールをインストールします。
Unity-tweak-toolのthemesからテーマを設定します。


$ sudo add-apt-repository ppa:noobslab/apps
$ sudo apt-get update
$ sudo apt-get install slingscold
でslingscoldというランチャーをインストールします。

$ sudo apt-get install indicator-synapse
でサーチインジゲーターをインストールします。
コメントによるとnoobslab/appsのリポジトリが必要っぽいです。

$ sudo add-apt-repository ppa:docky-core/ppa
$ sudo apt-get update
$ sudo apt-get install docky

$ sudo apt-get install mbuntu-y-docky-skins-v4
でDockyをインストールします。

slingscoldは全画面表示で起動するから、Dockyに追加するには/usr/share/applications/からアイコンをドラッグ・アンド・ドロップして追加するらしいです。

noobslabでこれを補助するシェルがあるらしいです。
$ wget -O config.sh http://drive.noobslab.com/data/Mac-14.10/config.sh
$ chmod +x config.sh

$ ./config.sh
俺は今回使いませんでしたが。

$ wget -O ~/Mac.po http://drive.noobslab.com/data/Mac-14.10/change-name-on-panel/mac.po

$ sudo msgfmt -o /usr/share/locale/ja/LC_MESSAGES/unity.mo ~/Mac.po
で左上のUbuntuをMac OS Xに変えられるんだとか。

$ sudo apt-get install mbuntu-y-bscreen-v4
で起動画面をりんごにできるんだそうで。

Ubuntuのデフォルトランチャーは隠しちゃいましょう。

$ sudo apt-get install libreoffice-style-sifr
でLibreOfficeのテーマを入れられるんだそうです。


$ wget -O mac-fonts.zip http://drive.noobslab.com/data/Mac-14.10/macfonts.zip
$ mkdir ~/.fonts
$ unzip mac-fonts.zip -d ~/.fonts/
Archive:  mac-fonts.zip
  inflating: /home/vagrant/.fonts/AppleGaramond.ttf
  inflating: /home/vagrant/.fonts/AppleGaramond-Bold.ttf
  inflating: /home/vagrant/.fonts/AppleGaramond-BoldItalic.ttf
  inflating: /home/vagrant/.fonts/AppleGaramond-Italic.ttf
  inflating: /home/vagrant/.fonts/AppleGaramond-Light.ttf
  inflating: /home/vagrant/.fonts/AppleGaramond-LightItalic.ttf
  inflating: /home/vagrant/.fonts/Aquabase.ttf
  inflating: /home/vagrant/.fonts/LITHOGRL.TTF
  inflating: /home/vagrant/.fonts/Lucida Grande Bold.ttf
  inflating: /home/vagrant/.fonts/Lucida Grande.ttf
  inflating: /home/vagrant/.fonts/Lucida MAC Bold.PFB
  inflating: /home/vagrant/.fonts/Lucida MAC Bold.pfm
  inflating: /home/vagrant/.fonts/Lucida MAC.PFB
  inflating: /home/vagrant/.fonts/Lucida MAC.pfm
  inflating: /home/vagrant/.fonts/LucidaMAC.ttf
  inflating: /home/vagrant/.fonts/lucon.ttf
  inflating: /home/vagrant/.fonts/MACGRAND.PFB

  inflating: /home/vagrant/.fonts/MACGRAND.PFM
でフォントも何とか出来るんだそうです。

$ sudo apt-get install mbuntu-y-lightdm-v4
でログイン画面を変えれるんだそうです。



いやー、なんかスゴイっすね。
これは便利。
ワークスペースのスイッチャーがPearOSのやつがあると便利嬉しいんですけど、なんかあるんですかね?
あと、PearOSのTerminalの配色が好きだったんですけど、あの配色覚えてる方っていますかね?


2015年8月16日日曜日

EeeBook(X205TA)でUbuntuを使う(VirtualBox)

X205TAが価格.comと同じ値段で売る上にポイントも付けてくれるとヤマダ電機さんがいうので、衝動買いしてしまいました。
衝動買いにしてはいい買い物だった気が今のところはしています。

ASUS X205TAでLinuxを使おうなんて考えるなを参考にすれば、購入しないほうが良かったんでしょうけど、Linuxを入れるとWi-Fiが繋がらないことがこのようにいっている根拠だそうです。

というわけで、Windows(ホスト)+Ubuntu(VirtualBox)を考えました。
Windows8.1なので、Hyper-Vが四の五のと言うわけで、VMWare Playerではなく、Oracle VirtualBoxを使いました。

Ubuntuのインストール


RAM2GBのOSでUbuntuを仮想マシンで動かせるのか!?と疑問がありますが、
UbuntuのCUIパッケージ(?)と言うより、最小構成(?)のUbuntuMinimalをインストールしました。

インストールはUbuntu 13.04の最小(CUI)インストールメモを参照しました。
ただし、Byobuは入れてません。
インストール時は512MBのメモリを割り当てましたが、どうやら80MBほどしか使ってなかったっぽいので256MBの割り当てにあとで変えましたけども。

フォルダ共有


WindowsとUbuntuでファイル共有したいのですが、最優先()で実行するコマンド
$ sudo apt-get install vim
をしてからファイル共有にとりかかりました。

あらゆるサイト(例えばここ)によると、guestAdditionsと言うのをインストールしなきゃいけないらしいのですが、
どうやらそのままではビルドがうまくいかない模様。
というわけで、先人の知恵をお借りします。
Installing VirtualBox Guest Additions on Ubuntu Serverを参考に

$ sudo apt-get install dkms
$ sudo apt-get install build-essential
$ sudo apt-get install linux-headers-generic

として、

$ sudo ./VBoxLinuxAdditions.run

でうまいことguest additionsがインストールされてくれたようです。
フォルダ共有は

$ sudo mount -t vboxsf [共有ファイル名] [マウントポイント]
で見事完成。

Windowsでもまともなシェルが動いてるっぽく見えますね。
あとは、自動ログインとか設定できたらいいなぁなんて考えています。



余談ですが、Windows8以降、yamyでAlt+Tabが効かなくなったとか。
そして、パッチを作成してくれた方がいるとか。
まだパッチを当ててはいませんが、作成してくださった方(@k-tsjさん)に非常に感謝します。


追記(2015/08/24)
TeXの環境を整えるのに、初期状態だとapt-add-repositoryが使えないようなので、以下のおまじないを実行すると使えるようになるようです。

# apt-get install software-properties-common



2015年3月30日月曜日

C# コンパイラ 場所

まぁ、タイトルは俺が「C# コンパイラ 場所」でググったので。

ローカルでガリガリデータ処理をやったり素数を求めたりそんなことが好きな俺が、珍しくWindowsアプリをつくろうということになりまして。

調べてみるとVisual Studio使えって書いてあったんだが、俺はVimが使いたいんじゃー!
って思ったら、普通にコンパイラあるのね。(当たり前だ)

.NET Frameworkとか普通にインストールされているものだと認識してて...

C:\bin\csc.batに

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe %*

と記述しておきましたとさ。

これで快適にVimが使えるね!!

とりあえずHello Worldから始めまーす。

2015年3月24日火曜日

スマホ用タッチストラップをつくろうとしてみた

まず、タイトルの説明からしますね。
タッチストラップとは...ってなってると思いますが、初代DSを買った時についてきたあれですね。

あれって何って、これです。
DSは感圧式なんでこのセンサで良いのですが、これって手袋をはめたまま使えて便利じゃね?
ってことでつくろうとしてみました。

なんで作ったじゃなくてつくろうとしてみたなのかと言いますと、作れなかったからです。
作れなかったけど、色々と調べてみてわかったことがあるので説明しますね。


まず、スマホで使える手袋があるじゃん!ということで我らがダイソーで購入した手袋を使ってみると何故か反応しない!!
タッチペンはスマートフォンをスマートじゃなくするものだし...
どうせ静電容量方式だろうからアルミホイルでストラップを自作じゃー!
ってノリで始めました。

で、アルミホイルでつついてみる。
...動かん。
じゃあ、アルミホイルを指で触ると...
動いた!!

で、なんで?ってことになるんですが、
一言に静電容量方式と言っても、表面型静電容量方式と投影型静電容量方式があるようです。
こちらが非常にわかりやすい図と共に説明してありました。
表面型は人を通してGNDとパネルを接地させる事により反応する方式。
投影型は人の指とパネルとでコンデンサを形成する方式。

つまり、前者はGNDとパネルを導体で接続する必要があり、
後者は導体がパネルに接触してればそれで良いみたいです。

で、俺が使っているスマホはP01D。
3.2インチだし後者の方式かなと思って、なんでできないのか四苦八苦していましたが、
アルミホイルを接地した上でタッチしてみると反応しました。
どうやら、P01Dで採用している方式は表面型のようですね。

そういえば、ダイソーで買った手袋はノートPC(Pavillion dm1)のタッチパネルに反応したなぁ...と。
(こちらはマルチタッチ可能なので投影型)

まぁ、タッチストラップを常に設置していれば作れるのですが、タッチペンよりスマートじゃなくなるなぁと思ったのでこのへんで断念しときます。

ちなみに、実験しなくてもこんな記事がありました。
まぁ、この記事があってもP01Dを投影型だと思ってた時点であれなんですけど...


2015年3月14日土曜日

Android x86でLINEを使いたい

LINEとは...
顧客が韓国企業に個人情報を対価に無料で通話及びチャット昨日を提供してくれるサービス
という認識をしています。

まぁ、何が言いたいかというとですね、宗教的理由でLINE for Windowsは入れたくないんですね。
(というか、できればLINEなんて使いたくないんですが、多数派の暴力は恐ろしい...)

手なわけで、Android x86(PC版のAndroid)を仮想マシン上で動かして、そこでLINEを動かせばHOSTにLINEの悪影響が及ばないのではと考えました。

ホストマシンのOSはWindows 7 Proなので仮想マシンは普段VMware playerを使ってるんですが、今回はOracle VirtualBoxを使いました。


とりあえず例によって先人の知恵をお借りしました。
[Install]→[Create/Modify partitions]→[New]→[Primary]→[Bootable]→[Write]→[Quit]
ってこんなかんじか。
で、sda1ができたからext3を選択してインストール。
GRUBは入れといたほうが良さそうねー。
/systemの読み書きは許可しときまーす。

で、起動したら頑張って日本語に設定して、Wi-Fiネットワークはスキップ(警告はキニシナーイ)
Googleアカウントにログインしてっと。

で、とりあえず使ってみたんですけど、なんか画面が回転しちゃって使いにくいのなんのって。
PCだから自分の首を画面に合わせて回すしかないでしょ。
とりあえず、設定→ユーザ補助から画面回転をオフにしときました。
あと、PCで使うならスクリーンセーバーなんていらないから画面OFFも切っといて。

あ、あと、地味に苦戦したのが、VirtualBoxのホストキーが右コントロールに割り当てられてるのをすっかり忘れてまして、しかも使ってるキーボードが初代HHKBのLiteなんで右コントロールなんて存在しないわけで...
マウスをキャプチャされたまんまどうすんのこれ?状態w
なんとか脱出出来た隙にShift+Ctrlをホストキーに設定しときました。

で、問題のLINEなんですが、これが強制的に画面を回転させてくれるんですね。
やっぱりLINEは悪い子。



とりあえず、画面回転問題は慣れてしまえば90[deg]位相のズレは修正できるようになるので置いといて、
最大の難関はLINEに同時ログインすることですね。
で、調べてみると...こんな記事が!?

実際に同一アカウントを2端末から同時利用不可能なのかどうかを試してみようにもリスクが高過ぎる気がする...
さて、何か解決策はあるんだろうか?






2015年1月24日土曜日

UbuntuでHHKBを使う

仮想マシンでUbuntuを使ってるんですが、キーボードの初期設定をちょっと間違えましてJIS認識にされてるんですね。
で、俺が使ってるのはHHKB(US)なので、いろいろ不都合はあるわけですが、基本的にWindowsで.cやら.texやらのファイルを編集して、それをコンパイルしたりとか、その程度の理由で使っているわけですが、やっぱり不便だなぁなんて思ったので。

おまじないはこちら

# dpkg-reconfigure keyboard-configuration

ここから、HHKBを選べばOK

かと思いけや、なんじゃこりゃ、
JISのままやないかーい


というわけで、
/etc/default/keyboard
をとりあえず覗いてみた。

うーん、hhkのusって書いてあるんだけどなぁ...


とりあえずググる...
えーと、なになに
/usr/share/ibus/component/mozc.xml
をつつけばよろし?
なるほど、ibus側の設定でしたか。
とりあえず管理者権限がいるっぽいね。

layoutをenに変えれば良いと?

とりあえず変えてみたけど動作は変わらず


とりあえずガチャガチャ...

ibusの設定に、日本語キーボードとか言う奴がいたから削除。
USを追加して一番上に...

そしたらちゃんと認識してもらえましたとさ。


2015年1月22日木曜日

TeXのbb指定に関して

現在、レポートに追われて死んでいます。
というか、これからレポートを出しに行ってきます。

でも、その前に。
.pngファイルをTeXで挿入しようとしたらなんかバグって大変なことになったんですよね。
.pngを使うときはebbコマンドで.bbファイルを生成して、その中身を覗いてbb指定して...ということをしていたのですが、なんでバグったのか意味不明でした。

で、死んでしまうと思いながら必死に調べていたら、
bb指定は使うべきではないとの記事を発見。

これによると

$ extractbb *.png

とでもやれば良さそうで。

早速試してみると...
うまくいった!!!

しかも、これまでみたいにbb指定をいちいち書かなくていいから楽そう。
こりゃいいや。

というわけで、/bbで検索かけてdf,で消して、あとはひたすらn.っと。


2015年1月20日火曜日

yamyを使ってJISキーボードをUS風にする

デスクトップPCだと、US配列のHHKBを使えばいいだけの話ですが、
ノートPCたと、US配列はなかなか入手がめんどくさいですよね(昔に比べれば楽になったほうだと苦情がでそうですが...)

そこで、yamyを使ってwindows PCのJIS配列をUS風にカスタマイズして使ってるのですが、
意外と需要があるのではないかと思ったため一応まとめてます。


参考にした配列はこちらです。




まず、こちらからyamyを入手します。
詳しいマニュアルはこれを参照してください。

とりあえず、以下のコードをコピペしてmyUS.mayuとかその辺りのテキトーな名前で保存して、
yamyに読み込ませればUS風にキーバインドが変更されます。
ざっくりした説明をすると、左辺が押したキーボード、右辺が画面に表示される文字って感じですかね。
C-はCtrl,S-はShift,
その前についてる*はワイルドカード的なそれで、~はNot
例えば、

key *C- S-_2                 = *C-~S-Atmark             # @
だったら、Ctrlの状態は任意で、Shiftと2が押されたらCtrlの状態を保持したままShiftを押さずにAtmarkキーが押されたことにしろみたいな意味になります。


include "109.mayu" # Japanese Keyboard
keymap Global

key *C- S-_2                 = *C-~S-Atmark             # @
key *C- S-_6                 = *C-~S-Caret              # ^
key *C- S-_7                 = *C- S-_6                 # &
key *C- S-_8                 = *C- S-Colon              # *
key *C- S-_9                 = *C- S-_8                 # (
key *C- S-_0                 = *C- S-_9                 # )
key *C- S-Minus              = *C- S-BackSlash          # _
key *C-~S-Caret              = *C- S-Minus              # =
key *C- S-Caret              = *C- S-Semicolon          # +
key *C-~S-Atmark             = *C-~S-LeftSquareBracket  # [
key *C- S-Atmark             = *C- S-LeftSquareBracket  # {
key *C-~S-LeftSquareBracket  = *C-~S-RightSquareBracket # ]
key *C- S-LeftSquareBracket  = *C- S-RightSquareBracket # }
key *C- S-Semicolon          = *C-~S-Colon              # :
key *C-~S-Colon              = *C- S-_7                 # '
key *C- S-Colon              = *C- S-_2                 # "
key *C-~S-RightSquareBracket = *C- S-Atmark             # \
key *C- S-RightSquareBracket = *C- S-Caret              # ~

 mod Shift += !BackSlash

あとは、これをデフォルト起動にするために、このへんを参考に、タスクスケジューラを使ってログイン時にyamyを自動起動にしておけば大体OKかな?


ちなみに、capsLockはこちらを参考に

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,00,3a,00,00,00,00,00

の4行をcaps2ctrl.regとかって名前で保存して管理者権限で実行しておけばCapsLockがCtrlに書き換わってくれますね。




2015年1月12日月曜日

PS/2キーボードの波形に関して

しばらくキチガイじみたことを休止していたため、久しぶりの更新となります。

もちろん今もVimmerなわけで、もちろんUS配列信者でもあるわけで...
ついでに、大学のとある科目でマイコンを突っつく機会ができたわけで...

つまりですね、PSoCを使ってJISキーボードをUS配列風に変えたり、Vimエミュレータっぽい挙動をさせてみたりしてはどうかなと思ったわけです。

まぁ、それは良いとして、PS/2キーボードとしてマイコンが生成する信号をキーボードとしてちゃんと認識させるのに苦労しました。

PS/2キーボードのプロトコルに関してはこちらを参照しました。

これによると、clockがhighの時にdataをセットし、clockがlowの間にデータが読まれると言うこと。
つまりですね、clockがlowの時にはデータラインを変更しないということですよね。

しかし、まず苦労した点として、これを読まずに実装しに行ったのでどうせポジティブエッジだろうと勝手に思い込んでしまったんですね。
どちらかと言うとネガティブエッジなので失敗。
動作テストはキーボードの動きが見れれば十分だったのでBIOS上でやったのですが、ビープ音なりまくりw

そこで頼りになるのがオシロスコープ。
ちなみに、PS/2端子はOpen Drain Lowになっているのでオシロスコープにはプルアップ抵抗をつける必要があります。
とりあえずキーボードが生成する波形を測ってみました。
黄→データ
青→クロック
です(言わなくてもわかるか)



これはキーボードを話した時に送られる0xF0の波形。
スタートビット(常に0)、データビット(下位→上位ビットの順で送られることに注意)、パリティビット(奇数パリティ)、エンドビット(常に1)
の順で送られていることが確認できます。

で、

こっちがでっかくしたやつ。

よく見てもらうとわかると思うのですが(と言うか、0x0Fがわかりにくいのでもっとわかりやすい波形を使えって話なのですが、保存してあった画像がこれだけだったのですいません。)、
クロックの立ち下がりよりクロック周期の1/4だけ早くデータラインが変化しているのです。

というわけで、この波形を純粋に真似てみるということをしました。

そのソースの一部がこちら。

void outputData(BYTE d) {
    unsigned short i;
    unsigned short x = d << 2 | 0x03;
    int j;
    const t = 2;
    // calculate parity
    for ( i=0x80; i; i>>=1 ) {
        if ( d & i ) {
            x ^= 0x02;
        }
    }
    // send
    for (i=0x400; i; i>>=1 ) {
        if ( x & i ) {
            DATA_OUT_On();
        } else {
            DATA_OUT_Off();
        }
        for ( j=0; j<t; j++); // wait
        CLK_OUT_Off();
        for ( j=0; j<t; j++); // wait
        for ( j=0; j<t; j++); // wait
        CLK_OUT_On();
        for ( j=0; j<t; j++); // wait
    }
    DATA_OUT_On();
}


tの4倍がクロック周期となっていますね。
そもそも、マイコンのクロックが遅いのに対して、T=80[um]とかいう鬼畜な状況だったので、
データを送りながらパリティを送るのはリスキー。
そこで、先にスタート、データ、パリティ、エンドを羅列したxという変数を作成し、
そこから1bitづつ送信しています。
ちなみに、dは上位と下位を反転しています。

余談になりますが、キーボードの入力を読み取るときにクロックの立ち上がりで割り込み処理をしているのですが、80[um]ごとに11回連続で呼び出されることがわかっている割り込みなので、データをこねこねしていたのではとても間に合わないのかなぁと思って、論理演算のみで、しかも演算回数を極力減らしたかったので、オーバフローを活用しながら、上位と下位が反転した形でキーコードを扱うという非常に保守点検のしにくいプログラムが出来上がる予定です。