このブログを検索

2016/12/24

spamassassinに学習させる



spamassassinはほぼ完ぺきにspamを駆除していたが、

数か月たつとすり抜けるメールが増えてきたので、
学習させることにした。

#spamを学習
/usr/bin/sa-learn --spam /home/*/Maildir/.INBOX.spam/cur

#spamでないメールを学習
/usr/bin/sa-learn --ham /home/*/Maildir/cur


当然、学習させるspamメールは手動でフォルダに移動させねばならない。

私はspamassassinでspam判定したメールはspamフォルダに移動したりせず
いきなり消している。

誤判定をチェックできないがまあ、ほとんど試験的なアカウントなので。

普通はspamフォルダを作ってそこに移動させると思うが、
そのフォルダを作るには

maildirmake というコマンドを使うらしいが、そんなコマンドがない。

makedirで作ればいいのだろうがわざわざコマンド(スクリプトらしい)を使うくらいだから、
複数作ったり何か規則があったりするのだろう。

面倒くさいのでthunderbirdでspamフォルダを作った。

INBOXのしたに「spam」というフォルダを作った場合、
下記のように指定する。

/home/hoge/Maildir/.INBOX.spam/cur



これを毎日cronで動かすようにする。

0 3 * * * root /home/hoge/spamlearn.sh


中身

------------------------------------------

#! /bin/sh

# スパムメールの学習
/usr/bin/sa-learn --spam /home/*/Maildir/.INBOX.spam/cur

# 通常のメールを学習
/usr/bin/sa-learn --ham /home/*/Maildir/cur

echo done:`date`>> /home/hoge/log.txt

--------------------------------------

最後のechoは実行したかどうかわかるようにするためのもの。

コマンドをバッククォートで囲むと実行結果をechoできる。

最初 ./log.txt としたら書かれなかったのでフルパスを指定した。


2016/10/30

ケースに入れた



ケースに入れた。

持ち歩いて見た。

最初はアンテナバーはケースの長い辺に沿っていたのだが、

この縦長のケースを持ち歩くと縦にポケットに入れることになり、

そうするとアンテナが地面に対して垂直になり、そうすると電波がほとんど入らない。

そこでアンテナの位置を変えて、縦にしたときに地面と並行になるようにした。


また、イヤホンジャックは最初はボリューム・選局のつまみと反対側にあったのだが、

これも持ち歩くときに都合が悪いので同じ側に替えた。


基盤・電池・スピーカーはめんどくさいのでテープでとめている。



外出時に持ち歩いて見たが、思ったより電波が入らない。

特に、駅ではものすごい雑音が入って使い物にならない。


まともに聴けたのは飲食店でテーブルに置いたときくらいだった。


そしてプロ野球の日本シリーズを聴きながら店内のテレビの映像を見ていたら、

映像がラジオより5秒くらい遅い。

BS放送だった。


5秒というのは大きい。せっかくの生中継なのに、5秒もずれているとは。


ラジオは中学生のころはよく聴いていたが最近は全然聴かない。

聴くのはiPhoneに入った音楽ばかり。


インターネットラジオとかは聞かない。



そうそう、ついにニッポン放送が入った。


このラジオは、NHK第一、NHK第二、AFN、TBS、文化放送、ニッポン放送がはいる。

ただしAFNと日本放送は非常にかすか。


あと、ニッポン放送よりさらに高い周波数にあわせると、ピーギャーという雑音がなる。

そして指を触れたり離したりすると音が変わって、テルミンみたいに遊べる。




2016/10/01

奇妙なできごと

ある日、自宅のwindows10でpinでログインできなくなった。

間違っているという。

pinは間違っていない。確信があった。

4桁の数字で、変更したおぼえもない。


なんでだろうと思いつつ、メールアドレスでログインし、pinを再設定した。

ついでに、なんとなくマイクロソフトアカウントのプロフィール画像を設定した。

今までは何も設定していなかった。


翌日、職場のPCにログインしようとしたら、夕べ設定したマイクロソフトアカウントのプロフィール画像が表示されている!

結構大きく表示されるので周りの人に見られてしまう。


もちろん職場のPCにログインするアカウントはマイクロソフトアカウントではない。


なんでだとは思ったがとりあえずマイクロソフトアカウントの画像を消した。


pinが変わっていたのも変だし、乗っ取られ的なことかとも思ったが・・・


最近多忙で寝不足だったり二日酔いだったりしてかついろんなPCやデバイスにいろんなIDやパスワードを入力してガチャガチャやってるから、

自分のミスだと思うんだけど・・・

特定のアカウントでしか受信できない

postfix + dovecot でメールを使っていて、数個のアカウントがあるのだが、
そのうち一つは送受信できているのだが、

それ以外のアカウントは送信はできるが受信ができない。

それらのアカウントにメールを送るとエラーになって戻ってきたりはせず、

メールボックスには届いているようなのだが、受信ができない。



受信はiphoneでしている。

ほかのメーラーではどうかと、パソコンのthunderbirdで受信してみる。

thunderbirdはメールアドレスを入力すると設定を検索してくれる。

検索されて自動設定された設定だと、受信できた。


じゃあiphoneの設定が間違っているのかと、設定を比較してみると、

port番号はthunderbirdは143でiphoneは993になっていた。

993というのはuse sslを選択すると勝手に設定されたものだ。

use sslをオフにすると143になるがそれだとdisabledとか言われてしまう。

use sslをオンにして、かつ、ポート番号を993から143に変更したら受信できるようになった。


とりあえず解決・・・

と思ったが、もともと受信できていたアカウントのiphoneの設定をもう一度見てみると、

こちらは use ssl でポート番号は993だ。143に変えることもできる。


しかし、これ以外のアカウントは143でしか受信できない。


同じドメインの同じサーバなのに・・・。

何が間違っているのか。



受信できないアカウントは、 メールを送ると /var/mail/アカウント名 が更新されていて

mail -u アカウント名

で読むことができる。




先日spam対策のために設定したprocmailが原因だった。

各ユーザのホームディレクトリに .forward と .procmailrc をコピーして解決。

これがないと、/var/mail/アカウント名 に行ってしまう。



ただし、993/143問題はまだ謎だ。

メール設定は何度も変更したり設定追加したりしているので
自分でも何が何だかわからなくなっている。

一回全部消して作り直したいな・・・








2016/09/26

オームの法則すら

ラジオを作るといっても、誰かの設計した回路を、部品も指定されたものを使って、組み立てているだけだ。自分が創意工夫したりすることは一切ない。

この抵抗がなぜ1KΩなのか、このコンデンサがなぜ0.47μFなのか、
などの理由すらわからない。

わかるのは電池のプラスマイナスとか、ダイオードや電解コンデンサには極性があるとか、そんなことでしかない。

頻繁につかわれかつキーとなる部品であるトランジスタについては、何度もその動作原理や効果を調べているのだが、正直言っていまだにさっぱりわからなくて、情けなくなる。

これは、おそらくものすごく基本的なことが欠けているからだと思う。

たとえば、先日、こんな疑問を持った。

オームの法則というのがある。乾電池1個を回路につなぐと1.5Vの電圧がかかる。
そして電流が流れる。

その時流れる電流は、電圧÷抵抗値で求められる。

抵抗が100Ωであれば、1.5/100=0.015Aだ。

しかし、実際にテスターで電流を測ってみると計算通りの値にならない。
テスターが壊れてんのか?
電圧は1.5Vマンタンではないがそれくらいの値を示す。

わたしはテスターを電池切れ確認装置として使っていたから、それはわかっている。
しかし電流を測ることはまずない。

そもそも、抵抗が全くない状態で、電池の両極を電線でつないだらその電線にはどれくらいの電流が流れるのか?

E=I*Rの Rがゼロの場合だ。

数学的に言えば無限大ということになる。

が、実際には抵抗ゼロというのはあり得ず、抵抗をつけていない電線にも抵抗はある。

さらに、電池そのものにも内部抵抗というものがある。

テスターのツマミをDCmAの500にして、電池の両極に触ってみると、
400くらいで止まる。

400mAしか流れていない?電線や電池の内部抵抗があるとはいっても、
400mAしか流れないということはその抵抗は

400mA=0.4A
1.5=0.4*R
R=1.5/0.4=15/4=3.75Ω

そもそもなんでテスターの電流は500mAまでしか測れないのか。

自分の持ってるのは安物だからだろうと買おうとしてわかったのだが、私の持っているのはSANWAのCP-7Dという定番商品で、もう20年以上前に買ったものだが今買うと4000円くらいするそこそこのモノだ。

1000円とかのテスターもあるし、そんなに安物ではない。

先ほどの計算での3.75Ωというのは、大きいのか小さいのか。
内部抵抗など0.01Ωとかだと思っていた。

1.5=A*0.01
A=1.5/0.01

電池を直結したら150Aくらい流れるかと思っていたのだ。
150Aってどれくらいなのか電気の強さはボルトで表すが、電流はなんなのか。
強さではなく量なのか。

・・・・などということを疑問に感じている。

「オームの法則くらい知ってるよ」と思っていたが、それすら危ういのだ。

ラジオを作るきっかけ

最近ラジオを作っている。

私はもともとソフトウェア開発者で、今はネットワークエンジニアまたはシステムインテグレータみたいなことをしている。

何も知らない人はそういう仕事は「理系」の人がやることだと思っているが、そうではない。確かに理系の人のほうが向いているかもしれないが、数学も物理も必要ない。

でも触っている装置は精密機械であり電気仕掛けであるから、その動作原理などは知っておくにこしたことはない。

しかし、まったくと言っていいほど知らない。

私だけでなく、IT、情報通信産業というものに従事しているほとんどの人は、非常に簡単な、低級なことしかやっていない。


その割には「技術者」と呼ばれ、時代の最先端を行っているかのようなイメージを持たれて、悪い気はしないが、自分の薄っぺらさや無能さは痛感している。

どんな仕事だって長くやっていれば同じことの繰り返してアタマを使うこともなくつまらなくなるのだろうとも思うが、自分がダメなだけかもしれない。


話が長くなりそうなので本題に移るが私がラジオを作るようになったきっかけはraspberry piである。

piは、小さなコンピュータである。

だが、それだけではない。piにはGPIOというインタフェースがついている。

それを使って、さまざまな装置を制御できる。


だいたい最初はLEDをつける。

くだらない。ただの豆電球じゃねえか。


最新のテクノロジーを使って、LEDを点滅させて喜んでんのか。アホらしい。


という気分になった。



LEDを買いに電子部品の店に行って、いろんなパーツを見る。

人もたくさんいる。


そういえば中学生のころ授業でラジオを作ったっけ。


家には半田ごてやテスターもある。


ちょっと基本的な電子回路くらい理解しておこうか、

という感じでラジオを作ってみることにした。

2016/09/25

スピーカーとボリューム




スピーカーとボリュームがついた。

ボリュームはスイッチも兼ねている。

写真ではスピーカーがトランスに直結しているが、

本当はイヤホンジャックがあって、イヤホンと切り替えられるようにしている。


最初に作ったときはスピーカーがならず、イヤホンをささないと鳴らなかった。


それから、初めて半田付けをした。

今までブレッドボードにさしていたが、ちょっと複雑になってはんだ付けしてしまったほうがかえって楽だと思った。

だがはんだ付けは慣れていないのでなかなかうまくいかなくて、汚くなってしまいとても見せられるようなものではない。


組み立てが終わってスイッチを入れても鳴らなかった。

さて、何が原因なのか、どうやって確認していけばいいのかわからず途方にくれた。


とりあえず回路図と突き合わせて誤配線や部品の間違いがないかを確認する。

半田付けが不十分なところを再度つける。


耳をすますと、スピーカーがプーンとかピーンとかいう音をかすかに立てている。


アンテナコイルの細い線のはんだ付けがしっかりできてないのではと思いやり直す。


イヤホンジャックにクリスタルイヤホンをさしたら、爆音で鳴った。


ジャックをさしたらスピーカーが切れてイヤホンで鳴る、という配線ができていない。

でもイヤホンで鳴るのだから、ラジオ自体は完成している。


とりあえずスピーカーを鳴らしたかったので、イヤホンジャックを外してスピーカーを直結したら鳴った。


けっこうな達成感だ。



一晩中つけっぱなしで寝た。


さあ、それではケースに入れて持ち歩こう、と思った。

が、それにはイヤホンを使えるようにするのは必須だ。


そこは自力でなんとか解決した。


ケースを買ってきた。ピンバイスやホットボンドも買った。


が、穴あけは結構めんどうくさい。


ピンバイスで開けられる最大の穴は3mm。

バリコンやボリュームを出すには7mm程度の穴をあける必要がある。


ドリルや大きい穴を開けられるピンバイスを探したが安くて手軽なものがない。



WEBに情報を公開している人はピンバイスで開けてからヤスリで広げる、などと言っているが

やっぱりそれしかないのか。

2016/09/17

apacheでhttpsを使う

httpsを使いたい。

別にセキュアにしたいわけではなく、httpsでのアクセスを確認したいだけ。

macでやってみて証明書も自分で発行できて簡単でopensslとかならcentosも同じだろうと、やってみた。

ちょっとゴタゴタしたので、メモしておく。

# which openssl
/usr/bin/openssl

opensslは入っている。


# which mod_ssl
/usr/bin/which: no mod_ssl in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

mod_sslは入ってない。

じゃあ、入れよう。

# yum install mod_ssl
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package mod_ssl.x86_64 1:2.2.15-54.el6.centos will be インストール
--> 依存性の処理をしています: httpd = 2.2.15-54.el6.centos のパッケージ: 1:mod_ssl-2.2.15-54.el6.centos.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: 1:mod_ssl-2.2.15-54.el6.centos.x86_64 (updates)
             要求: httpd = 2.2.15-54.el6.centos
            インストール: httpd-2.2.27-1.el6.x86_64 (@CentALT)
                httpd = 2.2.27-1.el6
            利用可能: httpd-2.2.15-53.el6.centos.x86_64 (base)
                httpd = 2.2.15-53.el6.centos
            利用可能: httpd-2.2.15-54.el6.centos.x86_64 (updates)
                httpd = 2.2.15-54.el6.centos
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest


入らない。

apacheのバージョンが新しすぎるようだ。

別にバージョンなんかなんでもいいので、ダウングレードしよう。


yum downgradeをやってみたができないので、消して入れなおす。

# yum remove httpd

消えた。

インストール

# yum install httpd
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * ius: hkg.mirror.rackspace.com
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package httpd.x86_64 0:2.2.15-54.el6.centos will be インストール
--> 依存性の処理をしています: httpd-tools = 2.2.15-54.el6.centos のパッケージ: httpd-2.2.15-54.el6.centos.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: httpd-2.2.15-54.el6.centos.x86_64 (updates)
             要求: httpd-tools = 2.2.15-54.el6.centos
            インストール: httpd-tools-2.2.27-1.el6.x86_64 (@CentALT)
                httpd-tools = 2.2.27-1.el6
            利用可能: httpd-tools-2.2.15-53.el6.centos.x86_64 (base)
                httpd-tools = 2.2.15-53.el6.centos
            利用可能: httpd-tools-2.2.15-54.el6.centos.x86_64 (updates)
                httpd-tools = 2.2.15-54.el6.centos
            利用可能: httpd24u-tools-2.4.23-2.ius.centos6.x86_64 (ius)
                httpd-tools = 2.4.23-2.ius.centos6
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest


できない。

httpd-toolsとやらがひっかかってる。

こいつも消す。



# yum remove httpd-tools
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
削除処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package httpd-tools.x86_64 0:2.2.27-1.el6 will be 削除
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 パッケージ                    アーキテクチャ           バージョン                     リポジトリー                容量
========================================================================================================================
削除:
 httpd-tools                   x86_64                   2.2.27-1.el6                   @CentALT                   137 k

トランザクションの要約
========================================================================================================================
削除                 1 パッケージ

インストール済み容量: 137 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  削除中                  : httpd-tools-2.2.27-1.el6.x86_64                                                         1/1
  Verifying               : httpd-tools-2.2.27-1.el6.x86_64                                                         1/1

削除しました:
  httpd-tools.x86_64 0:2.2.27-1.el6

完了しました!


「will be 削除」(笑い)


インストール

#yum install httpd

はいった。



# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jul 18 2016 15:24:00


mod_sslをインストール

# yum install mod_ssl

はいった。


「will be インストール」(笑い)



これで必要なものはそろったので設定をしていく。


httpsサーバを動かすには証明書が必要。

証明書といっても、テストでhttpsアクセスするだけならお金を払って発行してもらう必要はない。

そういう場合は自己署名証明書というものを使う。

いわゆる「オレオレ証明書」である。


(参考)
http://www.maruko2.com/mw/Apache/SSL%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8mod_ssl%E3%81%AE%E8%A8%AD%E5%AE%9A


apache + ssl 設定の方法はいろんな人が書いているが、内容は微妙に異なる。



秘密鍵を作る。

よくわからないが、これがないと証明書が作れないし、簡単に作れるので作る。

暗号の強度とかはどうでもいいがいまどき 3desとか1024は古いのでナウくする。

パスワードを要求されるので2回入力する。

# openssl genrsa -aes128 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...............................................................................................................................................................................................................................+++
..............................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:


CSRを作る。

CSRとは証明書を発行する元ネタのようなものだ。
国だの組織名だのいろいろ聞かれるが全部適当でよい。

challenge password、emailだのは入れなくてよい。
というか、確認してないが必須項目はCNのみじゃないだろうか。

CNとはサーバのfqdnだが、自己署名証明書なので一致してなくても関係ないと思う。

一応、本当のfqdnを登録した。

下記のkintamaはもちろんサンプルである。


# openssl req -new -key server.key -sha256 -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Tokyo
Organization Name (eg, company) [Default Company Ltd]:kintama
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:kintama.net
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


秘密鍵とCSRがそろったら、証明書を発行する。

有効期間10年。100年とか1000年とかでもできるのだろうか?確認してない。

-in に作成したcsr、 -signkey に作成した秘密鍵の名前を指定する。

-out で指定した名前で作成される。


秘密鍵を作ったときに設定したパスワードを入力する。


# openssl x509 -in server.csr -days 3650 -req -signkey server.key -sha256 -out server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Tokyo/O=kintama/CN=kintama.net
Getting Private key
Enter pass phrase for server.key:


証明書ができたら、ssl.confを編集する。

(参考)
http://www.ryouto.jp/linux/linux_44.html


vi /etc/httpd/conf.d/ssl.conf

変更するのは以下

DocumentRoot "/var/www/html/" #コメントを外す
ServerName kintama.net:443 #サーバ名
SSLCertificateFile /home/kintama/ssl/server.crt #コメントを外して証明書の場所を指定
SSLCertificateKeyFile /home/kintama/server.key #コメントを外して秘密鍵の場所を指定



DocumentRootは任意の場所を指定できる。

つまり、httpとhttpsで違うページを表示できる。

証明書と鍵はさっき作成したものを指定する。

場所と名前はなんでもよいがもちろんそこに先ほど作った秘密鍵と証明書がないとだめだ。



httpdを再起動する。

さっき設定したパスワードを入力する。

# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server kintama.net:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
                                                           [  OK  ]

iptablesで443を開ける。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT


おわり。


おまけ

httpdを再起動するたびにパスワードを入力するのがウザい場合は、
下記で無効にできる。

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key

無効にするときにパスワードを聞かれてイラっとするが、これが最後なので我慢する。

centosは6です。

正式なバージョンは.....

# cat /etc/redhat-release
CentOS release 6.8 (Final)



2016/08/28

レフレックスラジオ

いつも参考にさせてもらっている、下記サイトの回路を作ってみた。

http://www.zea.jp/audio/lef/lef_01.htm


バーコイルはBA-200を使った。

今回初めて二次コイルを使った。


NHK、TBS、文化放送が入る。

TBSと文化放送は今までのラジオでは混信していて、特にTBSがほとんど聞こえなかったが、このラジオではきれいにチューニングできる。

さらに、AFNが入った。

そして、ついにアンテナとアースが不要になった。


やっぱりラジオは携帯したいと思っていたが、今までのラジオは部屋中に張り巡らしたアンテナとスチールラックに触れさせたアースなしには受信できなかった。

これでようやく持ち歩けるラジオができた。

ただ、電池が9Vというのがちょっと・・・

あと、ニッポン放送は一体どうやったら受信できるのか?



2016/08/27

低周波アンプつき




ブルーバックス「手作りラジオ工作入門」にのっていた低周波アンプつきを作ってみた。
トランジスタ、トランスを使う。そのため、電池をつなぐ。


スパイダーコイルを使うことになっているが、既製品のコイルで代用した。

大きな音で聞こえる。文化放送などうるさくてボリュームを下げたいくらいだ。


が、電池を使うと、聞こえて当然という気がする。

もし、一番最初にこの回路で作ってラジオを聞いたら、ラジオというのは電池がないと聞こえないものだ、と思い込んでしまっただろう。

電池、トランジスタ、トランス等をはずしてあらためてダイオードのみの回路にして聞いてみると、音量は小さいがちゃんと聞こえる。

やっぱり不思議だ。

ゲルマニウムラジオ改造 抵抗とコンデンサ追加

私が作ったゲルマニウムラジオでは、抵抗やコンデンサは使わなかった。

コイル、ゲルマニウムダイオード、バリコン、イヤホン、あとはアンテナとアース、それをつなぐターミナルやブレッドボードのみである。

しかし、「ゲルマラジオ 回路」で画像検索してみると、抵抗やコンデンサが追加されている回路が見つかる。

そして、抵抗やコンデンサの大きさや容量はまちまちで、抵抗のみ、コンデンサのみの回路も見つかる。

これらがなんの意味があるのかいまだによくわからないのだが、試しにいろいろつないでみたところ、大きめの抵抗をつないだ時に、音が小さくなったがクリアになった。

コンデンサのみの場合は、ほとんど変化はなかった。


いろいろ試して、下記の場合が一番音がきれいになったように感じた。




繰り返しになるが、なんの効果があるのかはわからない。



2016/08/21

ゲルマニウムラジオ改造 コイル



調べたら、マイクロインダクタよりコイルのほうがよいとのことだった。

コイルはアンテナも兼ねるそうだ。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1460427419


確かに、参考にしたサイトにはアンテナを屋外に高く長く設置すること、と書いてあった。


コイル用に0.29mmのポリウレタン銅線も買っておいたので、早速作ってみた。

太さは巻き数を変えれば自由らしいことがわかったので、

部屋に筒状のものはないかと探すとポテトチップの空き容器があったので
それに巻くことにした。

GRDSというフリーソフトでコイルの直径と線材の直系から巻き数を計算した。

コイルの直径:65mm
線材の直径:0.29mm
インダクタンス:330μH

巻き数:60.23

(今気づいたが300μHで計算したので3巻ほど少なかった)


マイクロインダクタを抜いて自作コイルに置き換える。・・・・・・鳴らない。

ダメか・・・と調べると、ポリウレタン銅線は被膜があるのでヤスリで削る必要があった。

削ってつなぐと、段違いによく聞こえるようになった!!


写真を見てわかる通り隙間もあいているし巻き数も不正確かもしれないが、
コイルとして十分に機能している。

NHKが聞こえるようになった。普通のラジオとして十分使える。

ゲルマニウムラジオ




ゲルマニウムラジオを作った。

ラジオは中学生の時技術科の授業で作った。

一応原理を勉強したような記憶があるが今ではすっかり忘れている。

Raspberry piでLEDを点灯させたりしているうちに、トランジスタとかコンデンサとかの機能はどういうものだろうとあらためて疑問に感じるようになりいろいろ調べていき、

簡単で実用的なものとしてゲルマニウムラジオが紹介されているのを見つけた。

名前は聞いたことはあったが、実際にどういうものかは知らなかった。

下記サイトを参考にした。というか、ほぼそのままマネした。

http://www.zea.jp/audio/ge3/ge3_01.htm

ゲルマニウムラジオについて書いている人はたくさんいるが、これほどシンプルなものはなかった。


ゲルマニウムラジオで一番驚いたことは、電源が必要ないということだった。


昔中一コースのおまけのラジオを寝床で聴いていたが、あれはゲルマニウムラジオだったのだろうかと思って調べたらそうではなかった。

http://kn.org/b9radio/data/gakken/blue/index.htm



参考にしたサイトの構成が独特なのは、コイルがないことだった。

私は手巻きでコイルを作る気マンマンでいたのだが、回路図を見るとコイルがない。

と思ったら、「マイクロインダクタ」という見た目は抵抗のようなものがコイルだった。


部品はマルツ、千石電商、aitendoで集めた。

ゲルマニウムダイオードがなかなか見つからなかった。

いい歳をしたおっさんがゲルマニウムラジオの部品を買うなんて恥ずかしいので、

どこにあるかとか聞けずに歩き回って千石電商の2階でやっと見つけた。


もう製造されていないとかで、在庫限り、一個120円もしたが3つ買った。

今みたら秋月電子の通販で10個250円で売っている。


通販で買えることはわかっていたが、あえて店で部品を探して買いたかった。



回路というほどでもないくらい単純な回路でブレッドボードにさしてすぐにできあがったが、

何も聞こえない。


アンテナはエアコンの電源コードに巻き付け、アースをスチールラックに触れさせたら、ようやく聴こえるようになった。

しかし、本当にかすかにしか聞こえない。なんか聞こえるとわかる程度で何を言っているかは聞きとれないくらいだ。


アンテナやアースをいろいろいじって、バリコンを回していたら、ようやく言葉が聞きとれた。JOQRと言っているから、文化放送だ。

しかし、それしか聞こえない。

いろんなところに手で触れると雑音が増えたり消えたりする。

しっかりハンダ付けしないとダメか。


でも、別にラジオが聞きたいわけではなく、原理を確認したかっただけなので、

かすかでも聞こえただけで満足である。


これから、どうすれば音が大きくなるか、受信感度が上がるかなどを調べていく。

2016/07/17

raspberry piでブザーを鳴らす

参考:
http://feijoa.jp/laboratory/raspberrypi/speaker/


pi@raspberrypi:~ $ cat buzz2.py
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
from time import sleep
import wiringpi2 as wiringpi


outpin = 25

GPIO.setmode(GPIO.BCM)
GPIO.setup(outpin, GPIO.OUT)

wiringpi.wiringPiSetupGpio() # GPIO名で番号を指定する

wiringpi.softToneCreate(outpin)


len=1
delay = 0.1

A1 = 110
A2 = 220
A3 = 440


def Playnote(note,len,delay):
        wiringpi.softToneWrite(outpin, note)
        sleep(len)
        wiringpi.softToneWrite(outpin, 0)
        sleep(delay)

Playnote(A1,len,delay)
Playnote(A2,len,delay)
Playnote(A3,len,delay)

GPIO.cleanup()




今どきspam対策



spamが来るようになった。

1日に10数件程度。

さくらのVPSで自分で設定したアカウントだ。

試験的なアカウントでほとんどやり取りはなかったのだが、

あるときから、覚えのないメールマガジンのようなものが届くようになった。

何かのアプリかサービスを登録して配信されるようになったのかなと、

unsubscribe手続きしたら、SPAMが届きだした。



内容は明らかなスパムで、別にウィルス感染したわけではないから放置してもいいのだが、

ムカつくし、勉強もかねてspam対策をすることにした。


対策するのはpostfixである。


今どき、特定のドメイン名やIPアドレス、国などで限定することはほとんど意味がない。

調べると、spamhausとspamassassinというのが有名なようなので、

設定してみた。


あと、postfixで名前解決できない送信元を拒否するとか、

調べて適当に対策してみた。


/var/log/maillogを見ると、ポツポツrejectされているのがわかる。


これはthunderbirdの受信メール



件名の最初の[SPAM]はspamassassinがつけたものだ。

これができればメーラーのルールで振り分けができる。


spamassassinに振り分けさせることもできる。

削除はできないのか?

あとでやってみる。


とりあえずほとんどのSPAMは検知できているようだ。

2016/07/09

raspberry pi で条件に応じて2色のLEDの一方を点灯する




------------
pi@raspberrypi:~ $ cat leddouble.py
import RPi.GPIO as GPIO
import time

import sys

pin1=25
pin2=21

GPIO.setmode(GPIO.BCM)

x = int(sys.argv[1])

if ( x % 2 > 0):
        print 'odd'
        GPIO.setup(pin1, GPIO.OUT)
        GPIO.output(pin1, 0)
        time.sleep(3)
else:
        print 'even'
        GPIO.setup(pin2, GPIO.OUT)
        GPIO.output(pin2, 0)
        time.sleep(3)

GPIO.cleanup()
-----------


pi@raspberrypi:~ $ sudo python leddouble.py 5
odd
pi@raspberrypi:~ $ sudo python leddouble.py 5
odd
pi@raspberrypi:~ $ sudo python leddouble.py 8
even
pi@raspberrypi:~ $


引数が奇数なら青、偶数なら赤(ピンク)が点灯




2016/07/02

rasbperry pi でLEDを点灯させる




まず部品を用意。

ジャンパピンはコンソールケーブルを作るときに買ったものがあった。

ブレッドボードを買う。

どういうものかしらなかったが、横がつながっていて縦はつながっていないそうだ。


あとLED。

LEDとはなんぞやということは中学生のときの「技術」の授業で習った。

ハンダゴテを使ってラジオを使った。


あれは義務教育だよね?


まずaitendoに行ったら、100個くらい入ったものが売っていた。

が、

規格というものがどこにも書いていない。

LEDにも規格はあるよね?


LEDは電気が流れると光ること、さらに流れる方向が決まっていることは覚えている。


豆電球に乾電池をつなぐと光るのとはちょっとわけが違うことも。



調べると、raspberry piでLEDを光らせるにはGPIOという、ピンがたくさんならんでいるものから、

電源となるピンともう一つ選び、

それをon/offすればよいらしかった。


そして、LEDに電流を流すときは抵抗を通さなければならないということだった。

では、いくつの抵抗が必要なのか?


それは規格によるだろうと思った。

piの流す電流(電圧?)と、LEDの規格によって決まるのだろうと。


しかし、LEDの規格というのがあまり情報がない。


いろいろ探した結果、型番がはっきりしている下記のものを買った。

http://www.marutsu.co.jp/pc/i/69514/


3.2V・20mA・250mcd(max)

とある。


そして抵抗は330Ωのもの。


これは必要な抵抗を計算したのではなく、WEBでそれを使っている人が何人かいたから

マネしただけだ。


下記のページで計算してみたのだが、

http://diy.tommy-bright.com/


raspberry piの電源 3.3v

LEDの電圧 3.2v

流したい電流 20mA

とすると必要な抵抗は 5Ω となる。


抵抗が330Ωの場合、流れる電流は0.3mAとなるのではないか?




という計算はあとでやったのだが、

とりあえずつないで点灯させてみた。



Pin#1(GND)と、Pin#22(GPIO25)を使う。


Pin#1を抵抗側、Pin#22をLED側につなぐ。


GND --- 抵抗 --- LED --- GPIO25



下記のpythonスクリプトを書いて、実行する。

--------------------------
import RPi.GPIO as GPIO
import time

pin=25

GPIO.setmode(GPIO.BCM)
GPIO.setup(pin, GPIO.OUT)



#GPIO.output(pin, GPIO.HIGH)
GPIO.output(pin, 0)

time.sleep(3)

GPIO.cleanup()

--------------------------



pi@raspberrypi:~ $ sudo python led.py


LEDが点灯し、3秒たつと消える。


GPIO.output(pin,0)

のことろは、参考にしたスクリプトでは0でなくGPIO.HIGHにすると点灯し、GPIO.LOWにすると消灯するのだが、

私がやってみると、HIGH/LOWが逆になる。

つまり、GPIO.LOWにすると点灯する。


なぜだろう?

2016/06/11

なぜvpnを使うのか

最近よくVPNを扱う。

自分でも使うし、お客さんが使うVPNの設定もする。

だが、VPNの用途がいまいちわからなかった。


たとえば、自宅から会社のPCにアクセスするためにVPNで接続してからリモートデスクトップで接続したりする。

インターネットに接続できる場所であれば、いつでも会社のPCにアクセスできる。

その程度のものだと思っていた。


だが、それにしてはそれ専用の何百万円もする装置があったり面倒くさい設定をしなければならないので、もっとメリットがあるはずだと思い始めた。


その疑問はすごく根本的な、基本的なことなので、人には聞けず、調べてみてもみな同じようなことをいうだけだった。

そこで、ヤフーオークションでCiscoのASAを入手した。


そして自宅でVPNを設定し、インターネット側からアクセスできるようにしてみた。


しかし、それをやろうとしたときには、

家のPCにアクセスするだけなら、家のルータでポートフォワーディングをすればいいから、

あまり意味がないなと思っていた。


私はJCOMのサービスを利用しており、ブラウザでルータの管理画面にアクセスして、

ポートフォワードを設定できる。


ASAなど不要だ。

Windowsの標準機能のリモートデスクトップを使えばできるのに、

なぜわざわざクライアントソフトまで使って、面倒な手間をかけるのか。


標準機能といっても、Windowsのprofessionalエディションでないとリモートデスクトップをさせる側にはなれないので、

Homeエディションを使っていた私はわざわざカネをだしてprofessionalのOSを買った。

ちなみに64bitの10では、Hyper-Vという仮想マシン機能もついている。

以前はVirtual PCと呼ばれていた機能が、いつの間にかこんな形で標準機能になっていた・・・。



私はすぐに気づいた。

VPN接続は、1対1でない、ということに。


つまり、たんなるリモートデスクトップ接続なら、外出して喫茶店で使用しているノートパソコンと、会社のデスクトップパソコンが接続されるだけである。

だが、皆がVPNを使う目的は、会社のパソコンにアクセスすることではなく、

いわゆるイントラネット、会社の内部のファイルサーバ等にアクセスすることであろう。


VPNは、ネットワークを接続する。

「ネットワーク」という言葉はあいまいだから、あえてくどく説明すると、

ある領域とある領域を接続する。


私はあえて、専門用語をなるべく使わないように話している。

それは、専門用語だと、わかってないことでも「あーアレね」と、わかっていないこともわかったように思えてしまうからである。

「あーVPNね」

「あーSSLね」

「あーアジュールね」

とか。



単純なインターネット利用の場合、パソコンにはひとつのネットワークアダプタがあって、

そこにはプライベートIPアドレスが使われているだろう。

そしてそれはDHCPにより自動割り当てされていて、

パソコンの利用者は自分のPCにIPアドレスが付与する必要はなく、

自分のIPアドレスが何かを意識する必要もない。


しかし、インターネットを利用するにはルーターというものが必要である。

パソコンにIPアドレスを付与しているのもルーターである。



「ルーターというのは、ネットワークとネットワークを接続する装置である」・・・・と言えなくもないが、

単に接続するだけなら1000円くらいで売っているハブもそうである。

なぜルーターが必要なのか・・・。


ちょっと話がそれるが、私は以前、「ルーターとはネットワークを切断する装置である」

と気づいたことがある。


ハブで接続されたネットワークは単純に拡大するだけであるが、

ルーターによって接続されたネットワークは異なる二つ以上の別の領域になる。

その異なる領域間で通信をおこなうには、それを許可する設定が必要になる。

通信をするには許可をし、許可された以外の通信は遮断する、

それがルーターの用途である。




話を戻すと、


インターネットを利用している人はルーターからIPアドレスを付与され、

ルーターを通してインターネットに接続する。

インターネットというのは、ルーターの集合である。


ルーター以外にも様々な装置が接続されているが、

要するに、「区切られた複数の領域」が接続されている領域である。



先ほどいったように、その複数の領域間で通信するには許可設定が必要である。


あなたが自宅からインターネットを利用するとき、

「私は世界中の人々とつながっている」と思うことがあるだろう。



しかし、世界中にあなたと同じようにインターネットを利用している人が何十億人といるが、

あなたはそれらの人々のパソコンと直接通信することは、できない。


facebook, twitter, lineなどで「つながる」には、ブラウザかアプリが必要である。


話が長く散漫になってきたので、結論を言おう。

VPNは、インターネットを介して、末端にあるネットワークを接続する仕組みである。


あなたのパソコンが、ブラジルにいる少年のパソコンにつながる仕組みである。


ただし、それは電話がつながるような1対1の接続ではない。


ネットワークとネットワーク、領域と領域が接続される。

しかもそれは、単純な領域の拡大ではなく、区切られて許可された通信しかおこなえない接続である。

今日はここまで。

2016/05/30

windows10をSSDにインストール

windows10を買ってきた。

使っていたのがhomeバージョンだったので、proを。

proが必要だった。

リモートデスクトップで入りたいとか、hyper-vを使いたいとか。


240GBのssdドライブを買ってきて、ディスクを入れ替えてそこに入れた。


windowsのインストールのときにフォーマットができなかった。


なぜなのかよくわらず、もう一度前のディスクで起動し、フォーマットした。


インストール終了後、起動ディスクではないもう一つのハードディスクが見えない。


管理ツールのディスクの管理を見ると、なんという表示だったか忘れてしまったが、

形式が違う、みたいなのが表示されていたので、右クリックして、何を選んだか忘れたが、

見えるようにした。



2016/05/15

raspberry pi のモニタ

4D SYSTEMの3.2インチLCDディスプレイを買った。

基本、SSHで入るんだけど、一番最初とか、なんかあったときにIPアドレスを見るくらいのことがしたい。


HDMIインタフェースがあるがパソコンで使っているモニタのケーブルを差し替えるのは結構めんどくさい。


説明書に書いてある通りのことをしたが、何も表示されない。

それどころか、起動しなくなってしまった。

2016/05/07

raspberry pi の監視カメラ

下記を参考に、piでカメラを使ってみた。

http://make.bcde.jp/raspberry-pi/usb%E3%82%AB%E3%83%A1%E3%83%A9%E3%81%A7%E7%9B%A3%E8%A6%96%E3%82%AB%E3%83%A1%E3%83%A9/


pi 2 はできたが、
古いpi の場合、スクリプトの内容を少し変えた。

pi@raspberrypi ~/mjpg-streamer $ cat start_server.sh
#!/bin/sh

PORT="8080" #ポート番号
ID="user" #ID
PW="password" #パスワード
SIZE="320x240" #画面サイズ
FRAMERATE="2" #フレームレート
export LD_LIBRARY_PATH=/usr/local/lib
./mjpg_streamer \
    -i "./input_uvc.so -f $FRAMERATE -r $SIZE -d /dev/video0 -y -n" \
    -o "./output_http.so -w ./www -p $PORT -c $ID:$PW"





とりあえず自分の姿を映してみたが、やっぱり監視カメラやライブカメラにしたい。


せめて、家の外を映したい。寝床にいながら、外の天気が確認できるくらいのことが。


そのためには当然、カメラを外に置く必要がある。

ネットワークは無線が使えるが問題は電源である。

短期間なら携帯用電源をつないでおけばいいか。


とりあえずモバイル充電器をつないでベランダに置いておいた。

今は真っ暗で何も見えないが夜が明けたら何か見えるはずだ。


2016/05/06

raspberry pi 2 の初期設定

ftp.jaist.ac.jp から raspbian を落とす。

zipファイルが解凍できない。

7zipで解凍する。前にもやった覚えがある。


micro SDカードは32GBのもの。

こんなに必要ないとは思うがそんなに高いものでもないので。


DD for windowsとかいうのでimgを書き込もうとするがエラーになる。

フォーマットしないとダメかな、と、dd formatterというのでやる。

容量が60MBと表示されているのが気になる。


「書き込み禁止になっている」というエラーになったが、

そんなはずはない。

ディスクを抜き差ししたらいけた。

が、アホみたいに遅い。1%進むのに10秒以上かかっている。

待てない。

キャンセルしてwindowsでfat32でフォーマットする。数秒で終わる。


DDで書き込む。

書き込むファイルが書き込むディスクより小さいというキチガイみたいな警告がでる。

「危険を承知で保護を外す」をチェックして書き込む。


これもけっこう遅いが、数分程度で終わりそうなので待つ。


カードをぬいて、piにさす。
キーボードとマウスをpiにつなぎ、hdmiケーブルでディスプレイにつないで、piの電源をいれる。

LANケーブルをつないで、DHCPサーバから割り当てられるIPが何かわかるか、
割り当てられたIPを確認できるなら、最初からSSHではいればよい。


ipアドレスの固定と、sshのポート番号の変更だけやって、あとはsshでやる。



ipアドレスの固定は、2では /etc/dhcpcd.confに下記のように書く。

interface eth0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8


さて、この状態でディスク容量がいくつかを確認してみる。

pi@raspberrypi:~ $ sudo fdisk -l | tail
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8f1eafaf

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1        8192  131071  122880   60M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      131072 7878655 7747584  3.7G 83 Linux


3.7Gとなっている。

アホかと。




sudo raspi-config → Internationalisation Options → Change Timezone
(ついで)

sudo raspi-config → Expand Filesystem

をやってリブート。

30G認識された。


こんなことは言わなくても勝手にやれと。



sudo apt-get update

sudo apt-geet upgrade ※結構時間がかかる。

sudo rpi-update



さくらのクラウドで起きた不可解な現象

※(後記)料金未払いとメールの受信ができないことは関係なかったと思う。
再起動後I/Fがupしなかったのはなぜか不明だが、ifupであがった。
その他、chkconfigとかselinuxを無効かするなどして、もとに戻った。

dovecotは設定ミスがあった。

systemctl status dovecot をやると、正常に起動しておらず、以下のログがあった。

doveconf: Fatal: Error in configuration file /etc/dovecot/conf.d/10-mail.conf line 61: Unknown setting: inbox


10-mail.confのnamespace inboxのところは、centos6の方は無効になっていたので、
こっちも無効にした。
しかしそのときinbox=yesが残っていた。

namespace inboxのコメントを外して正常に起動するようになった。

いまいち、namespaceの設定の意味がわからないが・・・・



------------------------------


わたしはさくらのVPSで1台、さくらのクラウドで1台サーバを借りている。

VPSのほうでpostfix + dovecotを使っているので、クラウドのほうも同じように設定しようと思った。


vpsはcentos6、クラウドは7であるが、やることはほとんど同じ。


だが、どうしてもクラウドの方でメールが受信できない。


送信はできる。

クライアントの設定は何度も見直した。

DNS設定も見直した。

最後は、二つのサーバの設定ファイルの差分を比較して全部同じにしてみた。

それでもダメだ。


これはなんかおかしい、と、クラウドのサーバをリブートした。


pingを打って再起動を待つ。

なかなか復活しない。

pingを許可していなかったっけ?

と、sshするが入れない。


コンソールに入って、ip a とやると、アドレスが消えている!

えええ!?全部消えちゃった?


・・・と、もしかしてと思って請求情報を見ると、クラウドの料金の支払いが滞納されていて支払い期限を1週間くらい過ぎていた。

多分、このためにサービス停止になっていたのではないだろうか。

料金を払って、様子を見ることにした。

2016/05/02

PHP twitteroauth ブロックしているユーザーのアンブロック

ブロック解除もできた。

(前回 http://blog.monqy.net/2016/05/php-twitteroauth.html の続き)

--------------------------------------
#ブロックしているユーザーを取得

$req2 = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/list.json','GET',array('count'=>'100'));
$blocks = json_decode($req2,true);
if (isset($blocks) && empty($blocks->errors)) {

        echo '<hr>';
        foreach ($blocks as $val) {

                for($i = 0; $i<count($val)-1;$i++)
                {
                        echo
                                $val[$i]['name'] . '<br>'
                                . '<img src="' . $val[$i]['profile_image_url'] . '"><br>'
                                . $val[$i]['screen_name'] . '<br>'
                                . '<hr>';

#ブロックしているユーザーのscreen_nameをarrayに格納
                        $blocking_users[] = $val[$i]['screen_name'];
                }
        }
} else {
        echo 'you are blocking nobody.';
}



#スクリプトに引数「mode=unblock」が指定された場合はunblockする

if(isset($_GET['mode']))        {
        if ($_GET['mode'] == 'unblock') {
                foreach($blocking_users as $a)  {
                        $result = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/destroy.json','POST',array('screen_name'=>$a));
                        $j = json_decode($result,true);
                        if (isset($j)) {
                                echo $j['screen_name']." is unblocked.<br>";
                        }
                }
        }
}
----------------------------------------------

OAuthRequestの後にAPIのURLを指定すればなんでもできるようだ。


$result = $connection->OAuthRequest(<URL>,<メソッド>,<パラメータ>);







PHP + twitteroauth ブロックしているユーザーの一覧表示

ついにできた。

(全体は下記を参照)
http://blog.monqy.net/2016/05/phptwitter-api-oauth.html



<?php

session_start();

require_once 'common.php';
require_once 'vendor/abraham/twitteroauth/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

$access_token = $_SESSION['access_token'];

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_s
ecret']);

$user = $connection->get("account/verify_credentials");

echo 'hello, ';
echo $user->name;


$req2 = $connection->OAuthRequest('https://api.twitter.com/1.1/blocks/list.json','GET',array('count'=>'100'));
$blocks = json_decode($req2,true);
if (isset($blocks) && empty($blocks->errors)) {

        echo '<hr>';
        foreach ($blocks as $val) {

                for($i = 0; $i<count($val)-1;$i++)
                {
                        echo
                                $val[$i]['name'] . '<br>'
                                . '<img src="' . $val[$i]['profile_image_url'] . '"><br>'
                                . $val[$i]['screen_name'] . '<br>'
                                . '<hr>';
                }
        }
        echo '<hr>';
} else {
        echo 'you are blocking nobody.';
}

?>

PHPでtwitter api のoauthが簡単にできるようになった

thanks to abraham

https://twitteroauth.com/


oauthに再挑戦。

久しぶりだから情報も増えているだろうと期待して。


http://qiita.com/sofpyon/items/982fe3a9ccebd8702867

phpか...

まあいいや、やってみよう。


https://twitteroauth.com/


composer ?

いれる。

phpのバージョンが古いと言われる。


http://qiita.com/zaburo/items/fd67b294c610d54c3aee

レポジトリを変更する。

5.4.45にする。



・・・・


めんどくさいので結果だけ。

以下の情報をほぼそのまま参考にした。

http://qiita.com/sofpyon/items/982fe3a9ccebd8702867



composerで twitteroauthをインストールするときは、
実際にphpスクリプトを動かすディレクトリにする。


php 5.3だから出るエラーが出てしまった。
5.4.45にあげたのに。

composerを入れた後だったからだろうか?
よくわからないが phpの書き方を変えた。



/var/www/html/

で動かすとして、

そこに、下記ファイルを作る。

common.php
login.php
callback.php
mypage.php


中身


# cat common.php
<?php

define( 'CONSUMER_KEY', '------ your consumuer key -----' );
define( 'CONSUMER_SECRET', '------ your consumuer secret -----' );
define( 'OAUTH_CALLBACK', 'http://example.com/callback.php' ); ※URLは仮





# cat login.php
<?php

session_start();

require_once 'common.php';
require_once 'vendor/abraham/twitteroauth/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));

$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];

$url = $connection->url('oauth/authenticate', array('oauth_token' => $request_token['oauth_token']));

header( 'location: '. $url );






# cat callback.php
<?php

session_start();

require_once 'common.php';
require_once 'vendor/abraham/twitteroauth/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

$request_token = array();
$request_token['oauth_token'] = $_SESSION['oauth_token'];
$request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];

if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) {
    die( 'Error!' );
}

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);

$_SESSION['access_token'] = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));

session_regenerate_id();

header( 'location: /bl/mypage.php' );






# cat mypage.php
<?php

session_start();

require_once 'common.php';
require_once 'vendor/abraham/twitteroauth/autoload.php';

use Abraham\TwitterOAuth\TwitterOAuth;

$access_token = $_SESSION['access_token'];

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

$user = $connection->get("account/verify_credentials");

echo 'hello, ';
echo $user->name;





http://example.com/login.php ※URLはサンプル

にブラウザでアクセスする。


アプリへのアクセスを許可するかとたずねられて許可すると、


あなたのnameが「ほげほげ君」だとしたら、


hello, ほげほげ君


と表示される。




oauth自体はすごく簡単にできるようになった。

ここまでできてしまえば、あとは自分が取得したい情報を表示、
操作したいAPIを使ってやりたいことをやればよい。


・・・が、そこがよくわからない・・・。



本当はpythonでやりたい。
pythonにも同様のライブラリがあるようなので、今度試してみたい。

2016/04/23

centos7のコマンド






centos7を仕事で使った。

ifconfigがない

tracerouteがない

netstatがない



7を触るのは初めてではなく、コマンドが変わったのは知っていたがこんなに何にもなかったっけ?

とあきれた。


とりあえず yum install traceroute

をやった。



後でしらべたら、tracepathというコマンドがあった。

ifconfigに相当するコマンドは、

ip addr

ip a

でよい

# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9c:a3:ba:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet xxx.xxx.xxx.xxx/24 brd xxx.xxx.xxx.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever


routingテーブルの表示は

ip route

ip rでよい


ルートの追加・削除

 ip route add 192.168.99.0/24 via 10.0.0.254
 ip route del 192.168.99.0/24 via 10.0.0.254

2016/04/02

ネットワークエンジニア七つ道具ソフトウェア編2016

秀丸

winmerge

exping

teraterm

tftpd32

ieとchromeとfirefoxを全部いれておく

7zip


Windows7 pro 64bit

または Windows8

cygwin

wireshark



ネットワークエンジニア七つ道具2016

マスク・・・データセンタで長時間作業するとき使う

モバイルバッテリー

電源タップ(パソコンとか携帯端末の充電用)

プラスドライバ

マイナスドライバ

長いドライバ

LANケーブル(長め、5m以上)

USBシリアル変換アダプタとコンソールケーブル x 2

LANケーブル中継コネクタ

カッター

ハサミ

ボールペン

油性マジック

ハンズフリー通話できるマイク付きイヤホン等

クリップボード(物理的な)

ノートパソコン



全然7つじゃないけど

apacheの更新

logwatchに、大量の不審なアクセスがある。

不審といっても、logが書かれるだけでとくになんの被害もないのだが、ウザいのでなんとかしたい。

アクセス元のIPアドレスはまちまちだ。

どうやってこんなに多様なIPアドレスからアクセスできるのかが不思議なのだが、

アドレスでブロックすることは実質的に不可能だ。


たとえば、国とかプロバイダとかでガバっとブロックしてしまおうかとも思うが、

それはやりたくない。


基本的に私はインターネットにサーバを公開する以上、

アクセス方法を問わずにブロックするという中国のGFW的な態度はとりたくない。


この不審なアクセスは、サーバに存在しないファイルへアクセスしている。

それはあきらかに故意になされている。


しかし頻度はそれほど高くない。

そして、アクセス内容を特定できるある文字列を含んでいる。


最初はその文字列を含むアクセスをiptablesでブロックしようと思ったが、

うまくいかない。これは確認中である。



そのうち、そもそもWEBサーバ自体になにか脆弱性があるのではないかと思い、

診断ツールで調べてみた。

niktoとかいうものだ。


特に致命的な脆弱性はなかったが、バージョンが古いと言われた。

2.2.15 である。

yumでupdateすると最新と言われる。


最新にするにはrepositoryを変更する必要がある。



centosのデフォルトレポジトリで最新なら別にいいかとも思うが、

このさい最新にしてみる。


更新後ちょっとゴタゴタしたが、無事に2.2.27になった。


ゴタゴタしたというのは設定ファイルが初期状態になったとか

proxy moduleが読めないとか

サービスが停止できないとかである。

設定ファイルはれいのrpmsaveだかなんかを戻し、

moduleは不要なものを読まないようにし、

停止できないのはkillで殺したが死なないのでサーバごとリブートした。

2016/03/26

postfixとdovecot

こないださくらのVPSをぶっ壊してしまった。

たしかiptablesのアップデートをしようと思い、アンインストール&インストールしようと思ったら、

めちゃくちゃになってしまい、ほとんどのサービスが消えてしまったのだ。


メールはpostfix + dovecotで、試行錯誤しながらなんとか送受信できていたのだが、

これを機会に1から「構築」(この言葉はおおげさで好きではないが)方法をまとめておく。



まず確認

# service postfix status
postfix: 認識されていないサービスです。

# service dovecot status
dovecot: 認識されていないサービスです。



yum install postfix


さあ、

#vi /etc/postfix/main.cf

とやりかけて、まてよと思い、main.cfのあるフォルダを見てみると、

main.cf.rpmsave

master.cf.rpmsave

というファイルがある。


ほかのサービスもそうだったのだが、.rpmsaveという拡張子のついたバックアップファイルのようなものが残っている。

これらのファイルをmvで main.cf, master.cfにする。


# which postfix
/usr/sbin/postfix

# service postfix status
master は停止しています

# service postfix start
postfix を起動中:                                          [  OK  ]


メールが送れるかテスト

# echo test | mail (gmailのアドレス)

瞬時に届く。



iphoneに登録してあるアカウントからメールを送信してみる。

「パスワードが違う」と言われる。



saslauthd を起動しないといけない。

# which saslauthd
/usr/sbin/saslauthd

# service saslauthd
使い方: /etc/init.d/saslauthd {start|stop|status|restart|condrestart|try-restart|reload|force-reload}

# /etc/init.d/saslauthd status
saslauthd は停止しています

# /etc/init.d/saslauthd start
saslauthd を起動中:                                        [  OK  ]




もう一度送信・・・送れた。


postfixの復旧は終わり。



次はdovecot

yum install dovecot

同様に設定ファイルの.rpmsaveがあるので、戻す。
/etc/dovecot/conf.d/


10-auth.conf
10-mail.conf

起動

# service dovecot start
Dovecot Imap を起動中:                                     [  OK  ]


gmailから、メールを送ってみる。

受信できた。












2016/03/21

block解除時にブラックリストをチェックする

twitterでブロックしたアカウントのブロックを解除するスクリプトを、
毎日動かしている。

私のブロックは本当に迷惑だと感じてするよりも、
フォローしたけどつまらないから外すときにする。

ただフォローをはずすだけならフォローをやめればいいのだが、
ボットとか、フォローされたらすぐフォロー返しする人などの場合、
相手のフォローだけ残ってしまう。

それがいやなのでブロックしている。

しかし、本当にウザい広告とかは永遠にブロックしておきたいので、
ブラックリストを作ってそこに含まれるアカウントはブロック解除しないようにした。


----
import tweepy

consumer_key = 'xxxxxxxxxxxxxx'
consumer_secret = 'xxxxxxxxxxxxxxxx'
access_key = 'xxxxxxxxxxxxxxxxxxx'
access_secret = 'xxxxxxxxxxxxxxxx'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth_handler=auth)
results = api.blocks()

file =open("blacklist.txt").readlines()
blacklist=[]
for line in file:
    line=line.strip("\n")
    blacklist.append(line)

for result in results:
 if result.screen_name in blacklist:
    print 'In black list: ',result.screen_name
 else:
  print 'unblocking ',result.screen_name,'....'
  api.destroy_block(result.id)
----

blacklist.txt というファイルを作って、
ブロックしておきたいアカウント名を改行で区切って書いておく。

それを読んでリストにいれて、
unblockするときにそのリストに含まれていなければ、という条件をつける。

listにappendするときに \n をstripしないとリストの要素に改行文字が含まれてしまう。
そこは改行文字は無視してくれよと思う。
perlはそんなことしないでもバスっとかんたんにリストに読めたような記憶があるが・・・



これを作った後でおもったのだが、
今回はブラックリストを静的につまり手で書いて作ったが、
今後はblockしたアカウントを記録して回数を数えて、
閾値を決めて3回ブロックしたものはunblockしない、
とかしたい。





2016/03/13

raspberry pi2のインストール

この前はWindows10 IoTなんたらをいれたのだが、
どうしていいかわからないので、RASPBIANを入れる。


ダウンロードする。

https://www.raspberrypi.org/downloads/raspbian/


RASPBIAN JESSIEというもの。

zipファイルなのだが、解凍できない。

7zipをインストールしたら、できた。

https://sevenzip.osdn.jp/


DD for Windowsをインストールし、micro SDにイメージを焼く。

http://www.si-linux.co.jp/techinfo/index.php?DD%20for%20Windows

「ディスクよりイメージファイルのほうが小さい」というわけのわからない警告がでる。

逆かと思ってサイズの大きいディスクをさがしかけた。


ディスプレイ・キーボードをつないで電源をいれるとGUIが起動する。

マウスもつなげる。

localeとかtimezoneとかを設定し、cliで立ち上がるようにする。

sshは有効になっている。

ssh localhost してみる。

pi/raspberry



2016/03/06

ldapserver@centos7


最近仕事で認証がらみのことをよくやるようになったので、
ldapサーバを設定してみる。

ldapというのは、アクティブディレクトリで使われるプロトコルである。

というか、ldapといったらADつまりWindowsサーバである場合がほとんどではないだろうか。

Windowsサーバを買ったり借りたりするのはまだまだ高価なので、

さくらのクラウドで借りているcentos7で作ってみる。




インストール

yum install openldap openldap-servers openldap-lclients


DB設定をつくる(exampleをコピー)

cp /userr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG


パスワード生成(この値をあとで使う)

[root@adam ~]# slappasswd
New password: 
Re-enter new password: 
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


firewallでldapを許可

[root@adam ~]# firewall-cmd a--add-service=ldap --zone=public
success
[root@adam ~]# firewall-cmd --add-service=ldap --zone=public --permanent
success



slapd を起動

[root@adam ~]# systemctl enable slapd
[root@adam ~]# systemctl enable slapdstart slapd


設定はファイルを直接編集するのではなく、
.ldifという拡張子のついたファイルを作ってそこに設定内容を書き、
それをコマンドで読み込ませておこなう。


.ldifファイルは任意の場所で任意の名前で作ってよいようだ。


rootパスワードの設定(slappasswdで生成された値を書く)

[root@adam]# cat rootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx



ここではまったのが、「replace: olcRootPW」の部分だ。
参考にした複数の情報では「add: olcRootPW」になっていたが、
それだと下記のようなエラーになる。


[root@adam]#  ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
ldap_modify: Inappropriate matching (18)
additional info: modify/add: olcRootPW: no equality matching rule


成功すると下記のようになる

[root@adam]# ldapadd -Y EXTERNAL -H ldapi:/// -f rootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"


(なんでこうするのかはわからない。後で調べる)
→たぶん、参考にしたある情報ではrootpasswordを直接書き込んでいて、
olcRootPWのエントリがすでにあったから「add」ができなかったのだと思う。
デフォルト状態であればaddでよいはず。


ドメイン名

[root@adam]# cat change-domain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth"
  read by dn.base="cn=Manager,dc=monqy,dc=net" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=monqy,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=monqy,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx



[root@adam]# ldapmodify -Y EXTERNAL -H ldapi:/// -f .change-domain.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"



組織情報(Users, Groups)



[root@adam]# cat org.ldif
dn: dc=monqy,dc=net
objectClass: dcObject
objectClass: organization
dc: monqy
o: monqy

dn: ou=Users,dc=monqy,dc=net
objectClass: organizationalUnit
ou: Users

dn: ou=Groups,dc=monqy,dc=net
objectClass: organizationalUnit
ou: Groups
[root@adam]#



[root@adam]# ldapadd -x -D "cn=Manager,dc=monqy,dc=net" -W -f org.ldif
Enter LDAP Password:
adding new entry "dc=monqy,dc=net"

adding new entry "ou=Users,dc=monqy,dc=net"

adding new entry "ou=Groups,dc=monqy,dc=net"




クライアントからアクセスしてみる。

WindowsにJXPlorerというアプリをインストールする。

左上の connect to DSAというアイコンをクリックし、
ldapサーバのホスト名を入力して「はい」をクリックすると、
上記で設定したUsersやGroupsが表示される。


実際の認証は、後程



squid設定

設定をちょっといじったら動かなくなって
なかなか復旧できなかったので、再度メモ

認証のところ

これは、デフォルト設定にはない。

アクセス元アドレスは変わるので、限定できないが、
誰でもアクセスできるのはいやなので、認証するようにする。

とりあえずbasic認証で


---

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 5 hours

acl AUTH proxy_auth REQUIRED
http_access allow AUTH

# And finally deny all other access to this proxy
http_access deny all

---


auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd
この行は、環境によってことなる。

/usr/lib64/squid/ncsa_auth は、認証するプログラム

find / -name ncsa_auth で、確認して書く。


/etc/squid/passwd は、ユーザとパスワードが設定されているファイル

htpasswd -c /etc/squid/passwd <username>

とすると、パスワードの入力が求められるので2回入力する。
-c は新規に作成する場合。

このファイルをcatしても、パスワードはそのまま記述されているわけではない。


認証できるか確認する
ncsa_authのあとにパスワードファイルを指定し、
ユーザ名とパスワードをスペースで区切って入力し、OKと表示されること

/usr/lib64/squid/ncsa_auth /etc/squid/passwd
<username> <password>



2016/02/26

さくらのVPSにVNC接続

以前にも一度やったのだが、
いろいろうまくいかず放置していたのを、やり直す。

vncはtigervncというのを使う。

セットアップについては省略。以前書いた気がする。

そのあと、ちょこちょこ修正というか設定が必要だった。


まず
# chkconfig messagebus on

それから
# dbus-uuidgen > /var/lib/dbus/machine-id


portが開いてるかの確認は

nmap localhost

が速い。



2016/02/20

proxyを使ったら3倍速くなった

ただ確認のために入れたsquid。

ブラウザでプロキシを設定していつものようにインターネットを見ていたら、
なんだか軽快になったように感じて、スピードテストをやってみたら90Mbpsくらいだった。

最近あまりやっていなかったが、こんな数値は見覚えがない。
プロキシ設定を外して測定すると30台である。

おそるべし、さくらのVPS。

squidの認証

proxy.pacがクライアントに適用されているかを確認しようと思ったが、
Windowsで自動設定されたプロキシが何かを簡単に確認する方法がわからなかった。

じゃあプロキシサーバ経由でどこかにアクセスしてアクセスログをみればわかるだろうと思ったが、
適当なプロキシサーバがなかったので、自分のVPSに建てることにした。

「建てる」なんておおげさなものではないが。

そもそもサーバというものは、「構築」なんていう大したものではない。

だいたい小さな簡単なソフトウェアが動くだけである。基本は。


centosにsquidをいれる。

やり方はあちこちに書いてあるが、認証の設定でちょっと迷った。


acl AUTH proxy_auth REQUIRED
http_access allow AUTH

こういう風に書くのだが、
aclの次のパラメータは任意の名前で、
次の行でそのaclに該当するアクセスを許可するのである。