Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

C#でクラスとか変数とかアレコレ命名する時のルール

命名規則とか忘れちゃう

というか、気にした時に

・・・(・∀・i)タラー・・・どうだっけ???

ってなっちゃうのでここにメモしておきます。
MSDN命名規則にきちんと書いてあります。

名前に関するガイドライン

Identifier Case
class Pascal [AppDomain]
列挙型 Pascal ErrorLevel
列挙値 Pascal FatalError
イベント Pascal ValueChanged
例外クラス Pascal WebException
読み取り専用の静的フィールド Pascal RedValue
Interface Pascal IDisposable
方法 Pascal ToString
Namespace Pascal System.Drawing
パラメーター Camel <型名>
コントロール名 Camel dataGridView1
プロパティ Pascal BackColor

優良アダルトサイト紹介の最終形態!!MaxInfo

RaspberryPiをSlackのBOTにしてみた

RaspberryPiにPHPでSlackのBOTを作ってみた

一部で流行っているチャットツールSlackってのがあります。
チャットワーク等のツールと同類のものですが、他のクラウドサービスとの親和性とか使いやすいインターフェイスとか色んな所で褒められているツールらしいです。

私も試しに使っています。
たしかに分かりやすい。
基本英語ですが、中学英語の記憶をたよりに雰囲気でなんとかなっています。

このSlackには、他のWebサービスクラウドサービスと連携を取るためのAPIが多数用意されていて、その中の一つを使ってBOTを作ろうと試みます。
BOTはRaspberryPiに仕込みます。
なぜわざわざRaspberryPiに仕込むのかと言いますと。

(*´∀`)ノ「電気つけて!温度は?湿度は?」

などと話しかけることにより、BOT(RapsberryPi)が接続されているセンサーの値やら家電の電源制御やらをやってくれるって話です。
※センサー値取得及び荷電制御は後日掲載予定

前提条件
  • RapsberryPiがインターネット上に公開されていること
  • RaspberryPiでWebサーバーが動作/起動されていること
  • RaspberryPiでPHP5が動作していること
  • Slackのアカウントを持っていること
  • PHPのコードの書き方について自分で調べられるか知っていること

<<目次>>

  • PHPファイルを作成
  • RaspberryPiにPHPコードを配置
  • OutgoingWebHooksをSlackに導入する
  • 実際にメッセージをSlackで投稿してみる
  • 話しかけるユーザーによって動作を変化させる

PHPファイルを作成

何も考えず、このファイルを用意する。
ファイル名は、test.phpとか好きなのを適当に。

<?php
echo '{"text":"はろー!"}';  
?>

RaspberryPiにPHPコードを配置

RaspberryPiに上記で作成したphpファイルを配置する。
配置するのは、WebサーバーのDocumentRootに。

OutgoingWebHooksをSlackに導入する

導入ページにアクセスし、「Outgoing WebHooks」を選択。
指示に従って設定するだけです。

  • Channel     → TriggerWords(打ち込んだ単語)を拾うチャンネルを指定。
  • TriggerWords   → 反応させたい単語を登録。複数登録するときはカンマ区切りで(「hello」とか「オン」とかの単語)
  • URL       → RaspberryPiに配置したphpファイルを指定(例: http://www.foo.bar/test.php)
  • Token      → 変更しない
  • DescriptiveLabel → 空欄でもいい
  • CustmizeName   → 好きなのに変える
  • CustomizeIcon   → 変えたい場合は適当に変える(雰囲気出るので変えるのをオススメ)

設定できたら、「Save Settings」ボタンをクリック!!

実際にメッセージをSlackで投稿してみる

Outgoing WebHooksの設定にある「Channel」で指定したチャンネルにメッセージを投稿します。
投稿する文字列の中に、TriggerWordsで指定した単語を混ぜて投稿すると

はろー!

が返ってくるはずです。

話しかけるユーザーによって動作を変化させる

APIの説明はここにあります。(英語)
$_POSTで受け取れる情報の中に、「user_id」、「user_name」の項目があるので、メッセージを投稿した人を識別して処理を行うことができそう。

こんな感じのソースで判別できました。
このサンプルでは、「hello」と「world」ってTriggerWordsを指定していると仮定しています。

<?php
$token = $_POST['token'];
$team_id = $_POST['team_id'];
$channel_id = $_POST['channel_id'];
$timestamp = $_POST['timestamp'];
$user_id = $_POST['user_id'];
$user_name = $_POST['user_name'];
$text = $_POST['text'];
$trigger_word = $_POST['trigger_word'];

if (strcmp($user_id,'ここに反応させたいユーザーのIDを記述') == 0) {

    if(preg_match('/hello/',$text)) {
        echo '{"text":"はろーだぜ!"}';  
    }else{
        if (preg_match('/world/',$text)) {
            echo '{"text":"わーるどだぜ!"}';  
        }
    }
} else {
    echo '{"text":"お前の話はつまらん!!"}';  
}

?>
user_idってどうやって調べる??

って所ですが、Slackの画面上の何処に記載されているのかわからなかったので

$user_id = $_POST['user_id'];
echo '{"text":"user_id = '.$user_id.'"}';  

ってコード書いて調べてみました。


優良アダルトサイト紹介の最終形態!!MaxInfo

RaspberryPiにインターネット経由でファイルを転送する方法 for Windows

Web公開したRaspberryPiにファイル転送する

Webに公開したRaspberryPiにどうやってファイルを転送するか。
転送するファイルはphpファイルだったりpythonファイルだったり。

FTPサーバーをインストールしてアレコレというのを考えましたが、ルーターの設定で新しいポートを開けるのもどうかなと。。。。
なのでちょっと調べてみました。

SFTPと言うのがあるらしい

という情報を発見。(*゚Д゚*)ェ…
SSH File Transfer Protocol」というらしいです。
開けているSSHのポート番号でアクセスしてファイルの転送が可能らしい。

(*´∀`)ノ 「天下のWindowsさんなら、SFTP対応のクライアントがあるだろう!」

と安易に考えて調べたらありました。

WinSCP

ってアプリです。
ポート番号とURL、ログインユーザーIDとパスワードを指定するだけでOKです。
簡単にファイル転送できてしまいました。
   ↓
WinSCP Download
ここにアクセスして、「Installation package」を選択するだけ。
インストールも利用も日本語でイケます。

ちなみにLinuxですと「FileZilla」で同様のことが可能ですね



優良アダルトサイト紹介の最終形態!!MaxInfo

RaspberryPiに「Apache2」「PHP5」「MySQL」「phpAdmin」をインストール

RaspberryPiに「Apache2」「PHP5」「MySQL」「phpAdmin」をインストール

RaspberryPiをインターネットに公開してみました。
せっかく公開したので遊んでみようと思います。
そのためのツールとして
RaspberryPiにApache2、PHP5、MySQLをインストールしてみます。

到着点として

  • インストールするだけで特に設定は行わない
  • とりあえず標準のWebページが表示されるところまで
  • MySQLはインストールするだけで、DB作成とかユーザー作成とかは行わない

本当に入れるだけのメモ。
そっから先は後日行う。

前提条件

インターネット経由であれローカルであれ、SSHなどでログインしてコマンド叩ける状態であること。

<<目次>>
  1. RaspberryPiのアップデート
  2. Apache2のインストール
  3. Apache2の動作確認
  4. PHP5のインストール
  5. PHP5の動作確認
  6. PHP5-mysqlのインストール
  7. MySQLのインストール
  8. phpMyAdminのインストール
  9. phpMyAdminの確認

RaspberryPiのアップデート

セットアップ失敗しちゃいやなので、アップグレードしときます。

$ sudo apt-get update

Apache2のインストール

apt-getでインストール。
コマンド叩いたら待つだけです。

$ sudo apt-get install apache2

Apache2の動作確認

コンソールでifconfig叩いて自分のIPアドレスを確認し、ブラウザアクセスしてみる。

$ sudo ifconfig

上記コマンドで表示される「inetアドレス...」と表示されている部分で確認。

ブラウザで確認したIPアドレスにアクセスしてみる
※例はローカルIPアドレスの場合

http://XXX.XXX.XXX.XXX

うまくイケば、「It Works!」なページが表示されるはず。
ちなみに、

DocumentRootは「cat /etc/apache2/sites-available/default」に記載されており、標準では「/var/www」になっている模様。

PHP5のインストール

$ sudo apt-get install php5

これも待つだけ。

PHP5の動作確認

index.htmlをphpファイルとしてコピー

$ cd /var/www/
$ sudo cp ./index.html ./index_php.php

ブラウザで指定して「I work!」が表示されれば動作している

http://XXX.XXX.XXX.XXX/index_php.php

もうひとつの方法。
nano等のエディタ使って下記の内容でphpinfo.phpファイルを作成します。
ファイルの作成場所は、index.htmlと同じディレクトリ。

<?php
  phpinfo();
?>

作成したらブラウザでアクセスしてみます。

http://XXX.XXX.XXX.XXX/phpinfo.php

すると、動作しているならPHPの情報がズラッと表示されるはずです。

PHP5-mysqlのインストール

コマンド叩くだけ

$ sudo apt-get install php5-mysql

MySQLのインストール

これもコマンド叩きます。
※rootのパスワードとか聞かれたかもしれませんが・・・そこはお好みで。

$ sudo apt-get install mysql-server

phpMyAdminのインストール

このコマンド叩きます。
途中でユーザーとかパスワードとか聞かれます。
そのあたりはお好みで。

$ sudo apt-get install phpmyadmin

こんなの聞かれました。
apache2を選択しました。

選択方法 → スペースバー叩いたら「*」がマークされます
自動再設定をする web サーバ:
 [] apache2
 [] lighttpd

phpMyAdminの確認

まず、設定ファイルを書き換えます

$ vi /etc/apache2/apache2.conf

内容は下記の通り、一番下に追加します。

Include /etc/phpmyadmin/apache.conf

そして、apache2を再起動します。

$ sudo /etc/init.d/apache2 restart

再起動後、ブラウザで下記のURLにアクセス!!

http://XXX.XXX.XXX.XXX/phpmyadmin/

ログイン画面が表示されたらOKです。


優良アダルトサイト紹介の最終形態!!MaxInfo

かなりの高機能!! シリアルポートエミュレータ for Windows

シリアル通信の開発環境 for Windows7

Windows8.1とかでも動作するのかな?
そこは未検証です。

久しぶりにWindows7C#を使ったシリアル通信のソフトを書かなければならなくなりました。
最近のPCにはD-Subのコネクタなんて実装されていません。
なので、

・擬似的にCOMポートを作れる(複数作りたい)
・擬似的に作ったCOMポートに、自作アプリからデータを送信したら何らかの形で閲覧できる
・擬似的に作ったCOMポートから自作アプリにデータを送信できる
・擬似的に作ったCOMポートから、実際にPC存在するCOMポートへデータを流せる

書けがキリがないですが、まぁ、上記に書いてあることができれば当面は問題なさそうです。
んで、調べてみたら・・・・ものすんごいのがありました。
これが無料で使えるとは驚きです。

こちら

Virtual Serial Ports Emulator

こちらのアプリで全て解決。
英語のアプリですが、直感的なアイコンと分かりやすい単語のメニューなのでなんとかなります。

  • Virtual device: connector
  • Virtual device: data splitter
  • Virtual device: pair
  • Mapper device
  • User mode device: TcpServer
  • User mode device: TcpClient
  • User mode device: Serial Redirector
  • User mode device: UDP Manager
  • User mode device: Bridge
  • Python scripting system
  • x86 and x86_64 processor architecture support
  • VSPE API (C/C++ header and static library) for native language developers
  • VSPE API Python bindings for Python developers
  • Embedded HTTP server
  • Data monitoring

無料なのは32bit板のみ

です。
64bit版は有料ですが、32bit版で何も問題なく使えています。

これはいい。


優良アダルトサイト紹介の最終形態!!MaxInfo

RaspberryPiのSDカードをイメージにして保存 for Linux

ddコマンドを使って、SDカードをイメージにする

Linux(Ubuntu14.10)で、SDカードの内容をそのままバックアップし、いつでも元に戻せるようにしたい。
と申しますのも、RaspberryPiをアレコレ触っていると、設定ファイル編集やらアプリインストールを繰り返すと思います。

GPIOを使った電子制御とか、サーバーとか様々に利用したいと思うのですが、使い続けていると初期状態からかけ離れた設定になってしまいがちです。

そこで、目的に応じてSDカードのバックアップをとっておき、目的に合わせて入れ替えられたら便利です。
そんな方法を考えて実施した手順メモを公開することにします。

目次
  1. SDカードのセットアップ(目的の状態に設定する)
  2. SDカードをLinuxパソコンにセットしてデバイス名を確認
  3. ddコマンドでSDカードをまるごとイメージ化
  4. イメージをSDカードに戻す
  5. 気づいたこと

SDカードのセットアップ(目的の状態に設定する)

RaspberryPiで自分がバックアップを取りたい状態の設定を行う。
今回はこの環境までセットアップ

  • 無線ドングルセットアップ
  • clispインストール
  • zshインストール
  • Emacsインストール

SDカードをLinuxパソコンにセットしてデバイス名を確認

下記のコマンドで表示されるメッセージから、デバイス名を読み解く。
おそらく、だいたい下記のようなメッセージが残っているはず
私の環境ではmmcblk0というのがデバイス名らしいです。

$ dmesg 

...
[33442.005767] ath5k: ath5k_hw_get_isr: ISR: 0x00000080 IMR: 0x00000000
[38626.087602] mmc0: new SDHC card at address 59b4
[38626.088641] mmcblk0: mmc0:59b4 SDC   14.7 GiB 
[38626.094319]  mmcblk0: p1 p2 < p5 p6 > p3
[38626.591599] EXT4-fs (mmcblk0p3): recovery complete
...

ddコマンドでSDカードをまるごとイメージ化

ddコマンドでイメージ化
※コマンドを実行すると、shell上には何も表示されずだんまりになるが処理は走っている

$ sudo dd if=/dev/mmcblk0 of=/home/k/rpi_img/image00.dd

イメージをSDカードに戻す

イメージ化の手順を踏むと、SDカードがまるまるファイルとして保存される。
それをSDカードに戻す方法も書いておく。
イメージ化した時とパラメータが逆になる。

$ sudo dd if=/home/k/rpi_img/image00.dd of=/dev/mmcblk0

気づいたこと

ddコマンドでSDカードのバックアップを取りましたが・・・・・・ものすごく時間がかかりました。
16GBのものを使ったんですが、イメージ化、SDカードに戻す、それぞれについて2時間弱の時間を必要としました。
すぐにバックアップに戻すって使い方には向いていないですね。
※手順がわかっているんなら、OSのインストールからやったほうが早いかも。


優良アダルトサイト紹介の最終形態!!MaxInfo

RaspberryPiをMyDNS.jpを利用して外部に公開

RaspberryPiをMyDNS.jpを利用して外部に公開してみた

パソコンほど電気代がかからず、静かに動作するRaspberryPiをインターネット経由でどこからでもアクセスできるようにしたい。
環境を整えた時のメモ。
※使っているルーターがダイナミックDNSに対応していたため、MyDNS.jpに通知するための作業をルーターでやってしまった。
他ブログで紹介されている、アプリやシェルスクリプトを使った定期的なMyDNS.jpへの通知は行っていない。

★★目次★★

  1. RaspberryPiのIPアドレスを調査
  2. 自宅のグローバルIPを調べる
  3. MyDNS.jpにユーザー登録
  4. MyDNS.jpの設定
  5. 自宅ルーターの設定(ポート開放)
  6. 接続してみる

RaspberryPiのIPアドレスを調査

RaspberryPiのコンソールでコマンド叩くだけ。

$ sudo ifconfig

自分に割り当てられているIPアドレスが表示されるはず。
後で使うので控えておく。(例:192.168.1.30 とか振られてるはず)
※理想は固定でIPアドレスを設定すること
DHCPで動作しているとしても・・・・まぁ・・・ルーターを再起動しなければ変動しないからつながるかな。。。

自宅のグローバルIPを調べる

専用サイトで調べる。
これもメモしておく。
http://www.cman.jp/network/support/go_access.cgi
ブラウザでアクセスするだけで、自宅に割り当てられているグローバルIPがわかる。

MyDNS.jpにユーザー登録

これも特に記載しない。
 Free Dynamic DNS (DDNS) for Home Server and VPS etc | MyDNS.JP

IDとパスワードを指定して、サイトにユーザー登録するだけ。
登録終了すると、メールでIDとパスワードが連携される。
※無くさないように注意。

MyDNS.jpの設定

こちらを参考にした。
ページの中ほどに「次に、MyDNS.jp の登録。」というくだりがある。
このページを参考にして「DOMAIN INFO」と「IP ADDR DIRECT」を設定する。

DOMAIN INFOでは、独自ドメインにせずに、自分の好きなサブドメインにした。
hoge.live-on.netとか適当にこのみのやつを入れる。

自宅ルーターの設定(ポート開放)

うちのルーターはPlanexのMZK-W04NU。
本家のサイトにポート開放のやり方が書いてあった。
「ローカルサーバー」って項目の設定を触るらしい。
 sshで利用したいから、80-80だけじゃなくて22-22なポートもオープンする。
※80はWebサーバーの標準ポート、22はssh接続するときの標準ポート
※ブログには80、22と書いちゃってるが・・・・心配なので実際はポートを変えてある。

自宅ルーターの設定(MyDNS.jpへの定期的なアクセス)

 MyDNS.jpには定期的にアクセスする必要があり、アクセスが滞るとユーザーアカウントが削除されてしまう。
 幸い、利用しているPlanexのルーターには、「ダイナミックDNS」なる設定項目が存在し、MyDNS.jpのユーザーIDとパスワードを入力しておけば、最短1日おきに自動でアクセスしてくれる。
 MyDNS.jp以外にもダイナミックDNSサービスサイトに対応している。
 ※この機能のおかげで、wgetとcrond等の仕組みを使わずに自動アクセスできる。

接続してみる

sshコマンドで接続してみる

$ sudo ssh foo@hoge.live-on.net

fooはsshログインするユーザー名。
hogeはMyDNS.jpのDOMAIN INFOで指定したサブドメイン
サブドメインとか何にしたか忘れちゃったら、MyDNS.jpにログインして調べれば解決。



優良アダルトサイト紹介の最終形態!!MaxInfo