2014/01/19

進数計算のAndroidアプリ bin.Calc を公開しました

このブログでAndroidの話ははじめてかもしれないですね。
今日、"bin.Calc"という進数計算のAndroidアプリを公開しました。


bin.Calcの特徴は、シンプルで実用的かつAndroidらしいUIデザインを目指した事と
小数に対応している事、進数変換の手順を表示できる事です。


進数変換の手順表示はあとづけ感満載ですが (^^;)

実はbin.Calcのコードを書き始めたのは2012年の秋だったのですが、
途中、他の開発に取り組んでいて放置していた時期もあり...右往左往があって...
先日からまた少しずつコードを書き足し、やっと公開することができました。
しばらく間をあけても必ずいつか形にする。それを一つの目標にしています(笑)

テストはしていますが、もしかしたらまだ不具合が隠れているかもしれません。
また、タブレットへの最適化や横画面への対応、計算精度など
不足している点も少なからずあるとは思います。
皆さまからのフィードバックをお待ちしております m(_ _)m
(Google Playや、このブログ、Twitter、... どこからでも構いません。)

オープンソース・ソフトウェアとして公開しておりますので
Pull Requestもお待ちしております: GitHub - bin.Calc_android

bin.Calc
https://play.google.com/store/apps/details?id=info.ohgita.bincalc_android

2013/09/23

YAPC::Asia Tokyo 2013 に参加してきました

9月20日〜23日に開催された "YAPC::Asia Tokyo 2013" に参加してきました。
YAPCは、PerlをはじめとするLL(Lightweight Language)のお祭りです。
尚、今回の会場は、慶應義塾大学 日吉キャンパスでした。
YAPCと関係ありませんが、日吉キャンパスは大きいキャンパスで綺麗ですね。
学内にローソンとか薬局とかバーとか、色々あって羨ましいですw


実は私自身、YAPCにはいつか参加したいなーと思っていながら...
今回が初参加だったりします。

また、Perlを始めたばかりの友人たちも引き連れて行ってきました。
学生なので、無料で参加させていただくことができました。

朝一から移動の都合で少し遅れつつ会場入りしましたが..
皆さん、PCを開きつつ静かに話を聞いていらっしゃいました。

関係ないと思うけれど、Mac率が高かったですw
YAPCといえば、やはり、まずはトークですね!
初心者向けのトークから、技術的・ディープなトークまで...何でもありな感じが楽しかったです。
PerlやLLに一見関係のないトークもあったり。英語のトークも頑張って聞いてみましたww
@papixさん、@yusukebeさん、@goccyさん、... 特に面白く興味深いトークをありがとうございました。
”特別座談会「Rubyの良いところ語ってください 〜そんなPerlで大丈夫か?〜」"の様子。
いつイスの投げ合いが始まっちゃうんだろうとドキドキしましたが、大丈夫でしたw
適材適所。それにPerlだって影響しあって進化し続けていますよね。
ネタありマジメあり...両日のLTも楽しかったです!
(そういえば...ドラ娘さんの居るLT、はじめて実際に見ましたw
その日の都合で5分という持ち時間が3分に短縮...!! となってしまうのもLTの醍醐味ですかねw
)

ノベルティも色々もらえました♪ (一部別途いただいたものも。)
YAPC::Asia Tokyo 2013でいただいたノベルティの数々。
YAPC Tシャツ, タオル, mixiさんのストラップ, Planning Porker,
DeNAさんのうちわ, GaiaX さんの水, 各種シール,  ファイル, など...
こんなにもらえるとは思っていませんでしたw
さくらのクラウドの無料券も入っていました (...これはOSCで既に頂いたので使いませんが。)
今回は(図々しく)、20日に行われた お昼の"ランチセッション"と、"懇親会"にも参加させていただきました。

まず、ランチセッションは、スポンサー企業 (Six Apart さん、Microsoft さん)のお話を聞きながら、お弁当をいただくという企画です。学生には特にありがたいです。
お話を伺いながらお弁当をいただきました。美味しかったです♪
Six Apartさんといえば、Movable Type。使いこなしていきたいものですね!
また、懇親会では、スポンサー企業 (DeNA さん)による出資で、無料で会食がいただけるという...。リッチでびっくりしました。
(懇親会を含め、今回は何かと興奮して写真を撮り忘れてしまいました(^^;))
誰に話しかけようかなーなどと思いつつ、軽いコミュ症っぷりが発揮されかけてしまったのですが(笑)・・・
でも、他のエンジニア/非エンジニアの社会人の参加者や、学生さん、またフォロワーさんとも個別にお話することができ、とても有意義に時間を過ごせました。

今回のYAPCに参加して。
自分個人の今後や趣味においても、プロジェクトにおいても、モチベーションや今後やるべきことのヒントが得られたように思います。

同行してくれた友人たちにも、PerlとYAPCの魅力が理解できたと思いますし、学び得られるものがあったはずです。

早速、友人たちと立ち上げている開発プロジェクトでも、
トークを聞いて学んだことや気づいたこと(マネジメントのこと、開発のこと、その他諸々...)を存分に取り入れていきたいです。
より良いチームのコミュニケーションとかも、まさに必要なことだったりして。

次回は、是非とも、ボランティアスタッフか、トーク/LTとして参加したいです!
ああ...来年が待ち遠しい...(><)/ YAPC::Tohokuも楽しみにしています。

スタッフの皆さん、トークしてくださった皆さん、お話してくださった皆さん、企業スポンサーの皆さん...
総じて、Perl Mongerの皆さん、ありがとうございました m(_ _)m ♪!

2013/09/09

Linuxの /var をルートから別パーティションに移動した

Arch Linuxのルート(/)パーティションの容量が足りなくなってきました。
nacl_sdkのアップデートをしようとして気づいたという(^^;)
整理も限界があるので、思い切って、/var を別のパーティションに移しました。
※ /var には、ログファイル、キャッシュ、その他諸々のファイルが保存されます。
消してもいいファイルもあるのですが、いずれにせよ日頃から拡大したいと考えていたので(汗;)
ちなみに /home はインストール時に別パーティションにしておいたのですがw

特にどのLinux環境でも大凡同じで、簡単に行えますが、一応メモしておきます。
ちなみに、 今回は /var ですが、/boot あたりはちょっと追加手順が必要かもしれません。

まずは、LiveCDなどから作業用にLinuxを起動します。
今回は、手元にあった Ubuntu 12.04 (i386) のUSBメモリからブートしました。

早速、GPartedを用いて、/var のための"新しいパーティション"を作成します。
最近は GPartedが標準で入っているんですね。GUIでなんとも便利です。...Windows98でfdiskを使っていたときが懐かしい...。
  • 容量: 20GiB (8〜12GBが最適らしい。参照: Partitioning - ArchWiki)
  • ファイルシステム: ext4
  • デバイス名: /dev/sda9 (今回の場合)
として作成されました。

ここで確認しておきますが、以降、
  • "対象システムのルートパーティション": /dev/sda7
    Arch Linuxのルートパーティション (/)。既存の /var やその他ディレクトリが含まれる。
  • "新しいパーティション":/dev/sda9
    今作成したパーティション。Arch Linuxの新しい /var となる予定。
とします。

次に、"対象システムのルートパーティション"(/dev/sda7)と、
"新しいパーティション"(/dev/sda9)を、それぞれ適当にマウントします。

$ mount /dev/sda7 /mnt/arch-root/
$ mount /dev/sda9 /mnt/arch-var/
今回は以下のようにマウントしました:
  • 対象システムのルートパーティション: /mnt/arch-root/
  • 新しいパーティション: /mnt/arch-var/

次に、対象システムのルートパーティション下にある 既存の "/var" を
"新しいパーティション"下にコピーします。

(パーミッションを維持するようオプションをつけることをお忘れなく.)
$ sudo cp -av /mnt/arch-root/var/* /mnt/arch-var/

既存の /var は、念の為にリネームしてとっておきます。
$ sudo mv /mnt/arch-root/var /mnt/arch-root/var-

次に、"新しいパーティション"のUUIDをコピーして...
$ blkid /dev/sda9
/dev/sda9: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"
さらに、対象システムのルートパーティション下の"/etc/fstab"に項目を追加します。
(新しいパーティションを /var としてマウントするように設定するわけです。)
$ sudo vi /etc/fstab
~~~~
# UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
/dev/sda9  /var  ext4rw,relatime,data=ordered  0  2
~~~~
"<デバイス名> <マウント位置> <オプション> <Dump> <Pass>"
参照: fstab - ArchWiki

あとは再起動して、対象システム(今回は、Arch Linux)を起動します。
問題がなければ、既存の/var- (リネームしたもの)を削除して終わりです♪

p.s.
全然関係ないですが、最近、GitHub上のプロフィールに表示される使用言語が
"Perl, JavaScript, CSS"だったり、"Perl, JavaScript, C"だったり...。
C/C++/Assembly成分ももっと増やして行きたいところです(><;)

2013/08/27

32bit Linux上のperlで64bitを扱う

友人たちと起こしているプロジェクトでのこと。
私の環境は ArchLinux 64bitなどですが、メンバーには Ubuntu 32bit使いが居ます。
先日、プロジェクトで使うデータベースドライバを一部置き換えるために、"Mango"というNon-blockingなMongoDBドライバをcpanでインストールしようとしたところ、"Perl with support for quads is required!" とエラーが表示されて、インストールできなかった...という報告を受けました。

MangoのMakefile.PLを見ると、$Config{use64bitint}が定義されていて、かつ、${longsize}が8以上である必要があるようです。
即ち、64bitモードのperlでなければならないという事ですね。たぶん。
しかし...次からは、事前にもっときちんとチェックしないと(...反省)

さて...。perlは、32bit環境のOSでも、64bitとしてシミュレートができます。
http://search.cpan.org/~rjbs/perl-5.18.1/INSTALL#64_bit_support
ついては、perlをビルドする際に、"-Duse64bitint" または "-Duse64bitall" オプションを付けると良いようです。

perlbrewを用いてビルド&インストールする場合は、以下のように行います。
(以下は、Redhat系での例。Ubuntuの場合は、yumの代わりに、apt-getで"build-essential"をインストールすると良いはず。)
$ sudo yum install glibc-devel.i686 libgcc.i686 make gcc
$ curl -L http://install.perlbrew.pl | bash
$ source ~/perl5/perlbrew/etc/bashrc
$ perlbrew install 5.18.1 -Duse64bitint
$ perlbrew switch 5.18.1
$ echo source ~/perl5/perlbrew/etc/bashrc >> ~/.bashrc
$ source ~/.bashrc

perl -v すると、i686-linux-64int という表示が確認できます。
$ perl -v
This is perl 5, version 18, subversion 1 (v5.18.1) built for i686-linux-64int

Copyright 1987-2013, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

これでとりあえず問題なく、Mangoもインストールすることができるはずです。

2013/08/20

Arduino+Bluetoothシリアル通信によるワイヤレスなLED制御

Arduino Leonardoに Bluetoothモジュールを接続して、
シリアル通信で、ワイヤレスなLED制御 (Lチカ) をしてみました。
Android端末とペアリングして制御することもできます。
とりあえずはそれだけですが、かなり簡単です。(ありがたいことにドキュメントも沢山あります。)



今回用いたモノ:

  • "Arduino Leonardo"
  • "Bluetoothモジュール RBT-001"
    技適取得済みのBluetooth2.0(SPP/GAP/SDAP)モジュールです。
  • "RBT-001用シリアルレベルコンバータ Rev.3"
    Arduinoは3.3/5V、RBT-001は3V駆動なので変換が必要です。
    今回は手軽なこの変換基板を用いました。
    これと同様の基板はRBT-001を取り扱っている各社から出ています。
  • "高輝度5mm青色LED OSUB5111A"
    手持ちのLEDです。
  • "カーボン抵抗 1kΩ"

以下、手順を簡単に説明しておきます。


2013/06/26

Leap Motion on Arch Linux

Leap MotionをArch Linuxで利用する方法です。
Ubuntu向けに提供されているLeap Developer Kitを用います。

※本記事は、2013/06/26現在の情報です。変わらないと思いますが、念のため。
  • 執筆時において、Leap Motionは評価ボードとして一部開発者にのみ配布。また、開発者のみがLeap Developer Kit(ドライバ含)を入手可能。
  • Leap Developer Kit: 0.8.0 5300 Linux (執筆時最新版)
  • OS環境: Arch Linux 64bit (執筆時最新状態) + gnome 3
尚、Leap Developer Kitは、GUIとしてQtを使っているようなので、
Qt環境が必要でしょう...たぶん。(私はインストール済みなので。)

ちなみに...ドライバの動作環境のことに関連して、
同梱のREADMEには次のようなことが書かれています:
Q. How to install on another Linux distro such as CentOS?
A. At this time we are only supporting recent versions of Ubuntu. However, if
you'd like to port the package to another distro you probably have
sufficient tools at your disposal. To view the Debian package, unpack it
with the 'ar' and 'tar' commands and take a look. The 'alien' package
converter mentioned above may also come in handy.
ふむふむ...。ということではじめましょう。

まずは、Leap Developer Kit (Ubuntu向け)をダウンロードします。
(2013/06/26 現在、開発者アカウントでログインしないとダウンロードできません。)

次に、ダウンロードしたアーカイブを展開します。
$ tar zxvf Leap_Developer_Kit_0.8.0_5300_Linux.tar.gz 
$ cd Leap_Developer_Kit_0.8.0_5300_Linux/
$ ls
Examples  Leap-0.8.0-x64.deb  Leap-0.8.0-x86.deb  LeapSDK  README.txt

このように、抽出されたファイルはExamples、LeapSDK、ドライバ(debパッケージ)から構成されます。

このdebパッケージをさらに展開します。
本来であれば、debhelperが使えるはずなのですが、パッケージのコンフリクトで使えなかったため...。
また、alienを使って変換してもいいのですが、単純に展開するだけで良さそうだったので。

$ dpkg -x Leap-0.8.0-x64.deb Leap-0.8.0-x64/
$ cd Leap-0.8.0-x64/
$ ls -lR
.:
合計 8
drwxr-xr-x 3 xxxxxx xxxxxx 4096  6月 11 08:58 lib
drwxr-xr-x 5 xxxxxx xxxxxx 4096  6月 11 08:58 usr

./lib:
合計 4
drwxr-xr-x 3 xxxxxx xxxxxx 4096  6月 11 08:58 udev

./lib/udev:
合計 4
drwxr-xr-x 2 xxxxxx xxxxxx 4096  6月 11 08:58 rules.d

./lib/udev/rules.d:
合計 4
-rw-r--r-- 1 xxxxxx xxxxxx 390  6月  4 11:21 25-com-leapmotion-leap.rules

./usr:
合計 12
drwxr-xr-x 2 xxxxxx xxxxxx 4096  6月 11 08:58 bin
drwxr-xr-x 3 xxxxxx xxxxxx 4096  6月 11 08:58 lib
drwxr-xr-x 3 xxxxxx xxxxxx 4096  6月 11 08:58 share

./usr/bin:
合計 15720
-rwxr-xr-x 1 xxxxxx xxxxxx 2952848  6月 11 08:48 LeapControlPanel
-rwxr-xr-x 1 xxxxxx xxxxxx 2837968  6月 11 08:49 Recalibrate
-rwxr-xr-x 1 xxxxxx xxxxxx 2536248  6月 11 08:48 ScreenLocator
-rwxr-xr-x 1 xxxxxx xxxxxx 2833160  6月 11 08:49 Visualizer
-rwxr-xr-x 1 xxxxxx xxxxxx 4928312  6月 11 08:49 leapd

./usr/lib:
合計 4
drwxr-xr-x 2 xxxxxx xxxxxx 4096  6月 11 08:58 Leap

./usr/lib/Leap:
合計 54300
-rw-r--r-- 1 xxxxxx xxxxxx  2718432  6月 11 08:47 libLeap.so
-rw-r--r-- 1 xxxxxx xxxxxx  3038016  6月 11 08:58 libQtCore.so.4
-rw-r--r-- 1 xxxxxx xxxxxx   523792  6月 11 08:58 libQtDBus.so.4
-rw-r--r-- 1 xxxxxx xxxxxx 11352400  6月 11 08:58 libQtGui.so.4
-rw-r--r-- 1 xxxxxx xxxxxx  3431872  6月 11 08:58 libQtNetwork.so.4
-rw-r--r-- 1 xxxxxx xxxxxx  1042600  6月 11 08:58 libQtOpenGL.so.4
-rw-r--r-- 1 xxxxxx xxxxxx  2631072  6月 11 08:58 libQtScript.so.4
-rw-r--r-- 1 xxxxxx xxxxxx 26316256  6月 11 08:58 libQtWebKit.so.4
-rw-r--r-- 1 xxxxxx xxxxxx  4460008  6月 11 08:58 libQtXmlPatterns.so.4
-rw-r--r-- 1 xxxxxx xxxxxx    73768  6月 11 08:58 libusb-1.0.so.0

./usr/share:
合計 4
drwxr-xr-x 3 xxxxxx xxxxxx 4096  6月 11 08:58 Leap

./usr/share/Leap:
合計 196
drwxr-xr-x 2 xxxxxx xxxxxx  4096  6月 11 08:58 PreferencePane
-rw-r--r-- 1 xxxxxx xxxxxx 50901  6月  4 11:21 app0.dat
-rw-r--r-- 1 xxxxxx xxxxxx 76876  6月  4 11:21 app1.dat
-rw-r--r-- 1 xxxxxx xxxxxx 65515  6月  4 11:21 app2.dat

./usr/share/Leap/PreferencePane:
合計 0
debパッケージの中身(パッケージの定義ファイル等を除く一連のファイル)は、以上のような構造になっていました。

大まかに書くと...
  • usrディレクトリ: バイナリとライブラリ類
  • libディレクトリ: udevのルールファイル
となっています。

では、以上のファイルをシステムにコピーします。
$ sudo cp -ir usr/* /usr/local/
$ sudo cp -ir lib/* /lib/

次に、"plugdev"というグループを作成し、自分のアカウント(xxxx)を"plugdev"グループに所属させます。
$ sudo groupadd plugdev
$ sudo usermod -aG plugdev xxxx
$ exec su -l xxxx

これで完了です。

あとは、Leap Motionを接続し、プログラムを起動するだけです。
$ LeapControlPanel
...これで...動作するはずなのですが、
通知領域のアイコンが黒色のまま、色が変わらない...(汗;)。

うーむ...。現行バージョンでは leapdがデーモンになっていますので、これを実行すると...。
$ leapd
[00:46:49] [Info] WebSocket server started
[00:46:54] [Info] Leap Motion Controller detected: xxxxxxxxxx
[00:46:55] [Info] Processing initialized
動いてるようですね。
ですので、leapdを実行したままの状態で LeapControlPanel を起動してみると...。
$ LeapControlPanel

うまくいきました( ´∀`)b!

また、Visualizerなどもコンソールから起動できます。
$ Visualizer
Leap MotionのVisualizerを起動したところ
以上です♪

p.s.

Arch LinuxのAURに"leap"が登録されていました。
もちろん現時点ではまだ、SDKを誰でもダウンロードできるわけではありませんので、アーカイブの展開を楽にしてくれる程度ですが。
でも、あとちょうど1ヶ月もすると、Leap Motionが一般発売されますね。
どんな世界が待っているのか、楽しみです!

2013/06/23

Arch Linuxからhpのプリンタに直接/ネットワーク接続する (HPLIP)

Arch LinuxなどのLinux環境から、hpのインクジェットプリンタ(複合機)に接続するという話です。直接USB接続したり、ネットワーク接続することができます。

今回接続するhpプリンタは、HP Photosmart 5510 B111a という製品で、
プリンタというか複合機ですが、安いのにタッチパネル&無線LAN搭載(Web管理可能)という代物です。これを家のLAN内に無線LAN接続してあります。
ちなみに、このプリンタはGoogle Cloud Printに対応しているため、普段から印刷するときはクラウド経由で印刷していたりしますが、今回は直接接続して印刷する方法です。
それにしてもhpのプリンタは、音が煩く仕事も力まかせ感があります.....安いけれど。家で使い比べていますが、静音性も丁寧さについては国内メーカーの方が格段に上です。

さて、hpではLinux向けプリンタドライバを オープンソースプロジェクトとして
"HP Linux Imaging and Printing (HPLIP)"という名称で公開しています。
http://h10018.www1.hp.com/wwsolutions/linux/products/printing_imaging/index.html (プリンタ以外にもイメージング/印刷全般ですね。)

Arch Linuxでは、pacmanのextraリポジトリに、この"HPLIP"が含まれています。
https://www.archlinux.org/packages/extra/x86_64/hplip/

従って、pacmanで"hplip"をインストールするだけで使えます。
またGUIの為に"qt4"と"python2-pyqt"を併せてインストールします。
$ sudo pacman -Syu hplip qt4 python2-pyqt

次に、自分のユーザアカウントを"lp"グループに追加して、一旦ログアウトします。
$ sudo usermod -aG lp xxxx
$ logout

その後、"cups"を再起動してから、"hp-setup"を実行します。
$ sudo systemctl restart cups
$ sudo hp-setup

"HP Device Manager"が起動しますので、プリンタと接続する方法を選びます。
USB接続、ネットワーク接続、シリアル接続など...。

今回はLAN接続したプリンタなので、"Network/Ethernet/Wireless ..."を選びます。
さらに...本来はこのまま"Next"しても良いはずですが、プリンタを固定IPアドレスにしてあるので、"Manual Discovery"にチェックを入れ、IPアドレスを入力します (portはそのまま)。 自動よりもこの方が安定するようです。

次に、このようにプリンタ一覧が表示されます。プリンタを選択して"Next"します。

すると、このような画面が表示されます。"Add Printer"をクリックすれば完了です。

CUPSに正しく認識されていれば、このように、
Gnomeの設定画面のプリンタ一覧などにもプリンタが表示されるはずです。
テストページを印刷してみて正しく印刷できるか試してみても良いでしょう。

尚、hp-setupが起動しない場合は...python3で実行されているかもしれません。次のようにpython2で実行してください:
$ python2 /usr/bin/hp-setup
(Arch LinuxではPython3とPython2が共存しているため、このような問題が起きます。
面倒くさければ、python2をデフォルトにしてしまうことをおすすめしますw)


また、hpプリンタの管理は "hp-toolbox" から行えます。
$ sudo hp-toolbox
hp-toolboxを実行したところ。プリンタのインク状態や設定などが行える。



ちなみに...他のLinux(UbuntuやFedora)でhpプリンタを扱いたい場合も同様です。
apt-getやyumから、HPLIPをインストールするだけです。
もしくは、hplipのサイトからパッケージを直接ダウンロードすることもできます。
http://hplipopensource.com/hplip-web/install_wizard/index.html