2016年5月4日水曜日

ソフトウェア設計の最適化方法

ソフトウェア設計の最適化方法


ソースコードとは
 まず、ソースコードで求められているものはなんだろう。というテーマから入って説明したいと思います。
 世の中には
 ・ウォーターフロー開発モデル
 ・アジャイル開発モデル
 ・アスペクト開発モデル
 ・プロトタイプ開発モデル

などいろんな手法が考案されて、様々な現場で利用されているのではないでしょうか。

運用する時は、組織体系に合わせて世の中一般の開発モデルをカスタマイズされているので
A社、B社が同じ開発モデルを利用していて、あるプロジェクトで情報を共有して共同開発しようなんて場面に出くわした時は
必ずといって情報の一元化を行いましょう、という合言葉とともに本来不要なプロセスが発生する。
(同じ開発モデルだから相性はいいが、完全一致させることは不可能と思われる)


情報とは
 熱力学のエントロピーという言葉を耳にしたことがあると思う。

これは、
 集約されている状態は秩序が保たれていてエントロピーは小さく、
 散っていて無秩序な状態のことをエントロピーが大きいと表現している。

この考え方は情報分野にも当てはめることができる。
圧縮アルゴリズムを勉強した人はハフマン符号化を学ぶときに情報エントロピーという言葉が出てくる。
情報エントロピーとは、これ以上圧縮できないデータ量の事で、冗長性が非常に小さい状態のことを意味する。

前の話で組織間で出てきた「情報の一元化」とは、
お互い同じ情報を扱っているのに散ってしまう情報を打破するために行われる手法だという事を意味している事が分かる。
もう少しわかりやすい表現に変化させてみよう。
「情報の一元化」を別の言い方で表すと、「枠組みの中で情報の整理整頓を行う」となる。
ここで出てきた枠組みの中でというのが社間を意味し、そこで得られた情報を整理整頓を行うことである。
つまり社間では情報の中身ではなく、情報の出入りの話であって、これは仕様書などのドキュメントを台帳管理しようという事を示している。


ソフトウェア仕様とエントロピー
 少しずつ現場レベルに考え方をシフトしていく。
ハフマン符号化に出てくる情報エントロピーの考え方でいくと、
「冗長性をなくす」事でエントロピーが小さく、秩序が保たれているとこである事を意味している。
この考えは同じものが無ければまとまっているように思えるが、ソフトウェアの場合は時間軸があり仕様変更があるので、情報エントロピーという考えで情報をまとめることは難しい。
そこで原点に戻って、熱力学のエントロピーには「エントロピーの増大の法則」というものがあり、時間が経過していくとエントロピーは増加するというものである。

この考えを当てはめると、ソフトウェアは時間と共に仕様変更が行われ、エントロピーが増大していく。

と言える。

つまりソフトウェアの性質上、仕様変更が発生して、追加・変更・削除が設計・コードに反映される。

ソフトウェアの変化を管理する事でエントロピーの増大を記録することができる。(減少はしない)

裏返しにするとエントロピーが減るような仕様書は無い、仕様変更は工数が発生して費用が発生するという事が言える。


ソフトウェア設計とエントロピー
 仕様変化することでエントロピーが増大するという事を説明した。
次に仕様と設計について述べていこうと思う。

熱力学でいうと 熱エネルギーは 高いものから低いものへ移動していくというものがある。

これを仕様=熱いもの  設計=低いもの に例えると、
仕様書から設計書へ情報を移すと散らばる(千差万別)と表現してみると分かりやすいのではないだろうか。

設計書を書くとエントロピーが増大していくのは自ら苦しめていくようなものなので、
よくある事例を出すと書き方の統一である。

最近ではUMLで図の書き方を統一しようという動きはあるが、
設計書に適用する場合は運用ルールを決めて、書き方のテンプレートとガイドラインを用意しておくと良い。
また仕様変更で変化した場合は新たにドキュメントを作成しバージョン管理して
変化内容と以前の仕様、最終仕様を明確化しておく事とトレーサビリティが保たれる。


ソースコードとエントロピー

現場でよくあることは、
・Aさんのコードはまとまっていて見やすいコードを書く
・Bさんのコードは乱雑なコードを書く

というように人によって書き方が変わって秩序が乱れエントロピー増大に繋がっていることがある。

これも設計と同じように、書き方のテンプレートやガイドライン、フレームワークを利用する事で
書き方が統一できるようになる。
もう少し細かく書くと、
仕様とは、構造と機能の2つに分類され、
構造はフレームワーク
機能はユースケース、ステートマシン、外部通信仕様などに分類して表せることができて、それぞれに追加・変更・削除
がある。

機能の追加や変更、削除はオブザーバブルなものであって、
ある機能を 
 使う(Main)
 動かす(Sub)
 評価(Test)

に分けることで分担作業が可能になって機能を分割しやすくなる。

より具体的に説明すると、
 Mainクラス(上位:使う側)
 Subクラス(下位:実働側)
 Test(Mainクラスで使い方サンプル集みたいなもの)

の3つに分けて実装し、
機能の管理はMainで行われて、機能の実装はSubクラスで行う
TestクラスでSubクラスの品質評価を行い、
Mainクラス側でビジネスフローを実装する。

こんな具合になる。
これでエントロピーが減らせるのか?と思うだろうが、
仕様変更が起こると 仕様変更(Main)、機能変更(Sub)、変更に伴う評価(Test)
それぞれに作用が行われ、どの規模の変更が起きたのかが現場レベルで実感しやすくなり、
対費用効果の算出などに有用であることが分かる。
例えば、
 ・仕様追加ならMain・Sub・Testに影響
 ・仕様変更ならMainに影響(ビジネスフローは人力で評価を想定)
 ・機能変更ならSub・Testに影響


ざっくりまとめると、
 ・仕様書のバージョン管理
 ・WBSによる機能対応表
 ・ソースコードの実装を分担化

となる。

より精度の高い最適化を行うのであれば、エントロピーの増大について学んで
エントロピーを減らすことはできない事を理解して、いかにして増大するを抑止するかを考えてみると良いと思います。

2016年4月22日金曜日

[Windows]シャットダウン時に出てくる「x個のプログラムが閉じられていません」を出さないようにする方法

・シャットダウン時に出てくる「x個のプログラムが閉じられていません」を出さないようにする方法


①WIN+Rを押して「gpedit.msc」と入力する。

②ローカルグループポリシーエディターが起動したら
「コンピューターの構成」→「管理者テンプレート」→「システム」→「シャットダウンオプション」を選択。

③「シャットダウンをブロックするか取り消すアプリケーションの自動終了をオフにする」をダブルクリックして「有効」にする。



参考URL
http://windows7.wiki.fc2.com/wiki/%E7%B5%82%E4%BA%86%E6%99%82%E3%81%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E5%BC%B7%E5%88%B6%E7%B5%82%E4%BA%86%E3%81%AE%E5%95%8F%E3%81%84%E5%90%88%E3%82%8F%E3%81%9B%E3%82%92%E5%87%BA%E3%81%95%E3%81%AA%E3%81%84

2016年4月20日水曜日

[RaspberryPi]RpiでツイッターBotを作る

[RaspberryPi]RpiでツイッターBotを作る



【Bot用アカウント作成編】

Step1.Twitterアカウントの作成
 https://twitter.com/

 ※電話認証は済ませておくこと。


Step2.アプリ登録
 https://dev.twitter.com/apps/

 PermissionでAccessをRead and write にチェックを入れて、Update Settingsする。

Step3.APIKeyとシークレットキーを取得する。
Keys and Access Tokensタブを開くと、Application Settingsに記載してあるキーをメモしておく。



【RPi環境構築編】

Step1.環境構築
$ sudo pip install twython requests requests_oauthlib

Step2.Botアプリ用フォルダを作成
$ mkdir twitterBot
$ cd twitterBot
$ vim TempBot.py

----
#!/usr/bin/env python
#coding:utf-8

import os
from twython import Twython

#Twitterアカウントの認可情報
CONSUMER_KEY = ‘Consumer key’
CONSUMER_SECRET = ‘Consumer secret’
ACCESS_KEY = ‘Access token’
ACCESS_SECRET = ‘Access token secret’

api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)

#Raspbianの制御コマンド(vcgencmd)を実行
cmd = ‘/opt/vc/bin/vcgencmd measure_temp’
line = os.popen(cmd).readline().strip()
temp = line.split(‘=’)[1].split(“‘”)[0]

#取得したCPU温度を投稿
api.update_status(status=’CPU no ondo ha ‘+temp+’do desu ‘)  
----

$ sudo chmod +x TempBot.py


Step3.実行する

$ ./TempBot.py




参考URL
http://pettomo.azurewebsites.net/?p=4101

2016年4月14日木曜日

[Xamarin]バージョン2.0.06482、2.1.0.6529はスキップして2.2系列が出るのを待った方がよい理由

バージョン2.0.06482、2.1.0.6529はスキップした方がよい理由


これら2つのバージョンは、2016年3月31日(本土時間)、マイクロソフトがXamarinをオープンソース化を発表した時点のXamarinバージョンになります。


それまでは製品版として販売していたのだからすぐ使えるくらいの品質かというとそうでもありませんでした。
(きっとVisual Studio環境下のXamarinはまだアルファ版レベルなのだろう。。。)

特に2.1.0.6529は古いバージョンに依存していて、まともに使えたものではない、そんな状況になっています。

まとめると、
 2.0はかなり古いけど使える。
 2.1はメジャーバージョンだけど、依存ライブラリのバージョンを下げないと使えない。
 2.2はオープンソース化になって初めてのメジャーバージョンになる(現在Pre版)

ということで、まともになるのはそれ以降の2.2系列、
頻繁にXamarin.Formsプレビュー版2.2.*系列が更新されているので、それが正式版になるまで待った方が無難です。


バージョン2.2が出るまでに環境構築を覚えておきたい!って思った方用に情報をまとめておきました。

下記TIPSはどのバージョンでも共通した内容なので覚えておいて損はありません。



~準備編~

・Xamarinのバージョンをベータ版を使用する
 ツール -> オプション -> Xamarin -> Other -> Beta版を選択
 https://developer.xamarin.com/recipes/cross-platform/ide/change_updates_channel/



~プロジェクト作成~

・新規プロジェクト作成
 Cross-Platform -> Blank App(Xamarin.Forms Potable)を選択


・ビルド構成を設定する
 ソリューションエクスプローラーにあるソリューションを右クリックを押してビルド構成を選択


・ソリューション全体のXamarinパッケージをアップデートする
 ツール -> Nuget -> ソリューションのNugetを管理する -> 更新プログラムからパッケージを更新。
 ※表題どおりバージョンが2.1.0.6529はアップデートするとエラーばかり出て使えないので注意。


~番外編~

・SQLite-netを使う
 http://javatechig.com/xamarin/using-sqlite-net-orm-in-xamarin-application



2016年4月4日月曜日

[Xamarin]VSユーザーからみたXamarin入門(2)


今回は広告Admobを表示してみる編です。

※現時点2016.04.04 Businessプラン以上のライセンスでないと使えないようになっています。

まず何をするかというと、Google Play Serviceをインストールすることから始まる。

どうやっていれるんだって思っていたら、

Componentsを右クリックする

ソリューションエクスプローラ内にコンポーネント追加する項目がありました。

Nugetみたいに入れられる機能がある事に感動。

さっそく 検索欄にAdmobといれてインストール。

そしてドキュメントを開いてみると、設定手順が丁寧に書かれている。

(パーミションとか自動でチェック入れろよとか、思ってはいけません)


設定手順通りに、
PropertiesのAssemblyInfo.csにパーミション追加
[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
[assembly: UsesPermission(Android.Manifest.Permission.AccessNetworkState)]

AndroidManifest.xmlにAdmobを追加




この辺りはAndroidStudioと同じ方法。

あとはUIに広告を追加すれば完成。

UIのファイルはResource¥Layoutフォルダ内のMain.axmlファイルになります。
ダブルクリックで開くと馴染み深いGUIデザイナー画面になります。

さっそくツールボックスの中からAdmobを探してみると、、入ってません。

Getting Startにも書かれていないけど、Google公式にあるAdmob導入するHowToにはやり方が載っているので、そこからXMLタグを抜粋して張り付ける。

XAMLのSourceタブを選択して自前でタグと属性を挿入する。

-------
Layoutの属性に追加
xmlns:ads="http://schemas.android.com/apk/res-auto"

このタグを好きな位置に配置
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        ads:adSize="BANNER"
        ads:adUnitId="@string/banner_ad_unit_id">
   

-------

ここまで設定してふと気づく。
Getting Startだけだと設定が足りてないので、
最初から以下のサイトを見ながら設定した方が早いです。

https://developers.google.com/admob/android/quick-start#give_your_app_an_ad_unit_id


一通り済んだから、ビルド実行。

。。。。。


あれ?

User code size, 2702336 bytes, is larger than 131072 and requires aツBusinessツ(or higher) License. android1
Using type `Android.Runtime.JNIEnv` requiresツBusinessツ(or higher) License. android1


なにこれ!Visual Studio Update1だから?

ライセンス開放してくださいよー(切実)

Update2にアップデートすれば可能なんだろうけど、今家の回線が0SIMで繋いでるのでアップデートできません。。

ってことで、いつかのアップデートで対処されるんだろうけど今回はこんな切ない終わり方で終了します。

後日、家の固定回線が使えるようになったときにでもUpdate2にしたときどうなったかを追記します。


次回へ続く。

[Xamarin]VSユーザーからみたXamarin入門(1)

今回は触りだけ。
新規プロジェクトで出来たプロジェクトをビルドしてAndroidスマホでデバッグするまでをやってみたいと思います。


Step1.新規プロジェクトからAndroid→Blank App を選択していつものようにプロジェクトを立ち上げる。


Step2.ソリューションエクスプローラから作ったプロジェクトのプロパティを開いて、新しい項目に着目する。


コンパイラのバージョン設定とかターゲットのAPIバージョンの設定




パッケージ名とパーミションの設定



アンドロイドの固有設定(1)




アンドロイドの固有設定(2)

アンドロイドの固有設定(3)


所感、アイコンの設定やマニフェストの設定、ビルドに関する設定があるようだ。
細かい設定は分からなくてもそのままビルドすれば実機で動くので、ひとまず必要になった時に調整していくことにする。


Step3.実機をUSB接続した状態であとはF5ボタンを押すとデバッグが開始させる。

 Hello worldは以上!



コード書かずに実機でHello worldまで進める事が出来ました。



ついでにソリューションエクスプローラの中をみていくと

フォルダ構成はAndroid Studioとかなり似た構成になっているようです。

ざっくり説明すると

Assetsはメディアファイル関係

Resource内
 Drawableに画像関係
 Layoutに画面レイアウト
 Valuesに文字列などの情報

1つ気になったのは、異なるアイコンサイズ事にアイコンを作らなくていいの?っていう点。
まあ、設定項目がないんだから今のところ開発環境がうまいことやってくれるんだろうって思ってる。(希望)



まとめ
・ほぼ今までと同じ操作でXamarinが使える事。

・GUI周り、フォルダ構成、プロジェクト構成、この部分はAndroid依存要素があるので新たに覚える必要がある。


2016年3月9日水曜日

[RaspberryPi]日本語が文字化けした時の対処方法+Chromiumのインストール


1.Raspi-configの設定
 「Innternnatiolisation Options」
   ↓
 Change Locale
   ↓
 ja_JP.UTF-8をチェックしてデフォルト言語に選択


2.日本語化アプリのインストール
$ sudo apt-get install -y ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname uim uim-anthy jfbterm


3.Chromiumをインストール
$ wget http://launchpadlibrarian.net/199573270/chromium-browser_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb
$ wget http://launchpadlibrarian.net/199573282/chromium-codecs-ffmpeg-extra_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb
$ wget http://launchpadlibrarian.net/199573279/chromium-codecs-ffmpeg_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb
$ wget http://launchpadlibrarian.net/199549151/chromium-browser-l10n_41.0.2272.76-0ubuntu0.14.04.1.1076_all.deb

$ sudo dpkg -i chromium-browser_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb chromium-codecs-ffmpeg_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb chromium-codecs-ffmpeg-extra_41.0.2272.76-0ubuntu0.14.04.1.1076_armhf.deb chromium-browser-l10n_41.0.2272.76-0ubuntu0.14.04.1.1076_all.deb




参照URL
http://start-now.link/100/archives/1930

2016年3月8日火曜日

[RaspberryPi]VPNServerを立てる

VPNサーバーとは
 外部から安全に特定のネットワークへアクセスするサービスを提供するサーバーの事です。

どういう時に導入するの?
 外から自宅のネットワークにアクセスしたい時などは直接複数のポートを開けば良いのだが
セキュリティーホールは開いたポート先のサービス毎に存在することになるので管理が大変だが
VPNサーバーを立てると、外から見えるのはVPNサーバーのポート1つだけになるので
セキュリティーホールはVPNサーバー1つだけとなり、管理がしやすく安全になります。


導入手順
 1.SoftEtherをダウンロードする。


 にアクセスして、

  SoftEhter VPN(Freeware)
   ↓
  SoftEhter VPN Server
   ↓
  Linux
   ↓
  ARM EABI(32bit)

  を選び、最新イメージのダウンロードURLをコピーする。

  $ wget http://jp.softether-download.com/files/softether/v4.19-9605-beta-2016.03.06-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.19-9605-beta-2016.03.06-linux-arm_eabi-32bit.tar.gz
    $ tar zxf softether-vpnserver-v4.19-9605-beta-2016.03.06-linux-arm_eabi-32bit.tar.gz
    $ cd vpnserver


 2.コンパイルする。
    $ sudo make

    ~ライセンスについて聞かれるので承諾する。~


 2.起動時に実行するように設定する。
  まずはvpnserverをシステム側に移動させる
    $ cd ..
    $ sudo mv vpnserver /usr/local/
    $ cd /usr/local/vpnserver
    $ sudo chmod 600 *
    $ sudo chmod 700 vpncmd
    $ sudo chmod 700 vpmserver

  次に起動に必要なファイルを作成
    $ sudo vim /etc/init.d/vpnserver
#!/bin/sh
### BEGIN INIT INFO
# Provides:                     vpnserver
# Required-Start:               $local_fs $network
# Required-Stop:                $local_fs $network
# Default-Start:                2 3 4 5
# Default-Stop:                 0 1 6
# Short-Description:            SoftEther VPN 1.0 RC2
# Description:                  Start vpnserver daemon SoftEther VPN 1.0 Server
### END INIT INFO

DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/vpnserver

. /lib/lsb/init-functions

test -x $DAEMON || exit 0

case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN 1.0 Server" "vpnserver"
$DAEMON start >/dev/null 2>&1
touch $LOCK
log_end_msg 0
sleep 3

;;

stop)
log_daemon_msg "Stopping SoftEther VPN 1.0 Server" "vpnserver"
$DAEMON stop >/dev/null 2>&1
rm $LOCK
log_end_msg 0
sleep 2

;;

restart)
$DAEMON stop
sleep 2

$DAEMON start
sleep 5

;;

status)
    if [ -e $LOCK ]
    then
        echo "vpnserver is running."
    else
        echo "vpnserver is not running."
    fi
;;
*)

echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0


    $ sudo vim /etc/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop

[Install]
WantedBy=multi-user.target

    $ sudo chmod +x /etc/init.d/vpnserver
  $ sudo systemctl start vpnserver
  $ sudo systemctl enable vpnserver


 3.ブリッジする
  $ sudo apt-get install bridge-utils
    $ sudo vim /etc/network/interfaces
# loopback
auto lo
iface lo inet loopback

# Ethernet port
auto eth0
iface eth0 inet manual

# Bridge interface
auto br0
iface br0 inet dhcp
bridge_ports eth0

#その他
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp


 4.再起動して自動起動しているか確認する。
    $ sudo reboot
    $ sudo service vpnserver status


 5.外からアクセスできるようルータ側の設定を行う
   SoftEhterは
          TCPの449と2222
          UDPの500と4500
   を使うのでポートを開けておく。


参考URL


2016年3月4日金曜日

[RaspberryPi]Asteriskを使う(3)Systemdで起動設定編

Jessieだとinitではなくsystemdになっていてインストール時にサービス登録されているのかな?って調べてみると登録されていなかった。。

ということで起動時にasteriskが立ち上がるように設定する事にした。


参考にしたサイトはここ。

http://www.voip-info.jp/index.php/BeagleBone_Black_Asterisk


$ cd /etc/systemd/system
$ sudo vim asterisk.service
---
[Unit]
Description=Asterisk Open Source PBX
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/asterisk -U asterisk -G asterisk

[Install]
WantedBy=multi-user.target
---


$ sudo ln -s /usr/lib/systemd/
$ sudo ln -s /usr/lib/systemd/
$ sudo ln -s /lib/systemd/system/asterisk.service /etc/systemd/system/multi-user.target.wants/asterisk.service
$ sudo systemctl enable asterisk
$ sudo systemctl start asterisk


再起動して以下のコマンドで動作しているか確認。
ps -ef|grep asterisk
systemctl|grep asterisk

[RaspberryPi]Asteriskを使う(2)G729インストール編


音声コーデックG729をインストールする。


参考にしたサイトは以下のところです。
https://smallhacks.wordpress.com/2014/01/13/using-asterisk-g-729-with-asterisk-on-raspberry-pi-or-other-arm-device/
http://www.adeleda.com/compiling-g729-codecs-for-arm-on-raspberry-pi-b-with-bcg729-en.html
https://disqus.com/home/discussion/adeleda/compiling_g729_codecs_for_arm_on_raspberry_pi_b_with_bcg729/


それらをまとめて一発でインストールできるようにした手順は以下の通り。


sudo wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.1.tar.gz
sudo ./configure --libdir=/lib
sudo make
sudo make install

sudo wget http://asterisk.hosting.lv/src/asterisk-g72x-1.3.tar.bz2
sudo bzip2 -dc asterisk-g72x-1.3.tar.bz2 | sudo tar xvf -
sudo apt-get install autoconf automake libtool autoconf-doc libtool-doc
cd asterisk-g72x-1.3
sudo ./autogen.sh
sudo ./configure --with-bcg729 --with-asterisk-includes=/usr/include --with-asterisk130
sudo make
sudo make install




最後は動作確認
asterisk -vvvvr
# core restart gracefully

これでG729の項目が表示されていればOK。

[Raspberrypi]Asteriskを使う(1)インストール編

asteriskを使う

簡単にインストールする場合は

 apt-get install asterisk -y


でインストールできるんだけど光電話パッチを入れたりしたかったので
2016.03.03時点の最新ソースからビルドを行ってみた。

http://www.voip-info.jp/index.php/Asterisk_13

上記リンクを参考に進めようと思うが、
記事の内容はredhat向けに書かれているで、本記事でdebian向けに書きなおした
インストール手順を書いていく。

(光電話パッチは2014年時点のものでも問題なくパッチ当てができました)


sudo apt-get install -y subversion libncurses5-dev uuid-dev libjansson-dev libxml2-dev libsqlite3-dev libbluetooth-dev
sudo apt-get install -y libsqlite3-dev libncurses5-dev bison libssl-dev libnewt-dev zlib1g-dev procps gcc make binutils doxygen g++ libxml2-dev

sudo groupadd -g 5060 asterisk
sudo useradd -g 5060 -u 5060 -d /var/lib/asterisk -s /sbin/nologin asterisk
cd /usr/local/src/
sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
sudo tar zxf asterisk-13.7.2.tar.gz
cd asterisk-13.7.2/
sudo wget http://ftp.voip-info.jp/asterisk/patch/local/13/chan_sip_hikarihgw.141202-01.patch
sudo patch -p0 < chan_sip_hikarihgw.141202-01.patch
sudo ./contrib/scripts/get_mp3_source.sh
sudo ./contrib/scripts/get_swagger_ui.sh
sudo ./configure

日本語音声ファイルをインストールする
sudo make menuselect


sudo make
sudo make install
sudo make sample
sudo make config


自動起動になっているか確認
sudo chkconfig asterisk --list


この後はG.729コーデックのインストールとか初期設定編へと続く。


2016年3月2日水曜日

[RaspberryPi]有機液晶OLED SSD1331を使ってみる



RaspberryPiで何かいい液晶がないか探してみたら
SPI通信で表示できる有機液晶SSD1331というものを見つけた。
値段は送料込みで11$くらいなので1300円くらい。



製品仕様
サイズ:0.96インチ
解像度:96*64
発色:65k
ドライバIC:ssd1331

ピン配置GND: Power ground
VCC:2.8-5.5V power supply
D0: CLK clock
D1: MOSI data
RST: Reset
DC: data / command
CS: chip-select signal


誰かサンプルプログラムを書いていないか検索してみたら、やはりいました。
https://www.raspberrypi.org/forums/viewtopic.php?t=126811&p=871760

ここから行き着いた先はGithub



【配線図】

RaspberryPiのピンの始まりを間違えないように確認して、



液晶とこんな感じに接続する。
完全なSPI通信出ない気がするけど、今回は動作確認なので同じ配線にする。


GithubにあるPythonのソースコードをダウンロードして

$ python clock.py

実行してみると、、、




動いたー!





初期不良じゃなくてよかった。
しかも結構明るくて良い。
あとなぜか電源ラインVCCを外してもそれなりに画面写ってました(笑)

2016年2月29日月曜日

ラズベリーパイ4周年記念にRaspberry Pi3 Model B debut!

ラズベリーパイが4周年記念ということでRaspberryZero出て半年も立たずに次も出るのRaspberryPi3が出てきた。
今回の目玉は、、、

・Wifi 2.4GHz搭載
 →今まで占有してたUSBポートが1つ空きます。

・Bluetooth4.1搭載
 →Bluetooth対応キーボードやマウスがそのまま流用できそう

・CPUがCortex-A7からCortex-A53へアップグレード
 単純に言えば64Bit対応になった事が一番大きい。
 どの程度の性能かというと初期のAtomより少し高く肩を並べるくらい。

 変化点を見ていくと、、、
 →Cortex-A53とは、2012年にbig.LITTLEコアで省エネと高パフォーマンスを両立しようと
   打ち出された省エネ側のCPUコアである。
 →SIMD命令のNEONに対応などがされている。
 →64Bit命令セットを対応することで、64Bitバイナリを実行するときは、
  32Bit命令セットの負債を捨ててよりシンプルな構成になるので若干の速度アップがあるかも。
 →アーキテクチャ側の変更でインオーダー処理している部分が今までは同時2発行が
   限定的だったが、限定的でなくなるので処理性能がアップする。(若干)

・消費電力がアップ
 →推奨が5V2.5Aなので、タブレット以上の電源が必要になりそう。


性能も上がって無線機能も標準搭載して値段は据え置き。
また5000円代で買えるのが嬉しい。

販売はRSコンポーネントかPimoroniで行うのでZEROが入手出来ないけど
手元にあるRPiのバージョンアップという名目で1つどうでしょうか。


個人的には
RaspberryPi3 もしくは
RaspberryPi Zero + ESP6288(Wifi+GPIO) or ESP32(Wifi+BTLE) という
メインCPUにRPI 、UI側を担当 
サブCPUにESP5288で通信処理もお任せするような構成もいいかなと思う。

Androider