VC#を書くのに,VSではなくVimとコマンドプロンプトを使う人なので,
VSのこの設定を変えればいいよ!ってドコにあるんだろう?をしていました.
コマンドプロンプトから
>C:\Windows\Microsoft.NET\Framework\vx.x.xxxxx\csc.exe source.cs
を叩くとデフォルトではコンソールアプリケーションになるため,
.exeを実行した時にコマンドプロンプトが表示されてしまって正直うっとうしい.
/target:winexeオプションを追加してコンパイルすることでこの問題を解決できるらしい.
ちょっとモヤモヤが解決したのでした.
2016年11月30日水曜日
2016年6月24日金曜日
Developing your plugin for Icy:
Development environment
http://icy.bioimageanalysis.org/index.php?display=startDevWithIcy
I recommend you to do following all 4 steps.
By running hello World Plugin, we can check that the environment works or not.
1. Install Eclipse
2. Install Icy4Eclipse plugin
3. Configure Icy4Eclipse
4. Write your first plugin
Export Plugin
The upper way to run your plugin, max memory configure of icy does not work.
But by normal starting icy, your plugins is not found.
To load your plugins when icy is started by normal way, you have to export your plugin.
First, make your own folder under icy/plugins/. ( You set the folder name login name of your setting upper 3. step better.)
Then return to Eclipse, right click your project and select Export.
Select Java->JAR file and click Next.
Set like following picture and click Finish.
Then start icy by normal way, your plugin will be found!
Import Plugin(Advanced)
If you want to modify someone's plugin, you have to import .jar file into Eclipse.
In Eclipse select File->new Java Project, set Project name, select "Use default JRE",
select "Create separate folders for sources and class files", and click Finish.
Then select src folder and File->import and import the plugin which you want to modify.
Right click project , select properties, select Icy tab and check "Is an Icy project".
Then reading error message, right click project, select Build path-> Add External Archives,
import .jar files to fix the error.
NOTE the package name have to be fixed plugins.[your login name].[Project name].
2016年5月13日金曜日
Virtualboxで物理ディスクをブートする(Ubuntuホスト,Windowsゲスト)
日頃からWindowsもUbuntuもよく使うので思うのだが,
ホスト>ゲスト
という力関係が煩わしいことがある.
例えば,Ubuntuホスト,Windowsゲストの環境で,Windowsだけを使いたい場合にも1度Ubuntuを起動しなければならない.
それならデュアルブートすればいいじゃないかという話だが,Ubuntuを使ってる時にちょっとWindowsを使いたくなったとかいう状況が面倒くさい.
そこで,デュアルブートしといてVirtualboxから物理ディスクを起動できれば便利なのになぁと思ったらできるようなのでやってみたので作業ログ.
作りたかった環境はHostOS=Ubuntu14.04,GuestOS=Windows10.
UbuntuもWindowsもそれぞれ別のディスクにインストール済みである.
(別ディスクじゃなくてパーティション切っても行けると思う)
まず,Windows側の設定.
コンパネ→電源オプション→電源ボタンの動作を選択する→現在利用可能ではない設定を変更します
の順にクリックし,「現在利用可能ではない設定を変更します」をクリックし,
「高速スタートアップを有効にする(推奨)」のチェックを外す.
これをやっとかないとUbuntu側からうまくマウントできない.
ちなみに,こちらを参考にさせてもらった.
まず,自分をdiskグループに追加する.
$ sudo fdisk -l
でディスクを確認する.
Bootの項目に*が入っているディスクがbootableディスクだから"/dev/sd.."を覚えておく.
当環境ではLinux用とWidows用に2つ*が入っているディスクがあるが,Windows用の方を覚えておく.
次に,
$ ls -al /dev/sd..
を打ち込む./dev/sd..の部分はさっき覚えたディスク名にする.
ここでグループを確認する.(おそらくdiskグループだろう)
$ sudo gpasswd -a YOUR_USERNAME disk
を実行して,自分をdiskグループに追加する.(diskグループでなかった場合は先ほど確認したグループに適宜変更)
で,一度再起動する必要があるので再起動.
$ sudo reboot
再起動したら,次は仮想ディスクを作成する.
物理ディスクへのリンクみたいなもんなのかな???
$ VBoxManage internalcommands createrawvmdk -filename "</path/to/file>.vmdk" -rawdisk /dev/sd..
<path/to/file>と/dev/sd..は適宜変更する.
ここまでできたら,あとはVitualboxから新しい仮想マシンを作成し,Hard driveをどうするかと聞かれるので"Use an existing virtual hard drive file"にチェックを入れて今作成したディスク(hogehoge.vmdk)を選択するだけ.
余談だが,Virtualboxのホストキーは右Ctrlだが,右Ctrlがないキーボードを使っている場合は起動する前に変更するのを忘れないようにする.
2016年1月31日日曜日
TeXで図を並べる
自分はTeXで図を並べるとき、
\begin{figure}
\begin{center}
\begin{tabular}{cc}
\includegraphics[width=0.45\hsize]{hoge.png} &
\includegraphics[width=0.45\hsize]{hoge.png} \\
(a) hoge &
(b) hoge \\
\begin{figure}
\begin{center}
\begin{tabular}{cc}
\includegraphics[width=0.45\hsize]{hoge.png} &
\includegraphics[width=0.45\hsize]{hoge.png} \\
(a) hoge &
(b) hoge \\
\includegraphics[width=0.45\hsize]{hoge.png} &
\includegraphics[width=0.45\hsize]{hoge.png} \\
(c) hoge &
(d) hoge \\
\includegraphics[width=0.45\hsize]{hoge.png} \\
(c) hoge &
(d) hoge \\
\end{tabular}
\end{center}
\end{figure}
みたいに書くのですが、図が大きいと縦にはみ出ることがある。
で、longtableを使えば解決するのかなと思ったんですが、どうやらfigure内でpagebreakすることができないらしい。
でも、figureを2個にすると図番号がなぁ...とか思ってたら、figure*するといいらしい。
具体的には
\begin{figure*}
\begin{center}
\begin{tabular}{cc}
\includegraphics[width=0.45\hsize]{hoge.png} &
\includegraphics[width=0.45\hsize]{hoge.png} \\
(a) hoge &
\begin{figure}
\begin{center}
\begin{tabular}{cc}
\includegraphics[width=0.45\hsize]{hoge.png} &
\includegraphics[width=0.45\hsize]{hoge.png} \\
(c) hoge &
(d) hoge \\
\begin{center}
\begin{tabular}{cc}
\includegraphics[width=0.45\hsize]{hoge.png} &
\includegraphics[width=0.45\hsize]{hoge.png} \\
(a) hoge &
(b) hoge \\
\end{tabular}
\end{center}
\end{figure*}
\begin{center}
\begin{tabular}{cc}
\includegraphics[width=0.45\hsize]{hoge.png} &
\includegraphics[width=0.45\hsize]{hoge.png} \\
(c) hoge &
(d) hoge \\
\end{tabular}
\end{center}
\end{figure}
って書いとけばOKって話。
\section*{hoge}的なのは知ってたけど、figureとかにも*が使えるっぽいですね。
勉強になりました。
2016年1月7日木曜日
vimの色をあれこれする
お久しぶりです。
普段ゲームしなくてもテスト前になると何故かゲームしたくなる現象ってありますよね。
そんな感じで、卒論で忙しくなったのでvimの色をあれこれ設定しています。
ubuntuのターミナル色が見やすいなぁとは思い、windowsでも同様の色設定にしたいなぁと思いまして。
$VIMRUNTIME/colors/mycolor.vim
なるファイルを作成して、
$VIMRUNTIME/syntax/syncolor.vim
の色設定の部分をコピー。
SynColorをhighlightにSynLinkをhighlight default linkに変更すればそれっぽくはなるようです。
ubuntuのターミナルの色は
/usr/share/gconf/schemas/gnome-terminal.schemas
に書いてありました。
背景色は#300A24みたいです。
:so $VIMRUNTIME/syntax/colortest.vim
コマンドを実行して使える色名を見ます。
/usr/share/gconf/schemas/gnome-terminal.schem
に書かれているカラーコードと合わせると、各色名は以下の様なカラーコードになります。
" background = #300a24
" black = #2e3436
" darkred = #cc0000
" darkgreen = #4e9a06
" brown = #c4a000
" darkblue = #3465a4
" darkmagenta = #75507b
" darkcyan = #06989a
" lightgray = #d3d7cf
" darkgray = #555753
" red = #ef2929
" green = #8ae234
" yellow = #fce94f
" blue = #729fcf
" magenta = #ad7fa8
" cyan = #34e2e2
" white = #eeeeec
colorschemeの書き方は検索すれば出てくるのでそれを参考にすれば...
ちなみに、デフォルトの背景色を設定するのは
highlight Normal ...
に色をいじればできるっぽいですね。
見た感じはなんかそれっぽい。
一応、作った.vimを投げとくので参考までに。
let g:colors_name = expand('<sfile>:t:r')
set background=dark
highlight clear
if exists("syntax_on")
syntax reset
endif
" background = #300a24
" black = #2e3436
" darkred = #cc0000
" darkgreen = #4e9a06
" brown = #c4a000
" darkblue = #3465a4
" darkmagenta = #75507b
" darkcyan = #06989a
" lightgray = #d3d7cf
" darkgray = #555753
" red = #ef2929
" green = #8ae234
" yellow = #fce94f
" blue = #729fcf
" magenta = #ad7fa8
" cyan = #34e2e2
" white = #eeeeec
highlight Normal term=NONE cterm=NONE ctermfg=black ctermbg=NONE gui=NONE guifg=#eeeeec guibg=#300a24
highlight Comment term=bold cterm=NONE ctermfg=DarkBlue ctermbg=NONE gui=bold guifg=#3465a4 guibg=NONE
highlight Constant term=underline cterm=NONE ctermfg=DarkRed ctermbg=NONE gui=NONE guifg=#cc0000 guibg=NONE
highlight Special term=bold cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=bold guifg=#75507b guibg=NONE
highlight Identifier term=underline cterm=NONE ctermfg=DarkCyan ctermbg=NONE gui=NONE guifg=#06989a guibg=NONE
highlight Statement term=bold cterm=NONE ctermfg=Brown ctermbg=NONE gui=bold guifg=#c4a000 guibg=NONE
highlight PreProc term=underline cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=#75507b guibg=NONE
highlight Type term=underline cterm=NONE ctermfg=DarkGreen ctermbg=NONE gui=bold guifg=#4e9a06 guibg=NONE
highlight Underlined term=underline cterm=underline ctermfg=DarkMagenta gui=underline guifg=#75507b
highlight Ignore term=NONE cterm=NONE ctermfg=white ctermbg=NONE gui=NONE guifg=bg guibg=NONE
highlight Error term=reverse cterm=NONE ctermfg=White ctermbg=Red gui=NONE guifg=White guibg=Red
highlight Todo term=standout cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Blue guibg=Yellow
highlight default link String Constant
highlight default link Character Constant
highlight default link Number Constant
highlight default link Boolean Constant
highlight default link Float Number
highlight default link Function Identifier
highlight default link Conditional Statement
highlight default link Repeat Statement
highlight default link Label Statement
highlight default link Operator Statement
highlight default link Keyword Statement
highlight default link Exception Statement
highlight default link Include PreProc
highlight default link Define PreProc
highlight default link Macro PreProc
highlight default link PreCondit PreProc
highlight default link StorageClass Type
highlight default link Structure Type
highlight default link Typedef Type
highlight default link Tag Special
highlight default link SpecialChar Special
highlight default link Delimiter Special
highlight default link SpecialComment Special
highlight default link Debug Special
普段ゲームしなくてもテスト前になると何故かゲームしたくなる現象ってありますよね。
そんな感じで、卒論で忙しくなったのでvimの色をあれこれ設定しています。
ubuntuのターミナル色が見やすいなぁとは思い、windowsでも同様の色設定にしたいなぁと思いまして。
$VIMRUNTIME/colors/mycolor.vim
なるファイルを作成して、
$VIMRUNTIME/syntax/syncolor.vim
の色設定の部分をコピー。
SynColorをhighlightにSynLinkをhighlight default linkに変更すればそれっぽくはなるようです。
ubuntuのターミナルの色は
/usr/share/gconf/schemas/gnome-terminal.schemas
に書いてありました。
背景色は#300A24みたいです。
:so $VIMRUNTIME/syntax/colortest.vim
コマンドを実行して使える色名を見ます。
/usr/share/gconf/schemas/gnome-terminal.schem
に書かれているカラーコードと合わせると、各色名は以下の様なカラーコードになります。
" background = #300a24
" black = #2e3436
" darkred = #cc0000
" darkgreen = #4e9a06
" brown = #c4a000
" darkblue = #3465a4
" darkmagenta = #75507b
" darkcyan = #06989a
" lightgray = #d3d7cf
" darkgray = #555753
" red = #ef2929
" green = #8ae234
" yellow = #fce94f
" blue = #729fcf
" magenta = #ad7fa8
" cyan = #34e2e2
" white = #eeeeec
ctermfgに書かれている色名と対応するカラーコードをguifgに叩きこめば完成。
colorschemeの書き方は検索すれば出てくるのでそれを参考にすれば...
ちなみに、デフォルトの背景色を設定するのは
highlight Normal ...
に色をいじればできるっぽいですね。
見た感じはなんかそれっぽい。
一応、作った.vimを投げとくので参考までに。
let g:colors_name = expand('<sfile>:t:r')
set background=dark
highlight clear
if exists("syntax_on")
syntax reset
endif
" background = #300a24
" black = #2e3436
" darkred = #cc0000
" darkgreen = #4e9a06
" brown = #c4a000
" darkblue = #3465a4
" darkmagenta = #75507b
" darkcyan = #06989a
" lightgray = #d3d7cf
" darkgray = #555753
" red = #ef2929
" green = #8ae234
" yellow = #fce94f
" blue = #729fcf
" magenta = #ad7fa8
" cyan = #34e2e2
" white = #eeeeec
highlight Normal term=NONE cterm=NONE ctermfg=black ctermbg=NONE gui=NONE guifg=#eeeeec guibg=#300a24
highlight Comment term=bold cterm=NONE ctermfg=DarkBlue ctermbg=NONE gui=bold guifg=#3465a4 guibg=NONE
highlight Constant term=underline cterm=NONE ctermfg=DarkRed ctermbg=NONE gui=NONE guifg=#cc0000 guibg=NONE
highlight Special term=bold cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=bold guifg=#75507b guibg=NONE
highlight Identifier term=underline cterm=NONE ctermfg=DarkCyan ctermbg=NONE gui=NONE guifg=#06989a guibg=NONE
highlight Statement term=bold cterm=NONE ctermfg=Brown ctermbg=NONE gui=bold guifg=#c4a000 guibg=NONE
highlight PreProc term=underline cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=#75507b guibg=NONE
highlight Type term=underline cterm=NONE ctermfg=DarkGreen ctermbg=NONE gui=bold guifg=#4e9a06 guibg=NONE
highlight Underlined term=underline cterm=underline ctermfg=DarkMagenta gui=underline guifg=#75507b
highlight Ignore term=NONE cterm=NONE ctermfg=white ctermbg=NONE gui=NONE guifg=bg guibg=NONE
highlight Error term=reverse cterm=NONE ctermfg=White ctermbg=Red gui=NONE guifg=White guibg=Red
highlight Todo term=standout cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Blue guibg=Yellow
highlight default link String Constant
highlight default link Character Constant
highlight default link Number Constant
highlight default link Boolean Constant
highlight default link Float Number
highlight default link Function Identifier
highlight default link Conditional Statement
highlight default link Repeat Statement
highlight default link Label Statement
highlight default link Operator Statement
highlight default link Keyword Statement
highlight default link Exception Statement
highlight default link Include PreProc
highlight default link Define PreProc
highlight default link Macro PreProc
highlight default link PreCondit PreProc
highlight default link StorageClass Type
highlight default link Structure Type
highlight default link Typedef Type
highlight default link Tag Special
highlight default link SpecialChar Special
highlight default link Delimiter Special
highlight default link SpecialComment Special
highlight default link Debug Special
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だけじゃなくて使えるっぽいので何かの参考になれば。
というか、インストール時に文字が読めないのがめっちゃ辛かったです。(感覚でやりました)←
で、インストール後、<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を使いました。
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
衝動買いにしてはいい買い物だった気が今のところはしています。
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 %*
ローカルでガリガリデータ処理をやったり素数を求めたりそんなことが好きな俺が、珍しく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を投影型だと思ってた時点であれなんですけど...
タッチストラップとは...ってなってると思いますが、初代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端末から同時利用不可能なのかどうかを試してみようにもリスクが高過ぎる気がする...
さて、何か解決策はあるんだろうか?
顧客が韓国企業に個人情報を対価に無料で通話及びチャット昨日を提供してくれるサービス
という認識をしています。
まぁ、何が言いたいかというとですね、宗教的理由で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.っと。
というか、これからレポートを出しに行ってきます。
でも、その前に。
.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 # @
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に書き換わってくれますね。
ノート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キーボードの波形に関して
しばらくキチガイじみたことを休止していたため、久しぶりの更新となります。
まぁ、それは良いとして、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回連続で呼び出されることがわかっている割り込みなので、データをこねこねしていたのではとても間に合わないのかなぁと思って、論理演算のみで、しかも演算回数を極力減らしたかったので、オーバフローを活用しながら、上位と下位が反転した形でキーコードを扱うという非常に保守点検のしにくいプログラムが出来上がる予定です。
もちろん今も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回連続で呼び出されることがわかっている割り込みなので、データをこねこねしていたのではとても間に合わないのかなぁと思って、論理演算のみで、しかも演算回数を極力減らしたかったので、オーバフローを活用しながら、上位と下位が反転した形でキーコードを扱うという非常に保守点検のしにくいプログラムが出来上がる予定です。
2014年8月18日月曜日
javascriptnにチャレンジしてみた。
母「あんた大学でJava習ったんでしょ、ホームページ作りたいからjavascript教えてよ」
子「Javaとjavascriptはインドとインドネシアぐらいちがう」
このネタのインドとインドネシアの例えはうまいなぁと思って感動していたわけですが、どうやらネタにとどまってくれなかったようで。
お盆に実家に帰ったら父親が突然
「ホームページ作ってよ」
と行ってきたわけですね。
ほんとにわけわからないですよね。
とは言いつつ、サーバ運用はやってみたかったのでこれはうまく行けばサーバマシンを買ってもらえるかなとかそういった魂胆でとりあえず着手。
話を聞いてみるとノリで言ってみたところがあるみたいで、仕様が確定していないんですね。
このページを真似てみたいと見せられたサイトがあったので、とりあえずそれを参考にしようかと思ったのですが、HTMLを覗いてみると秘伝のたれ状態。
tableを幾重にもしていてスタイルが構築されていたので、とりあえずスタイルはCSSに投げることに。
ヘッダとナビとフッタを固定して記事だけ入れ替えるにはcgiやphpかなとも思ったのですが、実家に持ってきたノートPCは貧弱リソースなので仮想マシンを作ってサーバをあれこれいじることはできそうにない。
そこで、javascriptを使ってみることに。
Get引数を使って、articleの内部を書き換えるという処理をすることに。
しかし、普段CやC++を使っているので、軽量言語にはあまり馴染みがなく。
動的型付やコンパイラがないことにかなり戸惑いを覚えました。
あと、関数の呼び出しに苦戦すると思いませんでした。
setTimeout(function(),1000);
なんでこれで動かないかなぁと悩み、解決するのに半日かかりました。
setTimeout('function()',1000);
シングルコーテーションでくくるのね。
しかも、jsってダブルコーテーションとシングルコーテーションの違いがあんまりないのね。
文字列と文字定数って印象があるからちょっと違和感。
しかも、変数に関数を代入するみたいな文とか出てくるし。
何が起きているのかさっぱりです。
とりあえず、形だけはできたので、あとは細かいバグを潰すことと、実際にサーバを建てることですが、父に聞いてみるとサーバを建てる気はないらしい。
でも、外部の無料のサービスでjsが自由に使えるところなんてあったっけな?
とりあえず、家に戻ったら仮想マシンでサーバを立ててみて、うまく言ったら父を言いくるめてサーバマシンを買ってもらおうかなぁと考えているので頑張ってみたいと思います。
そして、軽量言語を使いこなしている方々を尊敬しますわ。
子「Javaとjavascriptはインドとインドネシアぐらいちがう」
このネタのインドとインドネシアの例えはうまいなぁと思って感動していたわけですが、どうやらネタにとどまってくれなかったようで。
お盆に実家に帰ったら父親が突然
「ホームページ作ってよ」
と行ってきたわけですね。
ほんとにわけわからないですよね。
とは言いつつ、サーバ運用はやってみたかったのでこれはうまく行けばサーバマシンを買ってもらえるかなとかそういった魂胆でとりあえず着手。
話を聞いてみるとノリで言ってみたところがあるみたいで、仕様が確定していないんですね。
このページを真似てみたいと見せられたサイトがあったので、とりあえずそれを参考にしようかと思ったのですが、HTMLを覗いてみると秘伝のたれ状態。
tableを幾重にもしていてスタイルが構築されていたので、とりあえずスタイルはCSSに投げることに。
ヘッダとナビとフッタを固定して記事だけ入れ替えるにはcgiやphpかなとも思ったのですが、実家に持ってきたノートPCは貧弱リソースなので仮想マシンを作ってサーバをあれこれいじることはできそうにない。
そこで、javascriptを使ってみることに。
Get引数を使って、articleの内部を書き換えるという処理をすることに。
しかし、普段CやC++を使っているので、軽量言語にはあまり馴染みがなく。
動的型付やコンパイラがないことにかなり戸惑いを覚えました。
あと、関数の呼び出しに苦戦すると思いませんでした。
setTimeout(function(),1000);
なんでこれで動かないかなぁと悩み、解決するのに半日かかりました。
setTimeout('function()',1000);
シングルコーテーションでくくるのね。
しかも、jsってダブルコーテーションとシングルコーテーションの違いがあんまりないのね。
文字列と文字定数って印象があるからちょっと違和感。
しかも、変数に関数を代入するみたいな文とか出てくるし。
何が起きているのかさっぱりです。
とりあえず、形だけはできたので、あとは細かいバグを潰すことと、実際にサーバを建てることですが、父に聞いてみるとサーバを建てる気はないらしい。
でも、外部の無料のサービスでjsが自由に使えるところなんてあったっけな?
とりあえず、家に戻ったら仮想マシンでサーバを立ててみて、うまく言ったら父を言いくるめてサーバマシンを買ってもらおうかなぁと考えているので頑張ってみたいと思います。
そして、軽量言語を使いこなしている方々を尊敬しますわ。
2014年8月12日火曜日
ubuntuに壁紙を追加してみた
ubuntuの壁紙が
/usr/share/backgrounds/
に入っているから、そこに追加すればいいんじゃね?
って思って追加してみたんですが、
設定→外観→背景
のところにないんですよね...
なんでだろう?と思って調べてみると
~/.backgrounds.xml
を編集しろとか、設定のところに画像をドラッグ&ドロップしろとか書いてあるんですよ...
$ ls -a ~/
で見てみると、そんなファイルねぇよ!ってなったんですが、参考にしていたページを見てみると2010年。そりゃ違ってるわな。
で、いろいろ調べてみたら
/usr/share/gnome-background-properties/trusty-wallpapers.xml
を編集すればいいらしい。
というわけで、見様見真似で書いてみたらできたー!
できたから何だって話ですけどねー。
何かの参考になれば幸いです。
/usr/share/backgrounds/
に入っているから、そこに追加すればいいんじゃね?
って思って追加してみたんですが、
設定→外観→背景
のところにないんですよね...
なんでだろう?と思って調べてみると
~/.backgrounds.xml
を編集しろとか、設定のところに画像をドラッグ&ドロップしろとか書いてあるんですよ...
$ ls -a ~/
で見てみると、そんなファイルねぇよ!ってなったんですが、参考にしていたページを見てみると2010年。そりゃ違ってるわな。
で、いろいろ調べてみたら
/usr/share/gnome-background-properties/trusty-wallpapers.xml
を編集すればいいらしい。
というわけで、見様見真似で書いてみたらできたー!
できたから何だって話ですけどねー。
何かの参考になれば幸いです。
2014年6月28日土曜日
dmenuが便利だった。
テストも一段落したので、久しぶりにPCの環境をいじってみようかなぁなんて思い立ちました。
先日、大学で学内LANに接続しようとしたんですが、証明書をうまくもってこれずに入れず..
無線LANの設定はGUIからしか行ったことがないのですが、xmonadを使うならそれじゃ行けないなと思いまして、いろいろ調べていたんですね。
ネット上にはvimmerもいるようで喜んでいたのですが、偶然みつけたのがdmenuだったのです。
さっそくインストール。
$sudo apt-get install dmenu
で、起動なんですが、xmonadで<mod-p>を押すみたいです。(modはaltキーがデフォルトかな)
アプリケーションの起動になかなか便利。
いままでは<mod-S-Enter>でターミナルを立ち上げて、そこからアプリを起動していたのですが、これはなかなか便利。
どのように便利かは使えばわかると思います。
みなさんもぜひ試してみてください!
先日、大学で学内LANに接続しようとしたんですが、証明書をうまくもってこれずに入れず..
無線LANの設定はGUIからしか行ったことがないのですが、xmonadを使うならそれじゃ行けないなと思いまして、いろいろ調べていたんですね。
ネット上にはvimmerもいるようで喜んでいたのですが、偶然みつけたのがdmenuだったのです。
さっそくインストール。
$sudo apt-get install dmenu
で、起動なんですが、xmonadで<mod-p>を押すみたいです。(modはaltキーがデフォルトかな)
アプリケーションの起動になかなか便利。
いままでは<mod-S-Enter>でターミナルを立ち上げて、そこからアプリを起動していたのですが、これはなかなか便利。
どのように便利かは使えばわかると思います。
みなさんもぜひ試してみてください!
2014年3月31日月曜日
僕がVim中毒者になるまで
はじめに
プログラマにとって相棒とも言える存在であるエディタ。Sakura 秀丸、SublimeText, TeraPad, notepad++, gedit, Emacs, Vim,nanoなど、たくさんのエディタが存在します。
そんな中でも、今の俺のお気に入りにエディタはVim←タイトル見りゃわかるわ
まずはじめに、俺のエディタ履歴を書いてみたいと思います。
| 2010年4月 | 授業でプログラムを初めて使う。言語はC。授業ではTerapadを使っていたが、家族共用のPCしか持っていなかった俺はメモ帳でコーディングする。 |
| 同年8月 | 父に頼んでTeraPadをインストールしてもい、TeraPadを使うようになる。 |
| 2011年3月 | PHPをいじるようになる。Sakuraエディタと出会うも、そんなに使わず。 |
| 2012年10月 | Linux(Ubuntu)を初めて使う。geditと出会い使いはじめる。windowsでは相変わらずTeraPad。 |
| 2013年1月 | Notepad++と出会う。スペースでインデントを取る人間なのでインデント崩れが気に食わないが便利なのでwindowsでは使う。 |
| 2013年3月 | 研究室のUbuntuを破壊し、先生にviエディタを教えてもらう。使いにくいエディタだと思った。 |
| 2013年4月 | Windows版のgeditがあることを知る。晴れてgedit厨となる。 |
| 2014年1月 | マウスレスでコーディングをしようとEmacsを使う。慣れれば奇跡的なコーディングが出来るというあこがれを糧に頑張る |
| 1日後 | Vimの存在を知り、そちらに移行する。こっちのほうが相性がいい気がしたというただそれだけの理由で。 |
| 2014年3月31日 | この記事を書いている。今は立派なVim中毒者だ。 |
僕がVimに惹かれたきっかけとなった記事がこれだ!
Vimと出会った頃の俺はgedit厨であったため、やろうとしていることはまさにこの人と同じなのだ。
しかも、この人の文章の書き方、なかなか気に入っている。
ちなみに、Vimを知ったきっかけはUbuntu Serverを使ったことである。
今までは
$vi
って打つとUbuntuの標準でインストールされているvim-tiny(であってるよね?)が起動されていて、これの機能が少なくて使いにくいのなんのって。
これがUbuntuServerではvimが起動される。
色分けされていて見やすいなと思ったので、
"vi 色分け"でぐぐったら、どうやらviとvimというのがあるらしいと知ったのである。
そして、"vim 機能"でググってこのブログに出会ったというわけである。
Vimに対する認識もこの著者と同じで、この人がやったとおりにやればVimを使えると思った具合である。
実際、Vimを使いこなすまでの手順が具体的に書いてあり、すごくわかりやすい。
このブログの中で紹介されているこの記事の訳も言葉の選び方のセンスをとても気に入っている。
それより何より、わかりやすい。
さて、これで俺も晴れてVimデビューを果たしたわけだが、使いにくいのなんのってw
だいたい、ESCが遠い。
それで、使い始めたのがCtrl + [。
これもESCと同様の動作をしてくれるが、ESCを押すよりも大きく手を動かさなくて済むので重宝している。
はじめのうちはhjklを連打するのに必死で。
インサートモードでコマンド打ってみたりw
まぁ、しゃあないよね。
そして、このブログ中に紹介されている動画
でも紹介されているように、VimってUSキーボードで使うように設計されてるんじゃね?って変なことを考えだしてしまったため、とてもUSキーボードが欲しくなりました。←この頃には$とか0とかの移動をするようになったためカーソルの連打数も減りました。
また、動画中で紹介されているcitとかci",cwを使うようになり、Vimってちょっと便利かもって思い始めました。
そしてVim中毒者へ
そんな時に出会ってしまった記事が日本語キーボードを英字配列風にするである。
そして、この記事を理解するにあたって同時に参考にしたのがXmodmapでお好みのキーバインドである。
これらのお陰でVimを何倍心地よく使えたのかわからない。
それと同時に、HHKのUS配列のキーボードがすごく欲しくなってしまった。
この配列である。カーソルキーが無い上にEscキーが近くにある。Ctrlキーも押しやすい。
まさにVimmerのためにあるキーボードではないかと思ってしまったのである。
この頃から、僕は研究室で「こいつ怖い」と言われ始めるようになったのである。
更に僕はVimを使い続け、ついにExcelでhjklを連打し、間違えたと思ったらCtrl + [を押すようになったのである!
これは立派なVim病の症状である。
まず手始めに使い始めたのがvichromeである。
これはChromeの拡張機能で、要はChromeをVimっぽくするってやつである。
そして、僕にトドメをさしたのはこの記事だろう。
Vim以外でVimする
ちなみに、これを見つける数日前にHappy Hacking Keyboard Liteを餞別として頂いたのである。
このキーボード、カーソルキーがFnを押しながらであれば使えるが、通常は使えないのでVim以外のエディタではイライラの原因以外の何物でも無いことを発見してしまったのである。
窓嫌いではあるが、Excel VBAでプログラミングしていた時に、エディタの仕様が違うとイライラして仕方がなかったので一度Vimで書いてコピペという非効率的なことをしていた時に出会ってしまった。
これ、マジで便利。
各ソフトごとにいちいちVimライクにするプラグインを入れなくていいし、そもそもプラグインが存在しない奴すらVimライクにできるのである。
↑これを後輩に教えたら、Vimmerやばいって返ってきたw
Vim中毒者になって思うこと
Vim中毒者になり始めの頃に
Emacsユーザが「実践Vim」を読んだ感想
という記事を読んだ。
現在は、この記事以上に最高のレビューは無いのでは無いかと思っている。
僕は、この記事を読んでいこう"."コマンドを多様することになり、そのちっぽけな点の威力に驚愕している。
また、この記事で触れられていますが、「え、そこへまず移動するの」といったように、EmacsユーザとVimユーザではカーソル移動ですら感覚が違います。
「Emacsでカーソルを動かすとき, 1文字単位かword単位か, シンボル単位で目を動かして移動を行っています. それは Emacsがそのような移動を提供をしているからだということに気付かされました.」とこの方も書いていますが、コーディングの時の思考がエディタによって形成されていくんだなと感じました。
先日、この事の意味を痛感する出来事がありました。
研究室の引き継ぎで俺が作ったヘッダファイルの使い方を教えるためにプログラムの簡単な練習問題をやってもらいました。
geditを使ってコーディングしている後輩の画面を見ていたのですが、感覚が全然違うんですよね。
今回使ったのが行列演算のプログラムなのですが、行列を初期化するとき、その後輩は
obj.setMatrix(0,0,1);
obj.setMatrix(0,1,2);
obj.setMatrix(0,2,3);
obj.setMatrix(1,0,4);
obj.setMatrix(1,1,5);
obj.setMatrix(1,2,6);
obj.setMatrix(2,1,8);
obj.setMatrix(2,2,9);
これを書くのに、まず
obj.setMatrix(0,0,1);
を書き、それをコピペして8回貼り付ける。
この時点でvimと違うのはC-pを連打しなければならない点です。
まず、連打ということに大きな違和感を覚えました。
次に、数字を変更していくために一つづつ消して変えていく。
当たり前っちゃ当たり前ですが、VimmerとしてはC-aやC-xが無いことに煩わしさを覚えますよね。
さて、次にVimでこれを実行する方法ですが、
obj.setMatrix(0,0,1);
と記述するまでは一緒。
次に、qaYp$hh<C-a>hh.q
と入力し、2行目が完成します。
更にそのまま@aと打てば3行目も完成します。
改行は普通に入れときます。
次に先頭の行に戻り、
qa4Y3jp$hh<C-a>4h.j.4l.j.4h.2k0q
って打てば次の三行が出来上がりです。
↑5,6,7行目の処理が重複してるからもっといいのがあるかも
残りの3行は@aって打てば出来上がり。
Vimなら行数や列数の変更があってもこの機能でなんとでもできます←そもそも、配列を用意せずにこれを行うことはおすすめしませんが。
このように、geditを使っている時とは「思考」のレベルで違うんです。
編集に対する考え方が違う。
Vim中毒とは、単に手がVimの動きをしてしまうだけでなく、Vimに思考を支配されることではないのかなと感じています。
2014年3月30日日曜日
yamyで窓でもVimる-part2-
前回、Vimライクな動作の仕様を大雑把に(厳格に決めてないところはエンジニアとして致命的だと思うんだ)決めたわけですが、今回はそれを実装すべく、具体的に設定ファイルを書いていこうと思います。
まず、ファイル名は.mayuならなんでも良さそうなのでmyVim.mayuにしました。
そして、前回同様、Vimedit.mayuを参考に書いていきましょう。
まず、モードなんですが、ロック機能を使います。
L0 Normal Mode
L1 Insert Mode
L2 Overwrite Once
L3 Overwrite Continously
L4 Character-wise Visual Mode
L5 Block-wise Visual Mode
L6 Line-wise Visual mode
にしました。
ここまでパクって怒られないものかと...
ちなみに言いますと、Overwrite Onceを&Prefixを使って再現しようとして失敗しました。
keymap2 OverwirteOnce : Global
key L0-*S-i = Delete *S-i #a~z,数字キー、記号キーも同様に定義してあるよ!
keymap Global
key L0-r = &Prefix(OverwriteOnce)
key L0-i = &Toggle(Lock1,on)
なんて書くと、一件よさそに見えるのですが、
abcdefg
のcとdの間でriって押すとするじゃないですか、すると
abciefg
ってなってくれるところまでは嬉しいのですが、本来はここでノーマルモードでなきゃいけないのですがインサートモードになってしまうんです。
この問題が解決できずに結局vimedit.mayuを参考にする結果となりました。
ちなみに、L0はVimモードのON,Offも兼ねるようにしてあります。
VimモードのOn,Offの切り替えにはAlt + 左ダイヤモンドキーを割り当てました。右ダイヤモンドキーはWindowsキーとして使います。
また、左ダイヤモンドキーを単独で押した場合にはL0~L9のすべてをOffにするようにしました。
すべてのロックを解除したいときに助かるかなと。
次に、と言ってもまたVimedit.mayuをパクるだけですが、安全のためにすべてのキーを無効にするんだそうです。
とは言っても、挿入モードと上書きモードはそのまま出力されたほうが嬉しいので、
key L0-~L1-~L2-~L3-*a = &Ignore
と言った感じで記述していきました。
そして、次に書いたのがキーでバッグです。
何がL0~L9のどれがOnでどれがOffかわからない時に重宝します。
一度、左ダイヤモンドキーのキーコードを間違えたがためにL0がOnになりっぱなしの自体に陥りましたが、この機能に救われて何とか原因を発見することができました。
key ~L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_0 = Space S-L o c k S-O f f _0 Space
key *L0-~L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_1 = Space S-L o c k S-O f f _1 Space
key *L0-*L1-~L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_2 = Space S-L o c k S-O f f _2 Space
key *L0-*L1-*L2-~L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_3 = Space S-L o c k S-O f f _3 Space
key *L0-*L1-*L2-*L3-~L4-*L5-*L6-*L7-*L8-*L9-C-S-_4 = Space S-L o c k S-O f f _4 Space
key *L0-*L1-*L2-*L3-*L4-~L5-*L6-*L7-*L8-*L9-C-S-_5 = Space S-L o c k S-O f f _5 Space
key *L0-*L1-*L2-*L3-*L4-*L5-~L6-*L7-*L8-*L9-C-S-_6 = Space S-L o c k S-O f f _6 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-~L7-*L8-*L9-C-S-_7 = Space S-L o c k S-O f f _7 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-~L8-*L9-C-S-_8 = Space S-L o c k S-O f f _8 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-~L9-C-S-_9 = Space S-L o c k S-O f f _9 Space
key L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_0 = Space S-L o c k S-O n _0 Space
key *L0-L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_1 = Space S-L o c k S-O n _1 Space
key *L0-*L1-L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_2 = Space S-L o c k S-O n _2 Space
key *L0-*L1-*L2-L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_3 = Space S-L o c k S-O n _3 Space
key *L0-*L1-*L2-*L3-L4-*L5-*L6-*L7-*L8-*L9-C-S-_4 = Space S-L o c k S-O n _4 Space
key *L0-*L1-*L2-*L3-*L4-L5-*L6-*L7-*L8-*L9-C-S-_5 = Space S-L o c k S-O n _6 Space
key *L0-*L1-*L2-*L3-*L4-*L5-L6-*L7-*L8-*L9-C-S-_6 = Space S-L o c k S-O n _6 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-L7-*L8-*L9-C-S-_7 = Space S-L o c k S-O n _7 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-L8-*L9-C-S-_7 = Space S-L o c k S-O n _8 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-L9-C-S-_9 = Space S-L o c k S-O n _9 Space
これは便利でした。
次に記述したのはEscとかCtrl + [を押した時にノーマルモードに戻る支持。
key L0-*ESC = &Toggle(Lock1,off) &Toggle(Lock2,off) &Toggle(Lock3,off) &Toggle(Lock4,off) &Toggle(Lock5,off)
key L0-C-*LeftSquareBracket = &Toggle(Lock1,off) &Toggle(Lock2,off) &Toggle(Lock3,off) &Toggle(Lock4,off) &Toggle(Lock5,off)
次に、ノーマルモードでの命令をテキトーに書いてみましょう。
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = Home
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = End
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-h = Left
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-j = Down
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-k = Up
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-l = Right
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-y = C-c
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-y = Up End S-Down S-End C-c Right
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-p = C-v
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-p = Up End C-v
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-x = Delete
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-f = PageDown
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-b = PageUp
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-d = &Variable(0,10) &Repeat((Up))
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-u = &Variable(0,10) &Repeat((Down))
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-u = C-z
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-r = C-y
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-Tab = Space Space Space Space
keymap2 DeletePre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = S-End C-x
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = S-Home C-x
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-d = Up End S-Down S-End C-x
keymap2 LeftIndentPre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Comma = Home &Variable(0,4) &Repeat((Delete))
keymap2 RightIndentPre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Period = Home &Variable(0,4) &Repeat((Space))
keymap2 ChangePre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = S-End C-x &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = S-Home C-x &Toggle(Lock1,on)
keymap Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-d = &Prefix(DeletePre)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Comma = &Prefix(LeftIndentPre)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Period = &Prefix(RightIndentPre)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-c = &Prefix(ChangePre)
ただこれだけ。
大したことはありませんね。
あとは、コロンで始まる命令たちをどうしてあげるかですが、とりあえず放置する方向で。
次に、モードの切り替えはこんなもんで大丈夫でしょうか?
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-*S-i = &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-o = End Enter &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-o = Home Enter Up &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-*S-a = &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-r = &Toggle(Lock2,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-r = &Toggle(Lock3,on)
インサートモードは多分何も記述しなくても大丈夫なのでは無いかと思うんですがどうなんでしょうね?
次に、上書き(1回)モードですが、
右辺をDelete *S-a &Toggle(Lock2,off)みたいにすれば大丈夫なんじゃないかな。
もう一個の方の上書きモードは最後の&Toggleをなくすことと、
ESC or Ctrl + [が押された時に&Toggle(Lock3,off)を発生させればいいのかなと。
あとはVisualモードですが、どうやるんだろうこれ(´・ω・`)
せっせとVimedit.mayuを参考にします。
それにしても、この設定ファイル綺麗だなぁと。
俺の作ってるファイルのベタ書き具合がひどいのなんのってwww
まぁ、とりあえずは動けばいいやで行くので。
矩形選択は...TeraPadのショートカットキーらしい。
なので実装しない方向で。
そして、基本的にノーマルモードの動きにシフトをつけているだけみたいなので、せっせとコピペして完成!
しかし、こんな設定ではVimライクとはなかなか言えないですね。
回数指定でコマンド実行とか、.コマンドが使えないあたりはなんというか...
しかも、矩形選択からの挿入ができないのも辛い。
やっぱりVimって優秀なんですよ。
しばらくはこれで使ってみて、見えてきた改善点を修正しながらバージョン2,バージョン3と作っていこうかなと思います。
最後に触れておきますが、今回俺が頑張って作ったように書いていますけれども、基本的にvimedit.mayuのパクリなので。
このブログの方には感謝です。
まず、ファイル名は.mayuならなんでも良さそうなのでmyVim.mayuにしました。
そして、前回同様、Vimedit.mayuを参考に書いていきましょう。
まず、モードなんですが、ロック機能を使います。
L0 Normal Mode
L1 Insert Mode
L2 Overwrite Once
L3 Overwrite Continously
L4 Character-wise Visual Mode
L5 Block-wise Visual Mode
L6 Line-wise Visual mode
にしました。
ここまでパクって怒られないものかと...
ちなみに言いますと、Overwrite Onceを&Prefixを使って再現しようとして失敗しました。
keymap2 OverwirteOnce : Global
key L0-*S-i = Delete *S-i #a~z,数字キー、記号キーも同様に定義してあるよ!
keymap Global
key L0-r = &Prefix(OverwriteOnce)
key L0-i = &Toggle(Lock1,on)
なんて書くと、一件よさそに見えるのですが、
abcdefg
のcとdの間でriって押すとするじゃないですか、すると
abciefg
ってなってくれるところまでは嬉しいのですが、本来はここでノーマルモードでなきゃいけないのですがインサートモードになってしまうんです。
この問題が解決できずに結局vimedit.mayuを参考にする結果となりました。
ちなみに、L0はVimモードのON,Offも兼ねるようにしてあります。
VimモードのOn,Offの切り替えにはAlt + 左ダイヤモンドキーを割り当てました。右ダイヤモンドキーはWindowsキーとして使います。
また、左ダイヤモンドキーを単独で押した場合にはL0~L9のすべてをOffにするようにしました。
すべてのロックを解除したいときに助かるかなと。
次に、と言ってもまたVimedit.mayuをパクるだけですが、安全のためにすべてのキーを無効にするんだそうです。
とは言っても、挿入モードと上書きモードはそのまま出力されたほうが嬉しいので、
key L0-~L1-~L2-~L3-*a = &Ignore
と言った感じで記述していきました。
そして、次に書いたのがキーでバッグです。
何がL0~L9のどれがOnでどれがOffかわからない時に重宝します。
一度、左ダイヤモンドキーのキーコードを間違えたがためにL0がOnになりっぱなしの自体に陥りましたが、この機能に救われて何とか原因を発見することができました。
key ~L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_0 = Space S-L o c k S-O f f _0 Space
key *L0-~L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_1 = Space S-L o c k S-O f f _1 Space
key *L0-*L1-~L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_2 = Space S-L o c k S-O f f _2 Space
key *L0-*L1-*L2-~L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_3 = Space S-L o c k S-O f f _3 Space
key *L0-*L1-*L2-*L3-~L4-*L5-*L6-*L7-*L8-*L9-C-S-_4 = Space S-L o c k S-O f f _4 Space
key *L0-*L1-*L2-*L3-*L4-~L5-*L6-*L7-*L8-*L9-C-S-_5 = Space S-L o c k S-O f f _5 Space
key *L0-*L1-*L2-*L3-*L4-*L5-~L6-*L7-*L8-*L9-C-S-_6 = Space S-L o c k S-O f f _6 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-~L7-*L8-*L9-C-S-_7 = Space S-L o c k S-O f f _7 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-~L8-*L9-C-S-_8 = Space S-L o c k S-O f f _8 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-~L9-C-S-_9 = Space S-L o c k S-O f f _9 Space
key L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_0 = Space S-L o c k S-O n _0 Space
key *L0-L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_1 = Space S-L o c k S-O n _1 Space
key *L0-*L1-L2-*L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_2 = Space S-L o c k S-O n _2 Space
key *L0-*L1-*L2-L3-*L4-*L5-*L6-*L7-*L8-*L9-C-S-_3 = Space S-L o c k S-O n _3 Space
key *L0-*L1-*L2-*L3-L4-*L5-*L6-*L7-*L8-*L9-C-S-_4 = Space S-L o c k S-O n _4 Space
key *L0-*L1-*L2-*L3-*L4-L5-*L6-*L7-*L8-*L9-C-S-_5 = Space S-L o c k S-O n _6 Space
key *L0-*L1-*L2-*L3-*L4-*L5-L6-*L7-*L8-*L9-C-S-_6 = Space S-L o c k S-O n _6 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-L7-*L8-*L9-C-S-_7 = Space S-L o c k S-O n _7 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-L8-*L9-C-S-_7 = Space S-L o c k S-O n _8 Space
key *L0-*L1-*L2-*L3-*L4-*L5-*L6-*L7-*L8-L9-C-S-_9 = Space S-L o c k S-O n _9 Space
これは便利でした。
次に記述したのはEscとかCtrl + [を押した時にノーマルモードに戻る支持。
key L0-*ESC = &Toggle(Lock1,off) &Toggle(Lock2,off) &Toggle(Lock3,off) &Toggle(Lock4,off) &Toggle(Lock5,off)
key L0-C-*LeftSquareBracket = &Toggle(Lock1,off) &Toggle(Lock2,off) &Toggle(Lock3,off) &Toggle(Lock4,off) &Toggle(Lock5,off)
次に、ノーマルモードでの命令をテキトーに書いてみましょう。
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = Home
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = End
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-h = Left
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-j = Down
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-k = Up
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-l = Right
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-y = C-c
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-y = Up End S-Down S-End C-c Right
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-p = C-v
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-p = Up End C-v
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-x = Delete
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-f = PageDown
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-b = PageUp
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-d = &Variable(0,10) &Repeat((Up))
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-u = &Variable(0,10) &Repeat((Down))
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-u = C-z
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-C-r = C-y
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-Tab = Space Space Space Space
keymap2 DeletePre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = S-End C-x
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = S-Home C-x
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-d = Up End S-Down S-End C-x
keymap2 LeftIndentPre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Comma = Home &Variable(0,4) &Repeat((Delete))
keymap2 RightIndentPre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Period = Home &Variable(0,4) &Repeat((Space))
keymap2 ChangePre : Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-_4 = S-End C-x &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-_0 = S-Home C-x &Toggle(Lock1,on)
keymap Global
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-d = &Prefix(DeletePre)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Comma = &Prefix(LeftIndentPre)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-Period = &Prefix(RightIndentPre)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-c = &Prefix(ChangePre)
ただこれだけ。
大したことはありませんね。
あとは、コロンで始まる命令たちをどうしてあげるかですが、とりあえず放置する方向で。
次に、モードの切り替えはこんなもんで大丈夫でしょうか?
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-*S-i = &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-o = End Enter &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-o = Home Enter Up &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-*S-a = &Toggle(Lock1,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-r = &Toggle(Lock2,on)
key L0-~L1-~L2-~L3-~L4-~L5-~L6-~L7-~L8-~L9-S-r = &Toggle(Lock3,on)
インサートモードは多分何も記述しなくても大丈夫なのでは無いかと思うんですがどうなんでしょうね?
次に、上書き(1回)モードですが、
右辺をDelete *S-a &Toggle(Lock2,off)みたいにすれば大丈夫なんじゃないかな。
もう一個の方の上書きモードは最後の&Toggleをなくすことと、
ESC or Ctrl + [が押された時に&Toggle(Lock3,off)を発生させればいいのかなと。
あとはVisualモードですが、どうやるんだろうこれ(´・ω・`)
せっせとVimedit.mayuを参考にします。
それにしても、この設定ファイル綺麗だなぁと。
俺の作ってるファイルのベタ書き具合がひどいのなんのってwww
まぁ、とりあえずは動けばいいやで行くので。
矩形選択は...TeraPadのショートカットキーらしい。
なので実装しない方向で。
そして、基本的にノーマルモードの動きにシフトをつけているだけみたいなので、せっせとコピペして完成!
しかし、こんな設定ではVimライクとはなかなか言えないですね。
回数指定でコマンド実行とか、.コマンドが使えないあたりはなんというか...
しかも、矩形選択からの挿入ができないのも辛い。
やっぱりVimって優秀なんですよ。
しばらくはこれで使ってみて、見えてきた改善点を修正しながらバージョン2,バージョン3と作っていこうかなと思います。
最後に触れておきますが、今回俺が頑張って作ったように書いていますけれども、基本的にvimedit.mayuのパクリなので。
このブログの方には感謝です。
登録:
投稿 (Atom)



