Kamuycikap - SentenceDataBase

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

かなりの高機能!! シリアルポートエミュレータ 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

RaspberryPiのHDMIディスプレイ解像度を調整

自宅テレビの解像度を調整する

自宅テレビにHDMI接続して試してみると、視力検査のような小さな文字になってしまってます。
自宅のテレビは32型。
近くによると見えますが、気持ちとしては2mくらい離れて使いたい。
なので、解像度を調整します。

<目次>

  1. ディスプレイ設定のパラメータを確認
  2. /boot/config.txtの編集
  3. RaspberryPiの再起動

ディスプレイ設定のパラメータを確認

Google先生に聞いてみると、同じように調整している人たちの記録を閲覧することができます。
様々設定が記載されていましたが、下記の2点だけ決めればOKみたいです。

hdmi_group
hdmi_mode

config.txt設定詳細
ここを見て、自分がほしい解像度を選びます。
調査してみると、自分のテレビだとこのあたりでしっくりきました。

/boot/config.txtの編集

バックアップをとってからファイルを修正します

$ sudo cp /boot/config.txt /boot/config.txt.original
$ sudo vi /boot/config.txt

#でコメントアウトされているところを、#を消して有効にするだけです。

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2   # <--- HDMI
hdmi_mode=23   # <--- 1280x768 60 Hz

RaspberryPiの再起動

コマンドで再起動!!

$ sudo shutdown -r now

もしも解像度指定に失敗したら・・・(´-ω-`;)ゞポリポリ

失敗したら、再起動と同時に画面が真っ暗!!になります。(*゚Д゚*)ェ…
その場合は・・

  1. SDカードを抜いてパソコンにセット!
  2. テキストエディタで、SDカードの/boot/config.txtを編集
  3. SDカードをRaspberryPiに戻して電源ON!

です。

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

Org-modeを8.2.10にしたら、Org-remember.elが使えなくなってた。

Org-capture

Org-modeでGTDな設定を行って自分の仕事を一元管理する仕組みを作って活用しようとアレコレしてました。
参考にしたのは下記のサイトです。

OrgMode/Org-modeでGTD実践(翻訳)

こちらのサイトをキッカケにしてOrg-modeのGTDについて調査していると、最新のOrg-modeが欲しくなり本家から最新のものを導入することにしました。
しかし、そこで思わぬ結果が。。。。

どうも、org-remenberはorg-captureというものに完全に置き換えられたみたいです。
※英語のマニュアルに書いてありました。
Org-mode Manual 8.2.10:9.1 Capture

org-capture-templatesを設定しなければならない

みたいですね。
書き方の参考になる情報を見つけました。
英語ですが、Google翻訳で頑張れば翻訳できそうです。
org-rememberテンプレートに似ていますね。

org-capture-templatesの設定要素について

設定要素「テンプレート」の書式

私の設定

Googleに「org-capture-templates」で質問すればアレコレと設定が出てきます。
以下に、私の設定を公開します。
ファイルパス部分については、自分の環境に合わせて読み替えてください。
アジェンダビューの設定についても説明は割愛します。

;; Org-captureをC-c rで呼び出す。
(define-key global-map "\C-cr" 'org-capture)

;; Org-caputure
;; Org-mode version8.xから導入されたorg-rememberの高機能版

(when (require 'org-capture nil t)

  (setq org-capture-templates
        '(("n" "Nico" entry (file+headline "~/.emacs.d/org_dat/gtd/nicosys.org" "INBOX")
           "* TODO %^{Brief Description} %^g\n%?\nAdded: %U")
          ("8" "870" entry (file+headline "~/.emacs.d/org_dat/gtd/870.org" "INBOX")
           "* TODO %^{Brief Description} %^g\n%?\nAdded: %U")
          ("h" "Home" entry (file+headline "~/.emacs.d/org_dat/gtd/home.org" "INBOX")
           "* TODO %^{Brief Description} %^g\n%?\nAdded: %U")
          ("p" "Projects" entry (file+headline "~/.emacs.d/org_dat/gtd/projects.org" "INBOX")
           "* TODO %^{Brief Description} %^g\n%?\nAdded: %U")
          ("d" "Note" entry (file+datetree "~/.emacs.d/org_dat/gtd/note.org" "MEMO")
           "* %^{Title} %^g\n%?\nAdded: %U")
          ))

  (setq org-agenda-custom-commands
        '(
          ("s" "SVF Lists" tags "SVF")           ; SVFタグを抽出
          ("p" "Projects Lists" tags "PROJECT")  ; PROJECTタグを抽出
          ("n" "Note Lists" tags "NOTE")         ; NOTEタグを抽出
          ("h" "Office and Home Lists"           ; @OFFICEタグでTODO
           ((agenda)
            (tags-todo "@OFFICE")
            (tags-todo "@HOME")))
          
          ("d" "Daily Action List"
           (
            (agenda "" ((org-agenda-ndays 1)
                        (org-agenda-sorting-strategy
                         (quote ((agenda time-up priority-down tag-up) )))
                        (org-deadline-warning-days 0)
                        )))))))



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

NTEmacs24にOrg-modeの最新安定版をインストールしたメモ

org-modeの最新版(8.2.10)インストール方法メモ

GTD(Getting Things Done)について勉強を初めて、さらにEmacsが好きになった私です。
Emacsには導入時にorg-modeがインストールされた状態になっていますが、本家サイトに最新版が公開されているのでそれを導入してみます。
org-remenberの設定も掲載していますが、これについては予めremember-modeの導入を終了させている必要があります。

.emacs.dやinit.elの説明は書いていません。
その辺りの知識を持っている人を前提としてメモします。

環境

今回はWindows7に導入したNTEmacs24への導入を行いますが、LinuxMacへの導入も基本的には同じ解釈でいけるのではないかと思っています。
おおまかな流れとしては、zipファイルをダウンロードして解凍し、load-pathの通っているディレクトリへコピーした後に、init.elに読み込み設定を書くだけです。
Linuxは動作しました、MacOSXは確認していません。

目次

  1. 最新ファイルのダウンロード
  2. ファイルの展開
  3. lispファイルのディレクトリをload-pathディレクトリ以下へコピー
  4. init.elへ設定

最新ファイルのダウンロード

以下の本家サイトから、最新安定版のzipファイルをダウンロードします。
org-mode本家

ブログ執筆時の最新ファイルは「org-8.2.10.zip」でした。

ファイルの展開

ダウンロードしたファイルを展開します。
すると、ドキュメント等を含めた一式のディレクトリが展開されます。
必要なのはlispディレクトリの中にあるファイル達です。

contrib <---- このディレクトリが必要
doc
etc
lisp  <---- このディレクトリが必要
mk
COPYING
Makefile
README
request-assign-future.txt

ディレクトリの意味などについては、READMEファイルをテキストエディタで閲覧すると書いてあります。

lispファイルのディレクトリをload-pathディレクトリ以下へコピー

展開したファイルに含まれている「lisp」ディレクトリをコピーします。
コピー先は、Emacsの設定ファイル「init.el」で設定されているであろう「load-path」が通っているディレクトリです。

おそらくですが、init.elに下記のような記述があると思います。

(setq load-path (cons “load-pathに含めたいディレクトリへのパス” load-path))

コピーしたら、どんな方法でもいいので「lisp」ディレクトリを「org」に名前変更します。
さらに、名前変更した「org」ディレクトリの中に、展開したzipファイルの中にある「contrib」ディレクトリをコピーします。

~/emacsのload-path/
   |
   |---org
      |
        |---contrib

これで、インストールは終了。
あとは、設定ファイルの記述です。

init.elへ設定

私の場合、init.elに以下のようにload-pathの設定をしています。
こうすることで、load-path以下にディレクトリを作ると自動的にload-pathに追加されていきます。
※このコードは、Emacs実践入門のサンプルソースを参照させて頂きました。

;; load-path を追加する関数を定義
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory
              (expand-file-name (concat user-emacs-directory path))))
        (add-to-list 'load-path default-directory)
        (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
            (normal-top-level-add-subdirs-to-load-path))))))

;; 引数のディレクトリとそのサブディレクトリをload-pathに追加
(add-to-load-path "elisp" "conf" "public_repos")

上記が良くわからない人は、こんなコードでもOKかなと思います。

(setq load-path (cons “~/path/to/orgdir/lisp” load-path))
(setq load-path (cons “~/path/to/orgdir/contrib/lisp” load-path))

org-modeの設定は、かなり好みがありますし、ネットには先人の設定が散らばっていますので好きなモノを採用すれば良いと思います。
以下、私の設定です。
ディレクトリパスの記載がありますが、そこは自分の環境に合わせて読み替えてください。

;; org-mode
(when (require 'org-install nil t)

  ;; 2015/02/03 GTDな管理を目指して過去のフォルダをコメントアウト。書き方のサンプルとして
  ;;(setq org-agenda-files (list "c:/work/documents/note/2014" "c:/work/documents/note/2015"))

  ;; There is Agenda files in Folder.
  (setq org-agenda-files (list "~/.emacs.d/org_dat/gtd"))
  
  ;; アジェンダに表示する時間を変更
  (setq org-agenda-time-grid
        '((daily today require-timed)
          "----------------"
          (900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300 2400)))
  
  (define-key global-map "\C-cl" 'org-store-link)
  (define-key global-map "\C-ca" 'org-agenda)
  (define-key global-map "\C-cr" 'org-remember)

  ;; TODOの項目を増やす
  (setq org-todo-keywords
        '((sequence "TODO(t)" "APPT(a)" "|" "DONE(d)"))) ; TODO ← やっつける、APPT ← あとでやる、DONE ← 終了
  
  ;; (setq org-log-done 'time)  ; TODO→DONEで時間を記録する
  (setq org-log-done 'note)  ; TODO→DONEで時間を記録し、さらにノートの記載を促す

  ;; 経過時間の履歴保存
  (setq org-clock-persist 'istory)    ; 
  (org-clock-persistence-insinuate)   ;
  
  ;; 拡張子がorgのファイルを開いた時,自動的にorg-modeにする
  (add-to-list 'auto-mode-alist '("\\.org$" . org-mode))

  ;; org-modeでの強調表示を可能にする
  (add-hook 'org-mode-hook 'turn-on-font-lock)

  ;; エクスポートする時の設定
  (setq org-agenda-exporter-settings
        '((ps-number-of-columns 1)
          (ps-landscape-mode t)
          (htmlize-output-type 'css)))
  
  ;; 見出しの余分な*を消す
  (setq org-hide-leading-stars t))

再起動!!

Emacsを再起動して下記のコマンドを実施したとき、最新のバージョンになっていれば成功です。

M-x org-version 
Org-mode version 8.2.10


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

Windows8.1でTrinketを動かしてみた

Adafruit TrinketをWindows8.1で動かしてみた

大阪の日本橋にあるシリコンハウスのレジ横に掛けられていた1000円マイコン
AdafruitのTrinketを動かすまでの手順とメモ

  1. ArduinoIDEで開発が可能
  2. FDTIな仕組みがなくてもUSB接続だけでプログラムを転送できる
  3. カドが丸い超小型設計(100円玉くらい)
  4. 5V駆動(3Vバージョンも有り)

これが紹介されていた特徴です。
FDTIを購入して、ArduinoProとか購入を考えていたんですが・・・・
これは試してもいいかもと思いたって購入。

FDTIは一度購入すれば色々使い倒せるのですが、小型Arduinoを購入するとなるとArduinoProは高いです。
毎回2000円ほどの出費は辛い。
Atmega328Pにブートローダーとソフトを焼きこんでオリジナルで動かすと小さくはできますが、このTrinketはそれよりもさらに小さい。
使い倒せたら色々おもしろいかもです。
服に縫い付けても角丸なので引っかからないかな??とか思ったりします。

開発環境のダウンロード

本家のサイトに、開発環境の作り方が書いてあります。
ArduinoIDEに対応しているとはいえ、そのままソフトをコンパイルはできそうにありません。
まぁ、アーキテクチャが異なるので普通にはいかなくて当然ですね。

本家サイトを参考にしてアレコレ頑張ってもいいのですが、作業完了済みのArduinoIDEをダウンロードすることが出来ます。
こっちをダウンロードするほうが確実で速いですね。
中の仕組みは、暇な時に眺めればいいとして、Trinketを動かすことを優先とします。

https://learn.adafruit.com/introducing-trinket/setting-up-with-arduino-ide#the-fast-way

USBTinyドライバーのダウンロード

★ダウンロードはこちら★
https://learn.adafruit.com/usbtinyisp/drivers

今回はWindows8.1で利用することを想定しているので、Windows8.1バージョンをダウンロードします。
適当なフォルダに解凍しておきます。
※解凍するとInstall...とかそれらしい実行ファイルがありますがそれは実行しません。解凍するだけです。

USBTinyドライバーのインストール

ここのくだりでかなり悩みました。
ちなみに、私のパソコンは「Lenovo G-500」です。

本家サイトでは、TrinketをUSBコネクタ(タイプA <--> ミニB)をパソコン本体に接続すると、ドライバーインストールのダイアログが表示されるような事が書かれてたんですが、、、、私の場合はそれが出てきませんでした。
色々試した結果ですが

だったのでUSBハブを試してみると

USB2.0のハブ(電源供給)を経由して接続するとOK!!

という結果になりました。
Trinketが壊れてるのかとアレコレ考えましたが、どうも電流値が足りてなかったかもしれないですね。
ただ、海外ではハブを経由したらダメだったとか、直接接続してもイケたとか情報が散らばってます。
何が正しいのかはわかりませんが、色々ためさなければならないかもしれません。
※パソコン(無印デスクトップ)変えたらハブを経由しなくてもイケました。

ダイアログで、解凍したUSBTinyフォルダのトップフォルダを指定してあげると、自動的に適切なファイルを実行してドライバーのインストールが完了します。

開発環境の設定

無事に開発環境とドライバーのセットアップができたら、次は開発環境の設定。
難しいことはなく、マウスで特定の箇所を選択するだけ。

  1. ツールマイコンボード>Adafruit Trinket 16MHz
  2. ツール>書込装置>USBtinyISP

これだけ。

プログラムの準備

本家サイトに、Blinkのサンプルがあったのでそれをそのままコピペ。

      /*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.

  To upload to your Gemma or Trinket:
  1) Select the proper board from the Tools->Board Menu
  2) Select USBtinyISP from the Tools->Programmer
  3) Plug in the Gemma/Trinket, make sure you see the green LED lit
  4) For windows, install the USBtiny drivers
  5) Press the button on the Gemma/Trinket - verify you see
     the red LED pulse. This means it is ready to receive data
  6) Click the upload button above within 10 seconds
*/
 
int led = 1; // blink 'digital' pin 1 - AKA the built in red LED

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);

}

// the loop routine runs over and over again forever:
void loop() {
    digitalWrite(led, HIGH); 
    delay(1000);
    digitalWrite(led, LOW);
    delay(1000);
}

コンパイルしてみると無事に終了。

プログラムの転送

これも、ちょっと悩みました。
Trinketはシリアルで書き込むタイプではありません。
なので、根本的にUNOとかとは違います。

「ファイル」→「書き込み装置を使って書き込む」

を実行することでプログラムが転送されます。
ただし、注意が必要!!!

サンプルプログラムの冒頭に書かれている英文がヒントなのですが

  5) Press the button on the Gemma/Trinket - verify you see
     the red LED pulse. This means it is ready to receive data
  6) Click the upload button above within 10 seconds
(*´∀`)ノ 赤色LEDが点滅している10秒の間に書き込み動作をしてね!!

と言うことらしいです。
USBポートに接続すると、緑色のLEDが点灯し、追って赤色のLEDが点滅し始めます。
赤色LEDが点滅している時にプログラムを転送しないと、Trinketは受け付けてくれないようです。

(*´∀`)ノ タイミングを逃したらTrinketのResetボタンを押して仕切り直し

です。

無事にプログラムが書き込まれると、赤色LEDが1秒間隔で点滅します。


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