ベスパリブ

プログラミングを主とした日記・備忘録です。ベスパ持ってないです。

Raspberry Pi 3 の無線LANをWEPで接続

ルータに繋がらないなあと思っていたら、WPAじゃなくてWEPでした。大丈夫かなこの施設…

やり方はここのサイトの一番下に書いてありました。
https://www.freebsd.org/cgi/man.cgi?query=wpa_supplicant.conf&sektion=5&apropos=0&manpath=NetBSD+6.1.5

ラズパイが接続可能なアクセスポイントは、スキャンすることで見つかります

$ sudo iwlist wlan0 scan >> hoge.txt
$ less hoge.txt

ルータの情報は以下と仮定します。
SSID:MY_SSID
パスワード:HereIsPassword

Raspberry Pi 3のネットワーク情報はwpa_supplicant.confファイルを編集するらしいです。
(WEPで接続するのにwpa_supplicant.confを編集していいものか…まあいいや)

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf

country=JP
ctrl_interface=DIR/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
   ssid="MY_SSID"
   scan_ssid=1
   key_mgmt=NONE
   wep_tx_keyidx=0
   wep_key0=HereIsPassword
}

【2021/08/30追記】

Traditional WEP configuration with 104 bit key specified in hexadecimal.
Note the WEP key is not quoted.

wep_key0は、ダブルクオーテーションで囲まないことに注意してください。

【2021/08/30追記終わり】

scan_ssidとwep_tx_keyidxの意味はよくわかってないけれど、接続できました。

.gitignoreで、あるディレクトリの中身すべてを無視しない

次のようなディレクトリ構成があるとします。

├hoge2.txt
├hoge1.txt
├.gitignore
└main/
 ├ taskA/
 │ └ taskAA/
 │   └ taskaa.py
 └ test1.py
 └ test2.py

main/ディレクトリの中すべてのみをgitで管理したかったので、次のように書きました。

.gitignoreの中身

*         # すべて無視する
!/main/*  # ただしmain/ディレクトリ以下のファイルすべては除く

しかしこれではうまくいきませんでした。
この状態で git add . しても、なにもステージングされません。
この状態でステージングできるのは、main/ディレクトリのみです。しかし、gitは空のディレクトリのみは管理できないらしいので、実際は何もステージングされないということ(らしい)です。

main/ディレクトリ以下のファイルをステージングしたいならば、まずmain/ディレクトリ自体を除外する必要があります。

.gitignoreの中身

*         # すべて無視する
!/main/   # ただしmain/ディレクトリは除く
!/main/*  # ただしmain/ディレクトリ以下のファイルすべても除く

これでもまだダメです。
この状態でgit add .したら、次のファイルがステージングされます。

  • main/test1.py
  • main/test2.py

どうやら、ステージングされるのはmain/ディレクトリ直下のファイルのみのようです。
main/ディレクトリ直下のディレクトリも含めたすべてをステージングしたいならば、次のようにします。

.gitignoreの中身

*           # すべて無視する
!/main/     # ただしmain/ディレクトリは除く
!/main/**   # ただしmain/ディレクトリ以下のファイルもディレクトリすべても除く

これでOKです。
git add .すると、次のファイルがステージングされます。

  • main/test1.py
  • main/test2.py
  • main/taskA/taskAA/taskaa.py

難しいですね。

参考URL
http://qiita.com/anqooqie/items/110957797b3d5280c44f

ユーザコントロールから自身のWindowを取得する。それとLoadedイベント

Visual Studio 2010のWPFでアプリを開発中。
Windowにユーザコントロールを設置してあり、そのユーザコントロールのボタンが押された時にWindowのコントロール(ボタンとか)を制御したい。

ユーザコントロールから自身のWindowを取得するのは簡単。

(Window1) win = (Window1)Window.GetWindow(this);

ただ、このコードをユーザコントロールのコンストラクタに書いたらNullReferenseのエラーが発生する。
Loadedイベントとかに置いたらエラーは発生しない。
というわけでxamlにLoadedイベントを作ろう。

Control_MyControl1.xaml

<UserControl x:Class="MyProject1.Control_MyControl1"
                      xmlns="http://schemas.microsoft.com/womfx/2006/xaml/presentation"
                      (略)
                      Loaded="Control_MyControl1_Loaded" > <!-- Loadedを追加 -->

xaml.csにLoadedイベントハンドラを追加する

Control_MyControl1.xaml.cs

using System;
(略)
namespace MyProject1{
   public partial class Control_MyControl1: UserControl
   {
      (略)
      private void Control_MyControl1_Loaded(object sender, RoutedEventArgs e){
         (Window1) win = (Window1)Window.GetWindow(this);  
      }
   }
}

本当にLoadedイベントで良いのか?という疑問は残る。

似たような機能の関数を区別しやすいような関数名をつける

「左側のメニューにある複数のボタンのそれぞれについて、クリック可能/不可能を更新する」みたいな関数名をつけるとき、次の2種類を考えた。
・UpdateLeftSideMenuClickable
・UpdateClickableOfLeftSideMenu

どちらがよいか悩んだ時の方針として、とりあえず似たような機能の関数をつくってみる。

・UpdateLeftSideMenuClickable
・UpdateRightSideMenuClickable
・UpdateTopMenuClickable
・UpdateBottomMenuClickable

・UpdateClickableOfLeftSideMenu
・UpdateClickableOfRightSideMenu
・UpdateClickableOfTopMenu
・UpdateClickableOfBottomMenu

下側のほうが「UpdateClickableOf」まで共通なので、ぱっと見て区別がつくし、整理されている。
下のほうが良いよね、という話。

C# 16進数文字列を数値に変換する

数値を16進数文字列に変換するのはWEBを探せばよくあるが、その逆は見かけなかったので。

using System;
using System.Globalization;

public class Test
{
    public static void Main()
    {
    // your code goes here
    string str = "FF";
    int ans = int.Parse(str, NumberStyles.AllowHexSpecifier);

    Console.WriteLine("str:" + str);
    Console.WriteLine("ans:" + ans);
    }
}

↓結果

str:FF
ans:255

NumberStylesを使うためにはusing System.Globalizationが必要。

Shift-JISのC言語のソースをコンパイルすると「warning: multi-line comment」が出る

謎バグで悩まされたソースコード

// アナログ値のテーブル表
sprintf((char*)tmp_str, ",アナログ値,合計"); //なぜかこれがないと以前のtmp_strが出力される
sprintf((char*)tmp_str, ",アナログ値,合計");
tcp_send_writeline( SmtpSocket, (BYTE*)tmp_str, 1 );
...(略)

C言語でこんなコードを書いてる人がいました。僕ですけど。
問題なのは、コメントアウト行。
Shift-JISで書かれたCのソースは、『表』で終わらせてはダメ。

SHIFT-JISのダメ文字

検索したらでてくるでてくる。時代を超えてる感ある。

C言語コンパイル時『warning: multi-line comment』に注意すること - 日々情報収集...

時代はUTF-8なので、良い子はUTF-8使おうね。

Please move or remove them before you can switch branches.

branchにcheckoutできない。

git checkout .

作業を取り消すにはこれ。実行する。
しかしまだ同じエラーが出る。

git clean -f

http://qiita.com/konweb/items/061475d6376db957b3c4
これをするといいらしいので、実行。
しかしまだ同じエラーが出る。

Please move or remove them before you can switch branches.

エラーメッセージの「branch切り替える前にファイルを削除して」という言葉を実行する。

rm folder1/folder2/folder3/* -r //フォルダ内を再帰的に削除

エラーが消えてbranchが切り替えられるようになった。