2016年3月30日

Beagle Bone BlackにSoftetherVPNを入れてみた

Beagle Bone BlackにSoftetherVPNを入れてみた。
選択したのは、ubuntu Xenial Xerus(16.04)を選択。まだDevelopment branch)だけど、特に問題なさそうということで。本当は、ubuntu snappyを入れようと思ったんだけど、うまくブートできなかったというのはある。

最新版のイメージはここから入手できるし、Windowsでも簡単にブートMMCを作成できる。
http://elinux.org/BeagleBoardUbuntu#eMMC:_BeagleBone_Black

ただ、イメージが2GBなんでいろいろ考えないと、すぐに2GBがいっぱいになっちゃう。
普段なら自動拡張するんだけど、こいつじゃ自動拡張は使えなかった。

Debian 8.3を選択したことがあるんだけど、eth0がconnctlで設定されているために、いろいろ面倒くさそうなんで、/etc/network/interfacesをいぢり回せるubuntuが良いかと思う。

ここまで設定できたらSofteterVPNのインストールなんだけど、ここが参考になると思う。

SoftEther VPNでLinux録画サーバを外部公開する方法(Ubuntu・Debian編) - 自分に負けないラボラトリー

アイドル状態といえど、結構頑張っている。
メモリが512MBしか搭載されていないが、意外とフットプリントが小さいのに驚く。

htop

ラズパイより情報が救いないBBBだけど、実際はそんなに違いはないんで動き出したら普通にLinuxとして使えるのは非常に嬉しい。
しかし、こんなに小さなPCでいろいろできるのは凄いことだと思う。Linuxの練習機が5,000円程度で使えるってのは嬉しい限りではある。しかも、いろいろIOを接続できちゃうしね。

今回設定した /etc/network/interfaces を以下に

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual
# Example to keep MAC address between reboots
#hwaddress ether DE:AD:BE:EF:CA:FE

# The secondary network interface
#auto eth1
#iface eth1 inet dhcp

# WiFi use: -> connmanctl

# Ethernet/RNDIS gadget (g_ether)
# Used by: /opt/scripts/boot/autoconfigure_usb0.sh
iface usb0 inet static
    address 192.168.7.2
    netmask 255.255.255.252
    network 192.168.7.0
    gateway 193.168.7.1


auto br0
iface br0 inet static
    address 192.168.0.100
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    gateway 192.168.0.1
    dns-nameservers 192.168.0.1

bridge_ports eth0
brigde_stp off

| | コメント (0) | トラックバック (0)

2014年3月21日

ロギングプログラムを作成

C言語で温度をSQLiteに記録するプログラムを作成してみた。
これをcronで起動して記録しようと思う。

20140319_152540000_iOS

だんだん完成に近づいてきた。
ブレッドーボードも小さいものに変更してみた。まあ、この程度のものなら、小さいものにしてもかなり余っている。もったいない(^^;

Beaglebone Black面白い。プログラマーにもオススメ。

| | コメント (0) | トラックバック (0)

2014年3月 9日

LM61温度せセンサを接続してみた

Beaglebone BlackにLM61温度センサを接続してみました。

20140309_090745887_iOS

一応、microSDカードにubuntu 13.10を入れてある状態です。
AIN0(P9/39)からデータを取り込めるように接続ました。ブレッドボード楽ちん過ぎます。
このままだと読み込みができないようなので、AINを有効にします。

echo cape-bone-iio > /sys/devices/bone_capemgr.*/slots
cat /sys/devices/ocp.3/helper.*/AIN0

で読み込むことができるようです。 
来週くらいにプログラムを作成してロギングできるようにしてみようと思っています。

このままにしておくと、Beaglebone Blackとブレッドボードを接続しているケーブルが猫の餌食になってしまうので、一度机にしまうようにしようと思います。
猫がいる家庭だと安易に半田ゴテを気楽に使えないので、ブレッドボードはいいですね。

LM61のデータシートだと

VO = (+10 mV/˚C x T ˚C) + 600 mV

Temperature (T) Typical VO
+100˚C +1600 mV
+85˚C +1450 mV
+25˚C +850 mV
0˚C +600 mV
−25˚C +350 mV
−30˚C +300 mV

ということなので、今の時期だと800前後の値がでるのが正しいのか。0度が600mVで1度上がるごとに10mV増えるだけなので計算が楽でいいな。

T = (AIN0 – 600) / 10;

という計算になるのか。

---- 追記 ----
ブレッドボード上の回路を接続して安心してしまってP9とP8を間違えて接続していた(^^;
だから写真は間違えた接続です。とりあえずBeaglebone BlackもLM61もダメージがないようで良かった。

ということで測定した結果ですが

root@ubuntu-armhf:/home/ubuntu# cat /sys/devices/ocp.3/helper.*/AIN0
846
root@ubuntu-armhf:/home/ubuntu# cat /sys/devices/ocp.3/helper.*/AIN0
848
root@ubuntu-armhf:/home/ubuntu# cat /sys/devices/ocp.3/helper.*/AIN0
846

ということで24.6度ということでしょうか。そんなに温度は高くないとは思うんだけど、ディスプレイ(30インチで熱い)の前での測定なんでそんなもんかも。

| | コメント (0) | トラックバック (0)

2012年2月12日

Microsoft Wireless Mouse

家人も同時期にPCを入れ替えたのですが、そのときに無線マウスに変更したのを見ていて、意外といいかもと思い私も導入してみました。
マウスの受信部のドングルが邪魔なので、SOLO本体(PC内部)に「奥沢二丁目」で格納してみたのですが、受信状態が悪いのかカクカクとした動作に…
PC内部はノイズが多いのと分厚い鉄板のために電波が遮断されてしまっているのかもしれません。

仕方がないのでPC後ろのUSBポートにドングルを付けることでカクカクが直ったようです。

「奥沢二丁目」で内部に残っていたUSBポートを有効に使えると思ったのですが、残念な結果になってしまいました。
内蔵できるものがあるといいんですけどねぇ…

今まで私はSOLOを使い続けてきたのですが、家人のPCもSOLO Blackにしてみました。SOLO Blackかっこいいんでフロントパネルを変えたくなった(^^;
ついでにUSB3.0端子も欲しいかも…

IMG_0691

| | コメント (0) | トラックバック (0)

2008年10月21日

ConceptDraw MINDMAP 5 Professional

期間限定!!マインドマッピングツール『ConceptDraw』を無料でダウンロード。 : ライフハッカー[日本版], 仕事も生活も上手くこなすライフハック情報満載のブログ・メディア

lifehackerで知ったのですが、ConceptDraw MINDMAP 5 Professonalが無償で利用できるようです。
一つ前のバージョンのようですが、まだまだ使えるツールです。
使ってみた感じですが、メニューやヘルプなどが英語であることを除けば、非常に良いツールです。

大きな問題は、日本語が入るんだけど、動きが微妙過ぎて、日本語でうまく使えないところでしょうか。
英語で記述するなら非常に良いんですが…ただ、日本語の表示はできます。

登録も簡単で、登録するとシリアルキーが送られてきます。
ダウンロードしたMINDMAP 5 Professionalをセットアップして入力すれば、製品版として利用できます。まあ、無料なんで登録しておくのがいいかもね。

| | コメント (0) | トラックバック (0)

2008年9月13日

CAltRegExp

CAtlRegExpってATL Server向けのクラスなんだけど、結構便利だったので普通に使っていた正規表現のクラスが、VC2008 (SP1)から消えていたんですね(^^;
コンパイルができないんで、いろいろ調べていたら”atlrx.h”がなくなっている…
stl::tr1::regex系で置き換えるみたいだけど、結構使っている場合には、コードの書き換えが大きいですね。
ATLをそのまま使っている人が少ないので、それとWTLを組み合わせている人は、更に少ないと思うんだけど、VC7.1からバージョンアップしてしまうと、互換がなくなるので面倒です。

Windows Vistaにしてしまったので、VC9になってしまったのですが、こんな罠があったとは…
ATL+WTL使いにはかなりきつい変更です。

---追記---
正規表現の動作も微妙に違うみたい(^^;
CAtlRegExpよりもstl::tr1::regexのほうが一般的な気がします。ライブラリによって正規表現って微妙な違いがあるのがちょっと面倒だなぁ。
ATL::CStringを多様していたので、stl::stringに置き換える必要もあったりと、いろいろ面倒ですねぇ。
今後は、ATL系を使わずに、STLで書いてしまうのがいいのかな。
STL+WTLかSTL+SDKがベストなんだろうか。

| | コメント (2) | トラックバック (0)

2007年5月 5日

VSIでシリアル番号検証

VSIでシリアル番号を入力する必要があったので、いろいろ調べてみると標準の機能だと、検証するのは数値のみで、しかもそれらを加算して7で割れた場合には正しいというものでした。
これじゃ、すべての値に0を入れてしまえば、素通りになってしまいます。
あまり使える機能じゃありません。
インターネットでいろいろ調べるとマイクロソフト社の公式情報がありました。しかし、この情報はVSI1.0/1.1向けで、Visual Studio 2005のVSI2.0向けじゃないみたいです。しかも、微妙に分かりにくい。
ただ、これでも問題ないのですが…
さらにインターネットを探すとVSI2.0向け(というかVisual Studio 2005向け)の情報が、Validating a Product Key in a VS.NET Installにあり、それを参考にしました。

<とりあえず必要な物>
- Visual Studio 2005 Professional Edition以上
- Platform SDK(のWindows Installer SDK)

<シリアル検証用DLL>
シリアル番号を検証するためのDLLを作成します。
特別なDLLという訳ではなく、普通のDLLとして作成すれば動作します。
→サンプル(VerifyPID.ZIP)

#include "stdafx.h"
#include <Msiquery.h>

#pragma comment(lib, "msi.lib")

BOOL APIENTRY DllMain(HMODULE hModule,
                   DWORD ul_reason_for_call,
                   LPVOID lpReserved
)
{
    return TRUE;
}

extern "C" UINT __stdcall VerifyPID(MSIHANDLE hInstall)
{
  UINT nRetVal = 0;
  TCHAR szPidKey[MAX_PATH] = {0};
  int str = -1;

  DWORD dwBuffer = sizeof(szPidKey)/sizeof(TCHAR);

  // 入力されたプロダクトIDを取り出す
  UINT uiMsiRc = MsiGetProperty(hInstall, TEXT("PIDKEY"), szPidKey, &dwBuffer);

  if (ERROR_SUCCESS == uiMsiRc)
  {
    // プロダクトIDを比較
    // * VSIでテンプレートを"<???-######>"とした場合
    str = lstrcmp(szPidKey, TEXT("ABC-123456"));
  }

  // "PIDCHECK"プロパティは、ORCAで追加するプロパティ
  if (str == 0)
  {
    // "PIDCHECK"プロパティを"TRUE"に設定する
    MsiSetProperty(hInstall, TEXT("PIDCHECK"), TEXT("TRUE"));
  }
  else
  {
    // "PIDCHECK"プロパティを"FALSE"に設定する
    MsiSetProperty(hInstall, TEXT("PIDCHECK"), TEXT("FALSE"));
    // 自分でメッセージを出さないと、VSIでは正しくない場合には警告が表示されない
    MessageBox(NULL, TEXT("入力されたキーは正しくありません"), TEXT("セットアップ"), MB_OK | MB_ICONEXCLAMATION);
  }

  return 0;
}

<MSIの変更>
MSIファイルを変更する必要があります。
これは、MSIファイルを作成する度に修正する必要があります。
この毎回の作業が面倒臭いし、自動化できないのが問題です。
MSIの変更は、Platform SDK(Install SDK)に含まれるorcaというツールで行います。ただし、このツールは、別途自分でインストールしないといけません。

(1) シリアル検証用DLLの埋め込み
テーブルの"Binary"に新規に"Row"を追加します。
  Name   VerifyDLL  (ここは好きな名前で問題ない)
 
Data   作成したシリアル検証用DLL
この作業によりシリアル検証用DLLがMSIに組み込まれるようです。

(2)  カスタムアクションを定義する
テーブルの"CustomAction"に以下の項目を追加する
  Action    CheckPID  (ここは好きな名前で問題ない)
  Type       1
  Source   VerifyDLL  (DLLの埋め込みの"Name"で指定した名前)
  Target   VerifyPID (DLLの関数名)
Targetで指定するのは、DLLの関数名なのですが、DEFファイルで定義している場合には、その名前にします。
DEFファイルを用いないでdllexportで指定している場合には、"_VerifyPID@4"のように指定します。面倒なのでDEFファイルを指定したほうが間違いありません。

(3) プロパティ追加
プロパティを追加します。このプロパティは、DLL内でも利用しますので、あまり名前を変更しないほうが良いでしょう。
テーブルの"Property"に追加します。
  Property   PIDCHECK
  Value         FALSE

(4) 判定を行う
判定を行うダイアログのイベントを変更します。
テーブルの"ControlEvent"を変更(今までのように追加じゃありません)します。
フィールド"Dialog"が"CustomerInfoForm"が対象となります。
  (a) コントロールが"NextButton"、イベントが"ValidateProductID"の項目
     イベント"ValidateProductID"を"DoAction"に変更
     アーギュメント"{}"を"CheckPID"(カスタムアクションのAction)に変更
  (b) コントロールが"NextButton"、イベントが"NewDialog"の項目
    コンディションを
      (PIDCHECK="TRUE") AND CustomerInfoForm_NextArgs<>"" AND CustomerInfoForm_ShowSerial<>""
    に変更

(5) 変更したMSIを保存する
今までの変更を修正して保存します。

おしまい

自動化するのは難しいのですが、orcaのImport機能を使うことで、比較的間違いなく変更することができます。

例えば、以下のファイルを"Property.idt"として保存し、ocraからImportすると、簡単にプロパティを追加することができます。
この場合には、Import時に"marge"を指定してください。

Property Value
s72 l0
932 Property Property
PIDCHECK FALSE

フォーマットが分かれば、orcaでExportして編集しておくことで、簡単にmargeすることができます。
Exportしたファイルを変更する場合には、先頭の3行は変更してはいけません。変更するのは4行目からです。
ただし、今回はCustomActionだけは変更なので、margeできませんので気をつけてください。
無理にImportする場合には、margeでmargeした後に、不要となる行を削除します。

| | コメント (0) | トラックバック (0)

2007年1月24日

VS2005でmanifest

Visual Studio 6からVisual Studio 2005へC++プロジェクトを変換してみました。
Visual Studio 6の頃に、XPスタイルを有効にするため、無理矢理manifestファイルをプロジェクトに埋め込んでいたのが悪かったのか、変換後にどうやってもmanifestファイルが有効になりませんでした。
いろいろ調べてみると、なんだか自分で作成していたmanifestが読み込まれていないみたい。
プロジェクトを変換時に、必要なmanifestファイルを自動作成してくれるようで、自動作成されたmanifestファイルと、Visual Studio 6の頃に自分で作ったmanifestを、テキストエディタで手動結合(XMLファイルで良かった!)。
プロジェクトのプロパティのマニフェストツールの設定で、"追加のマニフェストファイル"として追加してみました。
これで問題なくXPスタイルが有効になった模様です。
すべて自動的にプロジェクトを変換してくれないんですねぇ。ちょっと悩んでしまいました。
これが正しい方法じゃないかもしれませんが、とりあえず動作するんで由とします(^^;

Vs2005manifest
▲設定はこんな感じ(クリックすると拡大すると思う…)

| | コメント (0) | トラックバック (0)

2006年10月26日

多色のアイコンとカーソルを作る

いかさないアイコンやカーソルしか書けない(絵心がない)プログラマが多いと思います。私もその一人です。
それでも、いかしたアイコンやカーソルを作りたいと常日頃思っていたりします。
しかし、マイクロソフト社から提供されるIDE(Developer Studio)じゃひ弱過ぎたりして、ちょっとだけですが物足りません。
このツールを使えば、Photoshopでアイコンやカーソルを多色で作成できます。
できあがったデータは、LoadImageで読み込んじゃってください。

philipp-spocth.de

ここで配布されているPhotoshopのプラグインを使えば、あら不思議、多色のアイコンやカーソルが作れてしまいます。
ただ、問題はいくらすばらしいツールがあっても絵心がないと、結局はいかす愛顧が作れないってことです(T_T)

| | コメント (0) | トラックバック (0)

Windows Vistaのセキュリティ

Windows VistaになってCOMのセキュリティが変わったみたいです。
仕事でいろいろあってちょっと調べてみました。

The COM Elevation Moniker”(MSDN)

typedef struct tagBIND_OPTS3 : tagBIND_OPTS2
{
  HWND hwnd;
} BIND_OPTS3, * LPBIND_OPTS3;

HRESULT CoCreateInstanceAsAdmin(HWND hwnd, REFCLSID rclsid, REFIID riid, __out void ** ppv)
{
    BIND_OPTS3 bo;
    WCHAR  wszCLSID[50];
    WCHAR  wszMonikerName[300];

    StringFromGUID2(rclsid, wszCLSID, sizeof(wszCLSID)/sizeof(wszCLSID[0]));
    HRESULT hr = StringCchPrintf(wszMonikerName, sizeof(wszMonikerName)/sizeof(wszMonikerName[0]), L"Elevation:Administrator!new:%s", wszCLSID);
    if (FAILED(hr)) return hr;
    memset(&bo, 0, sizeof(bo));
    bo.cbStruct = sizeof(bo);
    bo.hwnd = hwnd;
    bo.dwClassContext  = CLSCTX_LOCAL_SERVER;
    return CoGetObject(wszMonikerName, &bo, riid, ppv);
}

今までCoCreateInstanceでCOMを作成していたのを、権限をあげて作成する場合には、こんな具合にするみたいです。
ただ、自分で作った物なら良いんですけど、他人が作った物(特にシステム標準)な物は権限をあげることができないみたいです。

HKEY_LOCAL_MACHINE\Software\Classes\CLSID\
{CLSID}\Elevation\Enabled = 1

レジストリにこのような記述がないとCO_E_ELEVATION_DISABLED(0x80070017だったかな)になっちゃうみたいです。
システムの物は勝手に書き換えるわけにも行かないし、困っちゃいますね。

manifestファイルでもコントロールできるようで、権限をあげるプログラムの場合には、アイコンにシールドマークが自動的に付加されるみたいです。

Developer Best Practices and Guidelines for Applications in a Least Privileged Environment” (MSDN)

ただ、このmanifestファイルは曲者で、注意が必要みたいです。

“.exe ファイルまたは Windows XP Service Pack 2(SP2)での .dll ファイルに Windows Vista 拡張子を持つマニフェストを追加すると、コンピュータは、再起動することがあります。”(MSDN)

とりあえず、アプリケーションを作るには、“Vista Compatibility Team Blog”を参考にするしかないんですね。今のところ。

| | コメント (0) | トラックバック (0)