ソフトウェアとハードウェアの境界

ホビー開発に関する誰得情報満載☆

Raspberry Pi でサーバ構築②(Samba編)

持ち運び用の小さなマウス

僕はMacbookProユーザ、いわゆるマカーでもあるのだが、どこかに出かけるとき、時折Macを持ち運ぶことがある。
仲の良い先輩に呼び出され、「これを修理しろ」だの「HDDを換装しろ」だの言われるのだ。
持ちつ持たれつ、作業後にはめちゃくちゃ美味しいご飯が待っているのでやめられない。
そういう作業をする場合、どうしてもWebの情報が必要になるし、スマートフォンよりは高度なことができるので、PCは必須なのだ。
しかし、実際にMacOSXを起動して利用することはあまりなく、基本的にはWindowsかLinuxBeanを起動している。
Macを買った当初は、もちろんトラックパッドを使っていたし、マウスダサい、マカーはパッド、と思い込んでいた。
PCをヘビーユーズするようになってくると、完全に考え方が変わり、マウス最高、トラックボール最高と今は思っている。
しかし、持ち運びする際には、マウスは結構邪魔になる。
小さい使いやすいマウスはないかなぁ、とずっと探していた。
しかし今朝、職場にて使いやすそうな小さなマウスが落ちているのを発見したので、それを利用することにした。
f:id:tokixy56:20151007231525j:plain

ハードウェア仕様(寸法)
  • 全長:60mm(ケーブル含む)
  • 幅:20mm
  • 高さ(伏せ時):20mm
  • 高さ(起立時):45mm

ケーブルが短いのが難点である。

RPi Sambaの設定

小さく可愛いネズミがいたことに興奮して伝えたかっただけですすみません。
気持ちよくボケたところで、早速本題に入ろう。
前回の記事では、RPiでsshの設定をした。

tokixy56.hatenablog.com

といっても、Linuxユーザを追加、削除しただけなのだが。
今回の記事では、公開鍵ファイルの設定に先立ち、Sambaの設定をする。
公開鍵ファイルの送受信、更に今後のファイルの送受信を簡単にしておきたいので、先に設定をしたいのだ。

sshの設定が終わっている人は、Sambaのインストールより。
まだの人は前回の記事の内容を実施してから、Sambaのインストールをしていただきたい。

Sambaの設定は、基本的にはsshでRPiに接続し、RPi上での作業となる。

それではまずはじめに、Sambaのインストールから。

RPi Sambaのインストール
$ sudo apt-get install samba

インストールが完了したら、続いてSambaの設定ファイルである、/etc/samba/smb.confを編集。

RPi Sambaの設定 /etc/samba/smb.conf
...
...{102行目くらい}
unix password sync = yes
...
...{ファイルの末尾に追加する}
[pi home]
   comment = Users home
   path = /home/{ユーザ名}
   guest ok = no
*** 追記 ***
   read only = no
   writable = yes
*** /追記 ***
   browseable = yes
   valid user = {ユーザ名}
   create mask = 0664
   directory mask = 0775
...

上記の設定を簡単にまとめると以下のようになる。

  • Linuxに既にあるユーザ名とSambaユーザ名が同じ場合、そのパスワードをSyncする。 (Sambaユーザ作成はこの後説明する。)
  • {ユーザ名}ユーザのホームディレクトリをWindowsのネットワークから探すことができるようにする。
  • ゲストはダメ、{ユーザ名}ユーザのみアクセス可能。
  • ファイル作るとき、デフォルトのパーミッション属性はrとw、ディレクトリはrwx。

追記
また、ホームディレクトリにファイルを転送したり、ディレクトリを作成する場合、アクセス権の変更が必要となる。

ホームディレクトリのアクセス権変更
$ cd ..
$ pwd
/home
$ sudo chmod 775 ユーザディレクトリ/

/追記

Sambaの設定自体は、RPiだろうがなんだろうが、ほとんど同じで、バージョンによって多少変わるだけだから、説明はこれくらいにしておくか。
とりあえず、Sambaユーザを作成。

RPi Sambaユーザの追加
$ sudo smbadduser {ユーザ名}
...パスワードを何回か入力...

これでSambaユーザが作成される。
自分で作成したユーザと同じユーザ名とパスワードにしておくのが楽でいい。
ホームディレクトリに直接アクセスするのは、セキュリティ上良くないかもしれないが、今後運用していくのにこの方が便利だからなぁ。
おすすめとは言い難いのだが。
では、Sambaをリスタートして設定終了。

RPi Sambaのリスタート
$ sudo /etc/init.d/samba restart

試しにWindowsXPVista、7の人は、スタートボタンからネットワークをクリックして見よう。
[RASPBERRYPI]があれば、それがRPiのファイルシステムだ。
開くと[pi home]があり、それが{ユーザ名}のホームディレクトリとなる。
Windows8でのネットワークの在り処は、あいどんのー、だ。

Sambaの設定は、こちらの人の記事とかが、きっちり説明してあって非常にわかりやすい。
Linuxで自宅サーバー構築(Sambaの設定)

次回はssh接続の公開鍵の設定をしよう。

今後の目論見RPi編

手書きでまとめてみた。
なんだかんだ言って、ペンで書きたい自分。
f:id:tokixy56:20151008225754j:plain
外出先からスマホでアクセス。
とりあえず、何をするにもRPiで制御する、っていうのが目標だ。
KOZOS on MONIXも更にアップデートしていって、いろんなハードウェアを使えるようにするつもりだ。
LEDや温度センサなど。
その制御、データの取得などを、RPiを介して行う。
ホビーSEここに極まれり。

Raspberry Pi でサーバ構築①(ssh編 公開鍵未設定)

サーバPCを売ってしまった

「外出先から自宅のPCにsshでアクセスできたらかっこいいな」なんて今まで思っていたのだが、一回できたとなると、もうそれ以上を求めなくなってしまった。
そのためにもう一台PCを管理しなければならないと考えると、少々大変だなと思えたので、「サーバ用MouseComputerよ、さらば」と潔く手放した。
また、11インチディスプレイの持ち運びに超便利なacer Aspire oneもついでに手放した。
そもそも、ノートとデスクトップ、一台づつ売って、まだ一台づつ手元にあるのがおかしいんのだろう。

それでもやっぱり、Linuxサーバがいつでもそばに居て欲しい

そう、寂しいのです。笑
Mainに据えて置いているのはWinマシンで、ノートはMacbookProなので、常にLinuxが起動しているマシンがいないことに気がついた。
もちろん、デュアルブート、トリプルブート環境なので、起動し直せばいつでも使えるのだが、そうでなく、常にアクセスできるLinuxマシンがほしい。
そうだなぁ…と考えていたとき、RPiの存在を思い出した。

と、長い前置きをさっさと終え、OSのインストールからはじめよう。

Raspbianのダウンロード

今回はややこしい設定はしない。
最速の手順で行う。
常駐サーバにするので、tmpfsや不要なログファイルをRAM化したり、高速化、軽量化のためにカーネルいじったり余計なもの削除したりしたいのだが、とりあえず今回はサーバ立ち上げを優先する。
今後アップデートしていこうじゃないか。

用意するソフトウェアはこちら。

  • Raspbian
    今回はJessieを使用する。
    Debianはメジャーバージョン名がトイ・ストーリーのキャラなのが、なんか好き。
    容量が大きい(およそ1.2GB)ため、ダウンロードには時間がかかる。
    Torrentだと早いのかもしれない。
  • Win32 Disk Imager
    WindowsでSDカードにディスクイメージを書き込むツール
    ダウンロードしたRaspbianの.zipを解凍して、.imgファイルをこのツールで書き込む。
    この辺はあまり詳細に説明せずとも、RPiに手を出した方たちならば、すぐに理解できることだろう。

用意するハードウェアはこちら。

f:id:tokixy56:20151005224048j:plain

  • RPi Model B 本体(多分Model Aでも可能)
  • SDカード(今回は16GBを使用)
  • microUSB電源(2.0Aが推奨らしい)
  • Donald & Daisyのマグカップ(可愛すぎる)

初期設定等、特にraspi-configなどは、とりあえず今回は書かずにおく。
もう既に、わかりやすく書いてくださっている方がたくさんいらっしゃるのでそちらを参照していただきたい。

sshの設定①

手順としてはこうなる。

  • root(su)ユーザのパスワード設定
  • 新規ユーザの作成
  • piユーザの削除

ファイルの転送がまだできないので、以下の設定は後でする。

  • 公開鍵の作成
  • sshの公開鍵の設定

インストール直後は、sshは使える(sshdが起動している)状態になっている。
しかし、その状態では、初期ユーザに簡単にログインできてしまう。
サーバとして運用していく上でセキュリティ的に大きな穴となるので、このユーザを削除し、新たに自分でユーザを作成しておくべきだ。
RPiのインストール直後の状態では、以下のユーザ、パスワードでログインすることができる。

RPi 初期ユーザ・パスワード
login user: pi
password  : raspberry

Ethernetを接続して、ルータなどからRPiのIPアドレスを探れば接続することができる。
僕の場合、ウェブブラウザから192.168.0.1でルータにアクセスし、IDとパスワードを入力してログイン、接続している機器を探す、などをしてRPiにアクセスしたりしたこともある。
でも毎回それをするのは非常に面倒なので、現在はルータ側より、接続してくる機器のMACアドレスIPアドレスを固定するよう設定している。
端末(ターミナル)には、Teratermを利用しよう。
もちろん、cygwinのopensshなど、他のツールを使ってもよし。

まずはroot(su)のパスワードを設定。

RPi rootパスワード設定
$ sudo passwd
[sudo] password for pi:
Enter new UNIX password:{パスワードを入力}
Retype new UNIX password:{パスワードを再度入力}
passwd: password updated successfully

パスワードを入力する際、入力した文字は表示されない。

続いて、新規ユーザを作成する。

RPi 新規ユーザ作成
$ sudo adduser {ユーザ名を入力}
Adding user `username' ...
Adding new group `username' (1004) ...
Adding new user `username' (1001) with group `username' ...
Creating home directory `/home/username' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for username
Enter the new value, or press ENTER for the default
        Full Name []:{エンター}
        Room Number []:{エンター}
        Work Phone []:{エンター}
        Home Phone []:{エンター}
        Other []:
Is the information correct? [Y/n] Y

新規ユーザ作成直後は、そのユーザでsudoを利用することができない。
ついでに利用できるように設定する。
一般的には以下のコマンドを実行。

RPi sudo権限追加コマンド
$ visudo

このコマンドを実行すると、root権限でnanoエディタで/etc/sudoersを開く。
僕はnanoが使えないので、viエディタで/etc/sudoersを編集した。
以下のように編集する。

RPi sudo権限追加設定ファイル 編集
...
# User privilege specification
root         ALL=(ALL:ALL) ALL
新規ユーザ名 ALL=(ALL:ALL) ALL
...

要は、rootと同じ設定にしておけば良いということ。
この時、piユーザの設定を削除しておいた方が良いかもしれない。

ここまでできたら、一旦ログアウト。
新たにsshで接続し直し、新規に作成したユーザでログインする。

あとは、piユーザを削除するのみ。

RPi piユーザの削除
$ sudo userdel -fr pi

お遊び シリアルコンソール

ちなみに、ユーザの作成、削除だけなら、こんな楽しい方法もある。
以下のUSBシリアル変換ケーブルを使用して、シリアルコンソール!!
Amazon.co.jp: VicTsing USB to TTLシリアルケーブルチップセットPL2303HX 1.0M 6フィートArduino UNO mini 用 [並行輸入品]: パソコン・周辺機器

f:id:tokixy56:20151006214802j:plain
こういうやつだ。
試しにこの画像のものでなく、普通のUSB/D-SUB9ピンシリアル変換ケーブルのTX、RX、GNDを接続して通信してみたのだが、文字化けした。
TTLレベルというのがあるらしく、1と0を認識する電圧が全く異なるからダメだったみたいだ。
組み込み好きなのにシリアル通信の規格電圧知らないなど、無知で恥の極みだ。
しかし、ちゃんと調べて、知って一生の恥とはしない。

f:id:tokixy56:20151006214806j:plain
上の写真のように接続する。

http://openrtm.org/openrtm/sites/default/files/5274/raspberrypi_gpio_pinassign.png [上記画像の引用元]
上記画像のRPiのピンアサインより、TX、RX、GND(グランド)のピンが確認できる。
RPiのTX(Transmit eXchange data)には、シリアルケーブルのRXを。
RPiのRX(Recieve eXchange data)には、シリアルケーブルのTXを。
RPiのGND(グランド)はGND同士。
シリアルケーブルの赤の線、VCCは接続しなくてよし。

とりあえず、sshもシリアルコンソールも、今回はTeratermを利用している。
ポートはそれぞれ読み替えてもらうとして、その他の設定は以下となっている。
f:id:tokixy56:20151006225258p:plain

起動ログ見てるとゾクゾクするわ。

次回は公開鍵設定に先立って、Sambaの設定をしたい。

KOZOS on MONIXをgithubに登録してみました。

一歩踏み出すことにとりあえず意味があるはず

ということで、自分で改造しまくったKOZOSgithubに登録しました。
誰得だし誰がそんなソース拾うかっていうような出来だ。
コンパイルは一応通るはずなのだが、コンパイラとか、多少環境整備がややこしいから、まだ公開できるレベルではなかったかもしれない。
でも、もしかしたら、どこかの優しい方が一緒に勉強してくれるかも、あるいは優しく、こうしやがりなさいませ、とご教授してくれるかも、いやいや、もっとここを教えてくれやがれ、と質問もいただけるかも、という期待を胸にとりあえずgithub様に丸投げしてみる。
ブートローダMONIXを使うので、いろいろと環境構築がややこしくなっているが、その環境を整える作業が楽しいのは僕だけなのだろうか。
一緒に遊びながら学びながら開発しようやって方は、本当にご連絡ください!!
さぁ、みんなで、git clone。

$ git clone https://github.com/TokiSasaki/learning_kozos.git

ブラウザからはこちらをクリック。

README.mdの英語はgoogle翻訳を使わせてもらって頑張って頑張って書きカキした。
おそらく文法とかもおかしいだろう。
その辺も直せと言っていただけると幸いだ。

ちなみに、前回はUSBドライバの実装(未完)ということだったのだが、現在ももちろん(未完)だ。

今後は、もっともっとドキュメントを充実させたいと思う。
ソースコードを書いてコンパイルして動かして、というのが最もエキサイティングで面白い部分なのだが、やっぱりしっかりと理解するには、自分なりにドキュメントをまとめて、言葉で説明できるようにすることが大事だと思う。
環境構築、KOZOSの仕様の理解と簡単なまとめ(できれば図式化)、その後拡張していく機能のプロトコルなどの理解など、学ぶことはまだまだ尽きないだろう…

SL811HSのドライバ on KOZOS (未完)

aki-h8/3069f USBホストボードのSL811HSを使う

KOZOSの開発をaki-h8/3069f USBホストボードキット(完成品)(以下USBボード)上で行っていることは、以前のブログにも書いた。
これからUSBホストドライバを書いていこうというところだ。
このUSBボードには一応USBホストのサンプルプログラムが書かれていて、それを参考に作っていこうと思っていた。
そのソースコードを読んでいるのだが、これがなかなか嫌な書き方をしている…。

  • define切ってあるのに、それを使わず直値("0x40"とか)で書いてるところがある。
  • 専用的なプログラムなのに汎用的に書こうとして失敗している。
    (引数にデバイス番号を取る関数がある、それ以外を充実させて欲しかった…)
  • SL811HSを操作する関数と、USBホストとしての関数がきっちり分かれていない
    (SL811の操作とUSB規格の操作は違うんだぜぃ)。

などなど、いくつかの難点がある。
目下、ソースを読むというより解析作業をしていると言ってもいいだろう。

ただ、一から全部を作るのは、それもそれで結構大変な作業となる。
まぁ良いっちゃ良いんやけど、ここに動くものがあるのに一から作るのがなぁ…
と思って、ちょっとづつサンプルプログラムを修正している。

aki-h8/3069f USBホストボードのUSBドライバ

SL811HSというのはUSBホストデバイスでして、そのデバイスドライバを書きまっせぇ。
と小難しいことを言っても、結局のところメモリマップドIOのペリフェラルを操作するわけで、アドレスの読み書きが基本となるので、あるいくつかの儀式を済ませればUSBホストデバイスを通してUSBデバイスを操作することができる。
単純にSL811HSを操作するだけなら、USB規格は全く関係ない(そりゃハードウェアは関係あるけど)。
したがって、SL811HSのドライバを書くことは、それほど脅威ではない。
その上位のUSBホストデーモンプログラムを書くことの方が大変だと思う。
ドライバやアプリの関係を図に表すとこんな感じかな。

  • アプリとデーモンとドライバとOSの図

    f:id:tokixy56:20150718141844j:plain

KOZOS上でIOの操作をする場合には、シリアル通信と同じように、IO操作専用のデーモンを起動して、そいつのメッセージを投げるという作りにすべきだろう。
僕がUSBホストドライバを書いている理由、その目的は、USBマスストレージクラスのUSBデバイスからデータを取得するためである。
とりあえずはUSBマスストレージの取り扱いしか実装するつもりはないが、今後、どんな面白い機能を追加したくなるかわからない。
できる限り機能追加のしやすいよう汎用的に書くように心がけたい。

Qiitaとブログの使い分け

Qiitaとブログの使い分け

Qiita(キータ)のユーザ登録を済ませた。
Qiitaは下記のようなサービスのようだ。 「プログラミングに関する様々な分野のユーザ達と、知識を共有し、意見を交わすことで、より多くの知識を生み出しましょう。」
ここより抜粋

僕がブログを始めたきっかけは、IT技術的な問題で大変だったこととか、自分の興味のあることで、比較的情報が少ないような話題を配信したかったからだ。
本当に「誰得?」と思えるような情報を配信したいと常々考えている。
もちろんWebの深海へ潜れば潜るほど、いづれ行き着く情報もあるのはあるのだが。

ところでQiitaは「プログラミングに関する…」ということから、Linuxのデーモンの設定とか、iPhoneアプリの有益な使い方とか、そういうのは含まないんだろうと思う。
シェルスクリプトとかvimスクリプトはどうなるのか??
とりあえずスクリプトはプログラミングと考えてもいいのかなぁ??
と、「プログラミング」の境界線は今のところ自分の中で曖昧である。

しかしどこかで区切りを付けなければならない。

まずは全部ブログに書く、整理してQiitaへ

何人か好きなエンジニアさん、リスペクトしてるエンジニアさんの動向を追って、いろんなサービスに顔を出して調べてみると、大体みなさんは独自のホームページをメインに使ってる模様。
なので、そういう方法がいいだろうなぁということで、とりあえず僕は本ブログをメインとしよう。
ブログに自分の興味のあることをどんどん積み重ねて、より洗練された形でQiitaへ投稿。
よりよき情報がGoogleのスパイダーに引っかかりますように。

vim ヤンクとクリップボードまわり

意図しない文字列がレジスタへ格納される

vimでコピペの作業をする場合、どの操作をしたら、どの文字列がレジスタに格納され、クリップボードに格納されて、というのがわからなくなる時がある。
特に矩形選択時の置換書き換え、置換貼り付けなどしたあと、次に貼り付けしたいところでペーストすると「あれ?」ってなることが、僕は度々あった。
それを解決したい。

今回の.vimrcの仕様

以下を今回の.vimrcの仕様としよう。

  • ヤンク時は、基本的にクリップボードを使用する。
  • ビジュアルモードでの置換書き換え=c(貼り付け=p)をする場合、書き換え(貼り付け)時に削除される文字列をクリップボードに格納しない。
.vimrc クリップボードと置換書き換え(貼り付け)
" クリップボードに無名+レジスタを使用
set clipboard=unnamedplus

" ビジュアルモード時の置換貼り付け
vnoremap <silent> p     ""d"+P
" ビジュアルモード時の置換書き換え
vnoremap <silent> c     ""c

" 以下の設定はお好みで。
inoremap <silent> <C-v> <C-r>+
inoremap <silent> <C-p> <C-r>+

とりあえずこれで置換書き換えとかでクリップボードを汚されずにすむ。
「""d"+P」は苦肉の策と言える。
「""c」みたいにシンプルにシンプルに書く方法はないのだろうか?
ちなみに、僕の環境はLinuxBean14.04上でvimを利用しているので、clipboard=unnamedplusとしている。
WindowsMacOSX環境の方はclipboard=unnamedでもいいかも。
その場合、置換貼り付けの「""d"+P」は「"ad"+P」とかにして、違うレジスタを使用しなければならない。

iPhoneでメモ エクストリーム (URLスキーム javascript などを使って)

デジタルツールの良いところ

それはモバイル性、定型文の作成の早さ、写真・マルチメディアに強いところ、だけだと私は思っている。
それ以外に紙とペンに勝るところはない。
結局のところ、紙とペンを使うことが、僕達の世代とそれ以上の人々には一番自然で、頭にも心にもその内容が深く刻まれるのではないかと思う。
しかし、メモを取るにしても、常にノートとペンを携帯して仕事ができる人はあまり多くないのではないだろうか?
デスクワークをしている方々ならば、それらを手元に置いておけるのだろうが、飲食店で立ち仕事をしていたり、工場で工具などを持って働いていたり、屋外で体力勝負の仕事をしている人達には、常にアナログツールを携帯することは難しい。
水気が近くにあったり、汗を大量にかいたりするからだ。
しかし、携帯電話は意外と常に持ち歩いているのではないだろうか?
汗をいっぱいかくような仕事をしている人は、防水のスマートフォンを持ったり、ジップロックのようなビニールに入れて携帯している人も見かける。
モバイル性、定型文の速記性、マルチメディアの強さを最大限に活かして、iPhoneで最高のメモ環境を作りたいと思う。
メモしたいと思った瞬間に、その情報を残す。
最終的にはノート上で考えるのだが、その手がかり、一番最初のテーマというのは、いつ、自分の中に舞い降りてくるかわからない。
それをできる限り多く、消える前に何かに留めておきたい。

すぐ見えるところにメモを置きたい

"すぐ見えるところ"というのは、つまりホーム画面である。
ホーム画面に"メモ"とか"ToDo"とか書いてるアイコンがあるのが一番直感的でわかりやすい。
僕はiPhoneで何かアプリを探すとき、アイコンを見て探すのだが、本当に探しにくいなと思うことがよくある。
自分で"メモ"とか手書きで書いたアイコンが使えたらいいのになと常々思っていた。
それも実現したいと思う。
まずは、以下のコードを見てみよう。

ホーム画面に追加URL
data:text/html;charset=UTF-8,<title>Memo</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="data:image/jpeg;base64,【ここにJPEGのBASE64画像】">
<script type=text/javascript>navigator.standalone?location="【ここにURLスキーム】"
:alert("ホーム画面に追加")</script>

上記のコードがすべての肝となっている。
「【】」で記している部分は書いてあることそのままで、BASE64形式のJPEG画像で置き換える部分、URLスキームに置き換える部分である。
JPEG画像のBASE64化はこちらのサイトなどを利用するといいだろう。
同様のことが、opensslを使用してもできる。 以下のようにする。
(僕はzsherなのでプロンプトは'%')

base64コマンド
% openssl base64 < image.jpeg | tr -d '\n' > image_base64.txt

上記のコマンドでBASE64化されたJPEG画像がimage_base64.txtファイルの保存される。
この内容を、「【ここにJPEGBASE64画像】」と置き換えれば良い。
BASE64画像を使用する場合、改行コードは省くこと。
opensslコマンドの場合、「tr -d '\n'」によって改行コードを削除している。

最低限のみを入力

メモなどをとっていると、ある特定のフォーマットで記述したい時が出てくる。
例えば、一行ごとにメモを取るとするならば、

一行タイムライン
- めもを取る 【2015-07-06 22:30】

など。 この時、「めもを取る」しか入力したくない。
それ以外は自動で書いてほしい。
僕は、このタイムスタンプに苦戦した… 基本的に、タイムスタンプを挿入してくれるようなURLスキームを持つアプリは存在しない。
したがって、URLスキームに渡す文字列にタイムスタンプをすでに用意しておかなければならなかった。
タイムスタンプを自分で毎回入力するなんて絶対に嫌だった。
その自動化にハマりにハマったけど、ブックマークレット(javascript)を使うことによってなんとか解決。
こうしてみよう。

javascriptでタイムスタンプ with LaunchCenterPro
data:text/html;charset=UTF-8,<title>Memo</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="">
<script type=text/javascript>
var hiduke = new Date();
var year = hiduke.getFullYear();
var month = hiduke.getMonth()+1;
var day = hiduke.getDate();
var hr = hiduke.getHours();
var min = hiduke.getMinutes();
alert(year+"-"+("0"+month).substr(-2)+"-"+("0"+day).substr(-2)+" "+("0"+hr).substr(-2)+":"+("0"+min).substr(-2));
navigator.standalone?location=
"launch://dropbox/prepend?text=- [prompt] 【"+year+"-"+("0"+month).substr(-2)+"-"+("0"+day).substr(-2)+" "+("0"+hr).substr(-2)+":"+("0"+min).substr(-2)+"】&path=Note&name=timeline.txt"
:alert("ホーム画面に追加")</script>

今回は、LaunchCenterProを介して、自分のDropboxの/Note/timeline.txtに一行タイムラインに示したフォーマットのメモを残す。 上記のコードをSafariにコピペし、ホーム画面に追加することで、指定したフォーマットでメモを取ることができる。
ちなみに、毎回現在時刻をポップアップで表示してしまうので、それが不要な場合は、"var min =..."の次の行の"alert...;"を削除すること。
加えて、タイムスタンプのフォーマットを「[...]」というように、ブラケットで囲むことはできないみたい。
LCP内部でURLスキーム内にブラケットを使うことはできるみたいだが、LCPを外部から呼び出す際にはブラケットとブラケット内部の英数字以外の文字列はURLエンコード(%5Bとか)されてしまうらしい。
仕様みたいですね。

URLスキームを使用できる おすすめライフハッキングアプリ

まず、LaunchCenterProを仲介させることが一番望ましい。
以下に紹介するいくつかのアプリも有料だが、払って損はなし。
どこまでメモ、記録を取ることに執着するかが問題だ。
加えて、以下のURLスキームはベーシックな使用方法しか載せていない。
LaunchCenterProjavascriptを使用することで、より柔軟に、素早くメモを取ることができる。
あとは読者次第である。

僕は、基本的にメモをメールで残している。
時代の変化に左右されにくそうだし、件名でフィルタリングできるし、どこからでも何からでもアクセスできるし、内容もHTMLから写真からPDFから圧縮ファイルまで様々。
ぜひおすすめしたい。
URLスキームは以下。

メールURLスキーム
mailto:【宛先】?subject=【件名】&body=【本文】 

また、メモ以外にも記録を残したいものがある。
僕は、日々の出費とライフログだ。
出費は最終的にExcelでまとめて計算したい。
出費に関しては、ここでは書ききれないため、またの機会に自分の記録方法をまとめて紹介したいと思う。
大まかにいうと、僕はLaunchCenterProのInput Tagsの[list]を利用して、出費項目をリスト化し、それぞれをカンマで区切ったcsvファイルをdropboxに保存している。 とりあえず、LCPに登録しているURLスキームを載せてみる。

出費URL with LCP
launch://dropbox/append?name={{2015-[list:出費 買った月|1月=01|2月=02|3月=03|4月=04|5月=05|6月=06|7月=07|8月=08|9月=09|10月=10|11月=11|12月=12].csv}}&text={{[list:出費 買った日|1日=01|2日=02|3日=03|4日=04|5日=05|6日=06|7日=07|8日=08|9日=09|10日=10|11日=11|12日=12|13日=13|14日=14|15日=15|16日=16|17日=17|18日=18|19日=19|20日=20|21日=21|22日=22|23日=23|24日=24|25日=25|26日=26|27日=27|28日=28|29日=29|30日=30|31日=31],[list:出費 支払い方法|現金|クレジット|引き落とし],[list:出費 カテゴリ|食費=食費,[list:出費 食費:項目|自炊|飲み物|外食|おやつ|デリバリー|その他],[list:出費 食費:店名|コンビニ|自動販売機|マクド|スタバ|スーパー|100均|お弁当系|その他]|日用品、家具、家電=日用品、家具、家電,[list:出費 日用品、家具、家電:項目|ティッシュ、ウェットティッシュ|歯ブラシ、歯磨き粉|クレンジング、洗顔、化粧水|化粧品|石鹸、シャンプー|美容院|100均|家具|家電|点鼻薬|その他],[list:出費 日用品、家具、家電:店名|ホームセンター|ドラッグストア|Amazon|ドンキ|ニッセン|その他]|固定費(年貢、貯金など)=固定費,[list:出費 固定費:項目|年貢(実家へ)|貯金|引き落とし|携帯代|駐車場代|定期便|自動車保険|車両代|税金|その他],その他|仕事関係=仕事関係,[list:出費 仕事関係:項目|作業服、靴下|筆記用具|その他],[list:出費 仕事関係:店名|しまむら|ユニクロ|ニッセン|Amazon|100均|ホームセンター|その他]|車関係=車関係,[list:出費 車関係:項目|ガソリン|オイル交換|洗車|車検|タイヤ代|その他],[list:出費 車関係:店名|オートバックス|その他]|衣服代=衣服代,[list:出費 衣服代:項目|服、下着|靴|アクセサリー|クリーニング代|タオル|その他],[list:出費 衣服代:店名|しまむら|ユニクロ|ニッセン|Amazon|クリーニング屋|その他]|交通費、パーキング=交通費、パーキング,[list:出費 交通費、パーキング:項目|パーキング料金|電車、バス代|タクシー代|高速料金],その他|趣味、娯楽、イベント=趣味、娯楽、イベント,[list:出費 趣味、娯楽、イベント:項目|本、電子書籍|宿泊費|ボード用品、リフト代|PCツール、電子機器|IT開発、部品系|DIY木材、金物、道具|ゲーム|カラオケ|入館料(美術館、映画館など)|ネットカフェ|CD,DVD、動画|その他],[list:出費 趣味、娯楽、イベント:店名|ホームセンター|TSUTAYA|ヤマダ電機|ハードオフ|古本市場|Amazon|100均|カラオケ店|ネットカフェ|その他]|交際費、特別費=交際費、特別費,[list:出費 交際費、特別費:項目|冠婚葬祭費|ゴルフ関係|お祝い費|プレゼント代|食事代|医療費、薬代|その他],その他|保険、税金、手数料=保険、税金、手数料,[list:出費 保険、税金、手数料:項目|保険|税金|手数料],その他|その他支出=その他支出,その他,その他],[prompt-num:金額]}}&path=/Note

LCPは使い方によってはものすごく便利になる。
しかし、便利になるまでの道のりは長かった…。
この長い長いコードを見るとその苦労がわかるでしょう、読者の方々…w

ライフログは、できればカレンダーで残したい。
そんな方には以下のアプリをおすすめしたい。
かんたん予定入力 - choical」。
こちらがマニュアルページだと思う。
これは猛烈にすごい。
基本的には予定を即座に入力できるアプリだ。
これのURLスキームを利用することで、より素早く入力できること間違いなし。 URLスキームは以下。

かんたん予定入力 - choical URLスキーム
choical://【テキストを入力】

LanucnCenterProについての補足

LCPの説明ばかりになって申し訳ないのだが、LCPのInput Tagsには[action]なるものがある。
これは、LCPに登録してあるアクションに自動で割り振られたIDを指定することで、そのアクションを呼び出すというものだ。
LCPのアクションの内容を編集する画面の一番下に書いてある。
[action]は、LCPを外部から呼び出す場合に非常に有用な機能だ。
つまり、上記の出費URLスキームが例えば「ID:100」などで登録されている場合、

data:text/html;charset=UTF-8,<title>Memo</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-icon" href="">
<script type=text/javascript>navigator.standalone?location="launch://?url=[action:100]"
:alert("ホーム画面に追加")</script>

というURLスキームをホーム画面に追加すれば、出費URLスキームが実行される。
出費の項目リストに修正を加えたい場合には、LCP内部のスキームのみいじればいいので、保守性も高まる。
うん、ライフハックしてる気がする。