このところゆえあって Python プロジェクトを担当しております。
括弧のない簡便さ、行末のセミコロンなし、インデント必須ってのははまりますね。
ライブラリの豊富さってのはプログラミング言語のすべてみたいなもんですが、こいつばかりは人気がモノを言います。
もっとも好まれる言語で選ばれる Python ならではの強みですね。
その Python でディレクトリ中のファイルをリストアップするスクリプトを書いてみました。
path でディレクトリを、type でソートのキーを指定します。
金曜日, 5月 04, 2018
金曜日, 1月 19, 2018
Arduino: ネオピクセルLEDテープライト
ちょっと感動しました。このネオピクセルLEDテープライト。まずフルカラーです。
どんどん明るくなっていくLEDなんですが、このテープ、それぞれLEDを指定して点灯できるんですね。
これLEDごとレジスタがついてる。
WS8212B データシート
シフトレジスタを使ってLEDを指定して点灯する方法がありますが、その原理です。シリアルで信号を送ってそれぞれ点灯できるわけです。それぞれ切り取って使えます。
「なんてこった」って思いましたね(笑。
Arduino 使ってつないで点灯してみたんですが、これですね。いいライブラリまで出てる。鮮やか。動きがある。並べるとイメージが違う。(実際はこの動画よりもっと鮮やかですよー)
Guide for WS2812B Addressable RGB LED Strip with Arduino
プログラムです。ライブラリはこちらです。
これ並べたマトリックス・ディスプレイまで出てますが(まだ高いですね)、夢が広がります。
どんどん明るくなっていくLEDなんですが、このテープ、それぞれLEDを指定して点灯できるんですね。
これLEDごとレジスタがついてる。
WS8212B データシート
シフトレジスタを使ってLEDを指定して点灯する方法がありますが、その原理です。シリアルで信号を送ってそれぞれ点灯できるわけです。それぞれ切り取って使えます。
「なんてこった」って思いましたね(笑。
Arduino 使ってつないで点灯してみたんですが、これですね。いいライブラリまで出てる。鮮やか。動きがある。並べるとイメージが違う。(実際はこの動画よりもっと鮮やかですよー)
Guide for WS2812B Addressable RGB LED Strip with Arduino
プログラムです。ライブラリはこちらです。
これ並べたマトリックス・ディスプレイまで出てますが(まだ高いですね)、夢が広がります。
日曜日, 1月 14, 2018
Arduino: 光と音で警告するマウス
作ってみました。ここは当然の如く3Dプリンターで。IR距離センサーで反応します。
近づくと光と音で警告します。
フルカラーLEDで通常は青、反応すると赤、しばらくは緑が点灯します。
LEDが赤で点灯中は振動モーターで鳴ってくれます。
ケースは丸く作ったのですが思い直して両側を削って作りました。
のっかってる赤トンボは愛嬌です(頭でバランスがとれてます)。
こんな感じで動きます。
このプログラムは音声センサまでついてますが、写真のマウスは距離センサだけです(なくても動きます)。
近づくと光と音で警告します。
フルカラーLEDで通常は青、反応すると赤、しばらくは緑が点灯します。
LEDが赤で点灯中は振動モーターで鳴ってくれます。
ケースは丸く作ったのですが思い直して両側を削って作りました。
のっかってる赤トンボは愛嬌です(頭でバランスがとれてます)。
こんな感じで動きます。
金曜日, 1月 05, 2018
コメントを消すプログラム (flex)
できました。うざいコメントを消すプログラム。
コメントをすべて消してくれるプログラムです。
// から行末、/* */ 内を消すプログラムです。あしからず。
自分で書いても良かったんですが、flex 使ってみました。これならクオート(リテラル)の処理が自動です。
コンパイル方法は以下の通り。
ファイル名を指定してください。
コメントをすべて消してくれるプログラムです。
// から行末、/* */ 内を消すプログラムです。あしからず。
自分で書いても良かったんですが、flex 使ってみました。これならクオート(リテラル)の処理が自動です。
コンパイル方法は以下の通り。
flex remove-comments.l; gcc lex.yy.c -lfl -o remove-comments.exe
ファイル名を指定してください。
./remove-comments.exe filename
追記です(2021-02-24)。Cygwin 環境での flex のインストール方法です。結論から言うと、m4 をインストール。gcc をインストールで動きます。Devel パッケージからはだめです。個別のプログラム名でインストール。
うるさいコメントがこれで消えます。
(追記)IME変換ってのはアメ公のエゴが満開ですよね。日本語は連中の所有物じゃない。冒涜です。
火曜日, 12月 26, 2017
互換性(mysql_xxx)
年末の大掃除ですね。古いコードを再利用しようとしたらひっかかりました。PHP って互換性ないんですね。
mysql_xxx この辺を全部 mysqli クラスの関数へ変換。変数の順序が違う。
迷惑ですね。
しかしながら思うんですが…
プログラミング言語ってのはプロトコルですよ。一方的な変更は勝手ですよね。
少なくとも互換性は確保してほしい。
mysql_xxx この辺を全部 mysqli クラスの関数へ変換。変数の順序が違う。
迷惑ですね。
しかしながら思うんですが…
プログラミング言語ってのはプロトコルですよ。一方的な変更は勝手ですよね。
少なくとも互換性は確保してほしい。
月曜日, 12月 25, 2017
MySQL で、NULL 値
MySQL で、NULL 値を許可するかどうかで条件分岐が変わってきます。
LIKE では NULL 値をはじけないんですね。
コラムの値で NULL 値を許可するなら、OR で指定せねばなりません。
これなんですが、ここの status の値が NULL の場合、こうやって指定せねばなりません。
LIKE では NULL 値をはじけないんですね。
コラムの値で NULL 値を許可するなら、OR で指定せねばなりません。
SELECT * FROM pages WHERE menuid=$id AND NOT status LIKE 'onhold' ORDER BY id desc
SELECT * FROM pages WHERE menuid=$id AND (status IS NULL OR NOT status LIKE 'onhold') ORDER BY id desc
気を付けましょう。
金曜日, 11月 24, 2017
デジタルからアナログへ
PC を使わないアナログ回路は設計・制作が(かなり)手間ではありますが省電力です。
LED を点滅させるだけならトランジスタでいけます。
それはいいんですが、アナログ回路の欠点といえばモジュール化できないところ。回路を組み合わせるのはケースバイケース、至難の業です。これが PC を使っていればどのようなセンサーでも使えます。標準化されたインターフェース(HIGH-LOW)だからですね。
ここでは回路をフォトダイオードで制御する回路を組み合わせてみました。
感度の調整は可変抵抗です。
LED を点滅させるだけならトランジスタでいけます。
それはいいんですが、アナログ回路の欠点といえばモジュール化できないところ。回路を組み合わせるのはケースバイケース、至難の業です。これが PC を使っていればどのようなセンサーでも使えます。標準化されたインターフェース(HIGH-LOW)だからですね。
ここでは回路をフォトダイオードで制御する回路を組み合わせてみました。
感度の調整は可変抵抗です。
木曜日, 11月 23, 2017
Arduino: アナログからデジタルへ
大抵のセンサーの出力はアナログです。光セル、音声マイク、赤外線距離センサーなど。Arduino ならアナログでもアナログ端子があるので使えるんですが、これを割り込み操作で使おうと思うとデジタルな値が欲しい場合があります。
オペアンプでセンサーの出力をデジタル化できます。
この回路は赤外線距離センサーの出力を増幅し、オペアンプでコンパレータ回路を実現したものです。基準値は非反転入力で調整します。
これでアナログの束縛から解放されますね。
割り込みを使った Arduino 用のプログラムはこちらです。
オペアンプでセンサーの出力をデジタル化できます。
この回路は赤外線距離センサーの出力を増幅し、オペアンプでコンパレータ回路を実現したものです。基準値は非反転入力で調整します。
これでアナログの束縛から解放されますね。
割り込みを使った Arduino 用のプログラムはこちらです。
日曜日, 11月 19, 2017
可変電源+ケース
可変電源を組んでケースを作ってみた。実用性はともかくきれいなのができた。青いケース、青い7セグがいい。こんないいのができると夢を誘う。
人間心理ってのは微妙なもので、「アクリル板曲げ」のサイトを読んでいたら危機感(これはまずい)が襲ってきたっていうか。急遽CADでデザインして3Dプリンタでケースを印刷。
金曜日, 11月 03, 2017
太陽電池+スーパーキャパシタでフルカラーLEDランプを点灯
晴れた日が続き、ようやっと太陽電池モジュールが動いてくれました。天気次第ってのがなんですね。でもこうやって光ってくれてると太陽のエネルギーが感じられますね。ほぼ永久機関。いいですね。
ソーラーパネルを使って充電するスーパーキャパシタを使った回路です。逆流防止用ダイオード挟んでますが、そのまま充電してフルカラーLEDを光らせてます。
ATTiny13A でグラデーションで色が変化するよう設定してます。ランプシェードは Thingiverse 一番人気のこれ。お気に入りです。
MySQL でコラム(列)の値を交換
MySQL でコラム(列)の値を交換する方法です。
変数を使います。
使わないと MySQL ではできないようです。
変数を使います。
使わないと MySQL ではできないようです。
update 'table' set start=(@tmp:=`X`), X=Y, Y=@tmp
日曜日, 10月 29, 2017
レーザーダイオード用定電流電源
ふとレーザーダイオードを点灯させよう!などと思い立ち、定電流電源を作ってみました。レーザーポインターなどで使われているあれですね。これはダイオードなので一定の電流を流してやる必要があります。
ボタン電池でそのままつなぐなる荒業があるらしいんですが、ここは電流を制限するほうが安心だってことでLM317で回路を組んでみました。
データシートそのままの回路ですが、Adjust - Out 間の電圧が1.25Vで保たれる性質を利用します。間の抵抗を調整することで電流を制御します。
久しぶりの電子工作のせいか手間取ったのみならず、なんだかできあがりは散々でしたが動きます。
追記:折角つくった定電流回路なのでケースを3Dプリンタで設計。
フィラメントがPLAなので、熱したはんだごてで成形できるわけなんです。
部品がきっちり収まるケースができました。感動ですね。
ボタン電池でそのままつなぐなる荒業があるらしいんですが、ここは電流を制限するほうが安心だってことでLM317で回路を組んでみました。
データシートそのままの回路ですが、Adjust - Out 間の電圧が1.25Vで保たれる性質を利用します。間の抵抗を調整することで電流を制御します。
久しぶりの電子工作のせいか手間取ったのみならず、なんだかできあがりは散々でしたが動きます。
追記:折角つくった定電流回路なのでケースを3Dプリンタで設計。
フィラメントがPLAなので、熱したはんだごてで成形できるわけなんです。
部品がきっちり収まるケースができました。感動ですね。
火曜日, 8月 29, 2017
Python 3.6 でユニコードを扱う場合。
Python 3.6 でデータベースからユニコード文字列をとってきて書きだそうと思うと引っかかります。
要はこれです。
ユニコードを指定します。でないとエラーを出します。
要はこれです。
f=open('test.txt', 'w', encoding="utf-8")
ユニコードを指定します。でないとエラーを出します。
月曜日, 8月 28, 2017
Python/MySQL のクエリーで%を使う
単純な話ですが ...
Python 3.6 はライブラリが一通りそろっていて文字列処理が楽です。
データベースを使うなら mysql-connector-python のようなドライバを導入してアクセスします。
クエリの書き方ですが、カーソルの execute() メソッドを使います。
クエリをそのままかくのもいいんですが、パラメタ化してエスケープするやり方です。
このカッコ、コンマは省略できません。
ここまでは既出だと思うんですが、ここで % を使いたい場合。
つまんない話なんですが、ネットでなかったんですよね。直接の記述が。これパラメタそのものをいじればいいんです。
これで%が使えます (いや、それだけです)。
Python 3.6 はライブラリが一通りそろっていて文字列処理が楽です。
データベースを使うなら mysql-connector-python のようなドライバを導入してアクセスします。
クエリの書き方ですが、カーソルの execute() メソッドを使います。
クエリをそのままかくのもいいんですが、パラメタ化してエスケープするやり方です。
cur.execute("select * from genera where latin like %s", (genus,))
このカッコ、コンマは省略できません。
ここまでは既出だと思うんですが、ここで % を使いたい場合。
つまんない話なんですが、ネットでなかったんですよね。直接の記述が。これパラメタそのものをいじればいいんです。
genus = genus +"%"
これで%が使えます (いや、それだけです)。
火曜日, 8月 22, 2017
Laravel 5.4 のすすめ (データベース篇)
Laravel でデータベースのテーブルを作る作業は ORM まできちんと定式化されています。
まずはテンプレートを使って migration のファイルを自動生成し、テーブルを記述。ファイルはここ database/migrations/* 。
テーブルの記述はこのような形式です。
コマンドを使用してテーブルを作成します。データベース設定ファイルは .env です。
あとはモデルを自動生成。これでマッピングが完了。
$table 変数でテーブル名を指定できます。
専用のページを作りたければ、コントローラーを作ってビューを生成します。個々のレコードのページを作っておくと、編集ができますね。その際は routes/web.php の編集が必要です。
ロールバックでテーブルを消去したり、シードを使ってデータを放り込むこともできます。
まずはテンプレートを使って migration のファイルを自動生成し、テーブルを記述。ファイルはここ database/migrations/* 。
php artisan make:migration create_テーブル名 --create=テーブル名
テーブルの記述はこのような形式です。
$table->string('en'); $table->string('ja'); $table->integer('order_id');
コマンドを使用してテーブルを作成します。データベース設定ファイルは .env です。
php artisan migrate
あとはモデルを自動生成。これでマッピングが完了。
php artisan make:model テーブル名
$table 変数でテーブル名を指定できます。
class Office extends Model { protected $table = 'office'; }
専用のページを作りたければ、コントローラーを作ってビューを生成します。個々のレコードのページを作っておくと、編集ができますね。その際は routes/web.php の編集が必要です。
php artisan make:controller コントローラー名 --resource
ロールバックでテーブルを消去したり、シードを使ってデータを放り込むこともできます。
日曜日, 8月 20, 2017
(仕様が変更された)Laravel 5.4 を使う
故あって Laravel で PHP サイトを作ることとなりました。ので概要をメモっておきたいと思います。
これ MVC とか ORM とか DI とか軽く使えるよくできてるシステムなんですが、いまだマイナー系なのかなんなのか仕様がバージョンごとコロコロ変わる。
ついこのあいだ ver. 5.1 で書いて ver. 5.4 で動かそうと思うと… 動きます。ライブラリをそのままコピーしてあるからなんですが、これが新たなプロジェクトをたちあげようとするとライブラリの仕様が変更されている。
新しいライブラリはメソッドなど整理されていて使いやすくなっていますが、仕様が異なるので同じ調子で書いていくとエラーが続出します。
まずは新しいプロジェクトの作り方から。
これでライブラリなどすべてコピーされて完全なシステムが出来上がります。それはいいんですが、ここでまずルーティングのファイルの置き場所が違う。ファイル名まで違う。ver. 5.3 で変更されたようです。
ROUTING:
routes/web.php
ここですね。あとビューとかコントローラーとかは同じです。
VIEW:
resources/views/*.blade.php
CONTROLLER:
app/Http/Controllers/*.php
ルーティングの書き方はこんな感じです。
これですべてページからのリクエストが仕分けされてコントローラーで処理できます。これはいいですね。
これどういうことかってページから投げられるリクエストでそれぞれアクションを呼べるわけなんです。DELETE って投げれば destroy ってメソッドを定義するだけできちんと動くサイトが出来てしまうわけです。
こうやってビューでフォームを指定します。DELETE を投げてるわけですね。
で、コントローラーを定義します。
これだけでリクエストが仕分けされて処理できるって仕組みです。うまいですね。
Order ってのはデータベースのテーブルがマップされたオブジェクトです。ORM ってのは便利ですね。delete() って呼ぶだけで作業は完了です。
Laravel ってのは頭が整理されるとってもよいフレームワークだと思います。しかしながら仕様変更が激しいので要注意です。
これ MVC とか ORM とか DI とか軽く使えるよくできてるシステムなんですが、いまだマイナー系なのかなんなのか仕様がバージョンごとコロコロ変わる。
ついこのあいだ ver. 5.1 で書いて ver. 5.4 で動かそうと思うと… 動きます。ライブラリをそのままコピーしてあるからなんですが、これが新たなプロジェクトをたちあげようとするとライブラリの仕様が変更されている。
新しいライブラリはメソッドなど整理されていて使いやすくなっていますが、仕様が異なるので同じ調子で書いていくとエラーが続出します。
まずは新しいプロジェクトの作り方から。
laravel new プロジェクト名
これでライブラリなどすべてコピーされて完全なシステムが出来上がります。それはいいんですが、ここでまずルーティングのファイルの置き場所が違う。ファイル名まで違う。ver. 5.3 で変更されたようです。
ROUTING:
routes/web.php
ここですね。あとビューとかコントローラーとかは同じです。
VIEW:
resources/views/*.blade.php
CONTROLLER:
app/Http/Controllers/*.php
ルーティングの書き方はこんな感じです。
Route::resource('/dashboard','OrderController');
これですべてページからのリクエストが仕分けされてコントローラーで処理できます。これはいいですね。
| 動詞 | URI | アクション | ルート名 |
|---|---|---|---|
| GET | /photos |
index | photos.index |
| GET | /photos/create |
create | photos.create |
| POST | /photos |
store | photos.store |
| GET | /photos/{photo} |
show | photos.show |
| GET | /photos/{photo}/edit |
edit | photos.edit |
| PUT/PATCH | /photos/{photo} |
update | photos.update |
| DELETE | /photos/{photo} |
destroy | photos.destroy |
これどういうことかってページから投げられるリクエストでそれぞれアクションを呼べるわけなんです。DELETE って投げれば destroy ってメソッドを定義するだけできちんと動くサイトが出来てしまうわけです。
こうやってビューでフォームを指定します。DELETE を投げてるわけですね。
<form method="post" action="/dashboard/{{$task->id}}"> {{ csrf_field() }} {{ method_field('delete') }} <input type='submit' value='Remove' class='btn btn-danger btn-sm' /> </form>
で、コントローラーを定義します。
public function destroy($id)
{
$order= Order::findOrFail($id);
$order->delete();
return redirect ( '/dashboard' );
}
これだけでリクエストが仕分けされて処理できるって仕組みです。うまいですね。
Order ってのはデータベースのテーブルがマップされたオブジェクトです。ORM ってのは便利ですね。delete() って呼ぶだけで作業は完了です。
Laravel ってのは頭が整理されるとってもよいフレームワークだと思います。しかしながら仕様変更が激しいので要注意です。
土曜日, 5月 06, 2017
GitHub: 排除されないファイルを指定する
GitHub 便利です。置いとくだけで世界中どこでもコンパイルできます。書いてアップデートすればいいわけです。バックアップの手間もない。
で、調子よくコード書いてたわけなんですが、なぜか lib ディレクトリがアップデートされていない。ファイルが出てこないのでコミットできない。
どうも .gitignore で JAR ファイルを排除したのがまずかったらしいんですが、これです。
*.jar
これだと JAR ファイルすべて排除されちゃうんですね。lib ディレクトリ以下のものもです。
ここは排除されないよう例外を設定します。
!lib/*
これです。!をつけておくと排除されないんですね。
で、調子よくコード書いてたわけなんですが、なぜか lib ディレクトリがアップデートされていない。ファイルが出てこないのでコミットできない。
どうも .gitignore で JAR ファイルを排除したのがまずかったらしいんですが、これです。
*.jar
これだと JAR ファイルすべて排除されちゃうんですね。lib ディレクトリ以下のものもです。
ここは排除されないよう例外を設定します。
!lib/*
これです。!をつけておくと排除されないんですね。
水曜日, 4月 26, 2017
Java: アダプターを作る。
車輪を発明なんていいますよね。でも自前で直せるっていうメリットはあります。
あれ?これなんでないんだろうって思ったらネットで探してなければ作る。この精神(勢い)が大事ですね。
よく考えてみると作れる!ってのは存外いけます。作ったら仕組みが理解できます。
Java アダプターの話です。アダプターってのは addActionListener() でリスナーをつけるとき、リスナーを実装したクラスを使うのでなくてその場で内部クラス(アダプター)をつくる方法です。
機能がまとまって書けるのでコードが読みやすくなります。
この便利なアダプターですが、なぜか ActionListener のがない。
で、作りました。アダプターってなんだろうって考えたわけですね。なんかのクラスでリスナーが実装されていればいい。
これで動きます。これだけなんですね。んー なんか探すより作ったほうが早い。
こんなケースもあるわけなんですね。
あれ?これなんでないんだろうって思ったらネットで探してなければ作る。この精神(勢い)が大事ですね。
よく考えてみると作れる!ってのは存外いけます。作ったら仕組みが理解できます。
Java アダプターの話です。アダプターってのは addActionListener() でリスナーをつけるとき、リスナーを実装したクラスを使うのでなくてその場で内部クラス(アダプター)をつくる方法です。
機能がまとまって書けるのでコードが読みやすくなります。
この便利なアダプターですが、なぜか ActionListener のがない。
で、作りました。アダプターってなんだろうって考えたわけですね。なんかのクラスでリスナーが実装されていればいい。
これで動きます。これだけなんですね。んー なんか探すより作ったほうが早い。
こんなケースもあるわけなんですね。
土曜日, 4月 22, 2017
文字列変換:変換文字列をそれぞれ指定する
学校で習うような複雑なアルゴリズムを使う機会ってのは実際ほとんどないですね。
クイックソートを実装するなんてのはまずない。あれを一発で通せなんていう無茶な要求がありましたよね。ハノイの塔とか。
複雑であればライブラリを使う。
それでも多少は面倒なときもあります。
文字列を分割するとか。
これ、特定の文字列を変換するコードです。全ての文字列を単変換ならライブラリがありますが、各変換ごと数値を当てはめるとかカスタマイズするとなるとやっぱり書かざるを得ない。
クイックソートを実装するなんてのはまずない。あれを一発で通せなんていう無茶な要求がありましたよね。ハノイの塔とか。
複雑であればライブラリを使う。
それでも多少は面倒なときもあります。
文字列を分割するとか。
これ、特定の文字列を変換するコードです。全ての文字列を単変換ならライブラリがありますが、各変換ごと数値を当てはめるとかカスタマイズするとなるとやっぱり書かざるを得ない。
金曜日, 4月 21, 2017
Java: タイムアウト実践編
タイム・アウト実践編です。
終わらない(かもしれない)仕事を時間制限をつけて実行します。
ここはスレッドを用いたクラスを用います。
スレッドを synchronized された関数で呼び出します。
一定時間のち interrupt() を呼び出してスレッドを終了します。
FileTask の定義です。
時間がかかるファイルアクセスをスレッドで実行します。コマンドを走らせて終了時フラグをセットします。
これで終わらない仕事は強制終了です。
終わらない(かもしれない)仕事を時間制限をつけて実行します。
ここはスレッドを用いたクラスを用います。
スレッドを synchronized された関数で呼び出します。
一定時間のち interrupt() を呼び出してスレッドを終了します。
FileTask の定義です。
時間がかかるファイルアクセスをスレッドで実行します。コマンドを走らせて終了時フラグをセットします。
これで終わらない仕事は強制終了です。
登録:
投稿 (Atom)
Flask の Blueprint のテンプレート問題
Flask の Blueprint は、ルート、静的ファイル、テンプレートをまとめて管理できます。しかし、テンプレートが指定できません。 ここでは、Blueprint の template_folder の問題点と回避策を説明します。 Blueprint のテンプレート問題...
-
Qt はまってます。Mac でも書いたアプリがコンパイルできて、しっかり動くのを確認しました。このあいだ Chitubox が Qt 使ってるのを知ってうれしかったです。 Mac でもそのまま動くんですが、アプリのアイコンの設定はプラットフォーム依存です。 公式マニュアルでも設定...
-
コンデンサマイク 極性があります コンデンサマイクがようやく届きました。モジュールではないのでそのままでは信号が弱いので使えません。信号を増幅する必要があります。 ちょっとした手間ですが、首尾よく動いてくれました。この回路の応用で、使えるマイクが出来ます。 ...
-
今日ホール素子が届きました。 ホール素子ってのは ホール効果 を利用して磁場を感知するセンサーです。 iPad のケースとか、閉じると電源が切れてくれますよね。ケースのカバーの磁石の磁場をホール素子が感知してるわけです。 さっそくホール素子を使ってみよう!電圧...










