さるるの備忘録(とか色々)

講義のメモとか、技術系の話とか、日常の小ネタとか色々と。

dotfilesをgitで管理してみる

今まで設定ファイルをすべてローカルで管理していました。
ですが、正直色々と面倒になって来たので、gitで管理してやることにしました。
それでやったことのメモ書きです。

設定ファイルをひとまとめに

まず~/直下に.dotfilesとして、設定ファイルをまとめて置くディレクトリを作ってやりました。

$ mkdir ~/.dotfiles

ひとまず、目につくと言うか、よく使うものだけを管理するようにしました。
なので、今回はzshEmacsの設定ファイルである

.zshrc .emacs

この二つを.dotfiles直下に配置することにしました。

$ cd ~
$ mv .zshrc .emacs ... ~/.dotfiles

シェルスクリプトでバラ撒く

シェルスクリプトを実行することで、設定ファイルをばら撒こうと思います。 なので、ごりごりと(今回はそんなに書いてないけど)シェルスクリプトを書いていきます。
今回は、設定ファイルの実体ではなく、シンボリックリンクを所定の場所にばら撒いていきます。
こうすることで.dotfilesディレクトリのみをgitで管理すれば良いようにします。
今回は、以下のシェルスクリプトsetting.shとして作成します。

#!/bin/zsh

echo -n "Setting? [y...1/n...0]: "    # if文の練習を含めて確認ダイアログを置いた
read ans

if test ${ans} -eq 1; then
    
    ln -s ~/.dotfiles/.emacs ~/.emacs
    ln -s ~/.dotfiles/.zshrc ~/.zshrc

    echo "done."
else
    echo "Nothing to do. Exit."
fi

では、setting.shとして、.dotfilesの中に保存しましょう。 そして、そのままでは実行できないので、実行権限を付けてやります。

$ chmod +x setting.sh

これで、シェルスクリプトsetting.shが実行できるようになりました。

gitで管理するための設定をする

この.dotfilesに対してgitの設定します。

$ cd ~/.dotfiles
$ git init  
$ git remote add origin {リポジトリのURL}
$ git add .
$ git commit
$ git push origin master

とかなり割愛(?)しましたが、こんな感じ

そして構築

この.dotfilesを環境構築したいアカウントの~/直下にgit cloneして移動します。
もちろん同じマシンの別アカウントでも、別マシンの別アカウントでも。

$ git clone {リポジトリのURL}
$ cd ~/.dotfiles

最後にシェルスクリプトsetting.shを走らせます

$ ./setting.sh

これで別環境でも設定ファイルをばら撒けます。

まとめ

設定ファイルはバラまくことができますが、今回はzshemacsがインストールされていることが前提です。
そのため、効率化という意味ではまだ今ひとつかなという感想です。

今後はログインシェルを変更する等を含めて、自動化できるようにしていきたいです。

まとめのまとめ

シェルスクリプトってやっぱ便利

お菓子でクリスマスの備えをする話

この記事は、SLP KBIT Advent Calendar 2015 9日目の記事です。

クリスマスに備えよ

タイトル通り、お菓子でクリスマスの備えをしましょう。
クリスマスといえば、お菓子は必須ですよね。

さっそく

準備をしていきましょう。

準備するもの

  • Raspberry Pi B+ model
  • キーボード
  • マウス
  • microSDカード
  • LED何本か
  • 抵抗
  • ICクリップ(は普通は使いません。メスのジャンパピン入手できなかったので代用しただけです。)

ぼくのおもてた、おかしとちがう

お菓子とは「Raspberry Pi」という小型コンピュータのことです。
クリスマスのお菓子といえばケーキ?ホイップクリームを塗る段階で挫折しそうなのでやめておきました。

Raspberry Piとは

イギリスのラズベリーパイ財団によって開発された教育用の小型コンピュータです。
スペック別に様々なモデルが存在しますが、ミドルモデルのB+ modelでも、4,000円出せばお釣りが来ます。
組込み用途はもちろん、Apacheを走らせてWebサーバとしての利用なども出来なくはないそうです。

んで、何すんのさ

これでチカチカ光るイルミネーションを作ってやりましょう。
これで、クリスマスが1人ぼっちでも、寂しくない。

ぼくのRaspberry Piについて

Raspberry Pi専用OSで、Debian系OSであるRaspbianを利用しています。 他にもUbuntu系のOSや、果てはWindows10まで用意されています。

まずは光らせる

Raspberry PiにはGPIOという端子が存在します。各端子の電圧のオンオフなどを実装していけます。 電圧を入れたり切ったりすればLEDがチカチカ光るって寸法です。

ピンには番号がついています。以下のサイトを参考にしてください。
また、後記のgpioコマンドを利用するとターミナル上で一覧を出せます。

Raspberry Pi公式サイト

ここではGPIO2とGND(接地)を使っていきます。
なおモデルによってGPIOピンの配置は違うので注意して接続しましょう。 なおLEDの場合、GPIOピンにアノードを、GNDにカソードを接続します。間違えると光りません。

ここでおもむろに

ターミナルを開きましょう。Raspberry PiではLXTerminalが標準で搭載されています。
まずは、どのピンを使うか、Raspberry Piに教えてあげます。

ちなみにGPIOピンはroot権限でしか動きません。sudo su -するか、コマンドの頭にsudo を付けてください。

今回はGPIO2を使うので

# echo 2 > /sys/class/gpio/export

としてやります。すると、/sys/class/gpio/直下にgpio2というディレクトリが生成されます。
ちなみにechoというのは入力をそのまま出力するコマンドです。echo = やまびこ ですね。
あと>はリダイレクトします、という意味で、出力結果を>の後ろに書かれたファイルに書き込むという意味です。

さて、'gpio2'にはそのピンに関する情報が集められます。 このようなファイルが生成されます。

ative_low device direction edge subsystem uevent value

というわけで、

# cd /sys/class/gpio/gpio2   

で移動して作業していきましょう。

次にこいつはLEDに対して出力(Output)を行うので、そのように設定しましょう。

# echo out > direction  

とすると、出力ピンとして設定されます。

ではいよいよ

チカチカさせてみます。さっき移動したgpio2のディレクトリ内に
valueというファイルができています。こいつの値を書き換えるとオンオフ出来ます。

ではやってみましょう。gpio2のディレクトリ内で

$ echo 0 > value

0にするとLEDは消灯します

では値を変えてみましょう。

$ echo 1 > value

1で点灯します

ってな感じで、操作できます。

ところで

なんか雰囲気もクソも無くね

なので

実はC言語などでもGPIOピンは操作できます。Rubyでも可能です。Pythonでも。
もちろんシェル上で操作できるので、シェルスクリプトでもチカチカできます。

というわけで

C言語で雰囲気出していきますよ。
C言語でGPIOピンを操作するにはWiring Piというライブラリが必要になります。

$ git clone git://git.drogon.net/wiringPi
$ cd ./wiringPi
$ sudo ./build

で導入できます。

では書いていきましょう。wiringPi.hをincludeしてやってくださいね。 以下はすごく寂しいことになるコードです。

#include <wiringPi.h>
#include <stdio.h>

#define GPIO2 2 // ピン番号です。GPIO2を使うので2です。
#define ON    1
#define OFF   0
#define FLS   10 // フラッシュの回数

void Flash(int pin, int sw, int del);

int main(void)
{
  int i;

  if ( wiringPiSetup() == -1 ) {
    return 1;
  }
  
  pinMode(GPIO2, OUTPUT);

  while ( 1 ) {
    Flash(GPIO2, ON,  3000);
    Flash(GPIO2, OFF, 3000);
    Flash(GPIO2, ON,  3000);

    for ( i = 0; i < FLS; i++ ) {
      Flash(GPIO2, ON,  500);
      Flash(GPIO2, OFF, 500);
      puts("tikatika! SLOW");
    }

    for ( i = 0; i < FLS; i++ ) {
      Flash(GPIO2, ON,  200);
      Flash(GPIO2, OFF, 200);
      puts("tikatika! FAST");
    }

    
  }
  
  return 0;
  
}

void Flash(int pin, int sw, int del)
{
  digitalWrite(pin, sw);
  delay(del);

  puts("Flash OK!");
  
  return;
}

ここで、ピンの番号がわからない時は

$ gpio readall

でピン番号一覧が出てきます。

かけたら、コンパイルして実行してみましょう。

$ sudo gcc hoge.c -lwiringPi   

コンパイルして、

$ sudo ./a.out  

で実行です。

www.youtube.com

これで複数のLEDをつなげて、複数のGPIOピンで操作してやれば平穏なクリスマスをおくれそうです。
めでたしめでたし。

というわけで

画面以外の場所でものが動くのは案外楽しいです。 今回はLEDをチカチカさせただけですが、モータを付けて自走式RaspberryPiなんかも、全然夢ではないです。やってみたいですね。

最後に

クリスマスは1人でも寂しくない、そう寂しくないんだ。

Homebrewでupdateできなくなった話

MacOSYosemiteからEl Capitanにアップグレードしたら、brew updateでエラーをはくようになった話です。

そもそもなぜ

MacOSX El Capitanから搭載されたrootless機能が原因のようです。
このrootless機能は/bin直下など、システム的にクリティカルな場所にrootでもアクセスできなくなる模様です。

とは言え

Homebrewが使えないとお話になりません。

一時的には解決できた

sudo chown -R hoge /usr/local で権限を書き換えると、一時的には解決できました。 ただし、再起動などを掛けると権限がシステムによって書き換えられるので、対症療法的です。

根治解決は

見通しが立ってません(にっこり

おわび

記事ミスがありました、修正しました。すみません。

CMSに興味が出てきた話

そもそもCMSって

CMSはContents Management Systemといい、 Webkコンテンツを一元的に管理して、サイトを作ったり編集したり なんだりするソフトウェアの総称…

ものすごく、かなり、超絶、ざっくり言うと

Webページ作る手間を大胆に省くシステム

なんで興味が

かなり簡単に言うとWordPressで作ったページが めちゃくちゃかっこよかったせいです

どんなのがあるの