趣味のプログラム工房

プログラム

eRemoteをpython3から操作してみよう!

eRemoteという赤外線リモコンのガジェットがあるのですが、
pythonのツールを使うとLinuxから操作できるようになるのですが、
いま(2022年!)、これを使おうとしてハマった話。

eRemoteを操作するためには、主に、
「BlackBeanControl」、「python-broadlink」というのを使います。
(これのセットアップ方法はほかのサイトで見て!)

ただ、Linux Mint 20を使っているのですが、最近のOSってデフォルトのpythonってバージョン3なのですが、上記ツールはver2のpythonを対象にしているようで、ver3では動きません。
ただ、普通にツール動かそうとすると、ver3で動いちゃってめんどくさい。
(それに、python2でインストールとかもしなくてはいけなくてめんどい)

■対応方法、
まず、リモコンの登録をしようと下のコマンドを実行するとエラーが出ます
python3 BlackBeanControl.py -c xxx


File "BlackBeanControl.py", line 197
if (len(SentCommand) <> 8) or (not all(c in string.hexdigits for c in SentCommand)):
SyntaxError: invalid syntax

単純にノットイコールとして「<>」が使えないみたい。
「!=」に置き換えます。


Traceback (most recent call last):
File "BlackBeanControl.py", line 167, in
RM3Device = broadlink.rm((RealIPAddress, RealPort), RealMACAddress)
TypeError: __init__() missing 1 required positional argument: 'devtype'

関数の仕様変更により、引数が足りていないようです。
RM3Device = broadlink.rm((RealIPAddress, RealPort), RealMACAddress)
⇒RM3Device = broadlink.rm((RealIPAddress, RealPort), RealMACAddress , RealTimeout)

③登録時
File "BlackBeanControl.py", line 242, in
EncodedCommand = LearnedCommand.encode('hex')
AttributeError: 'bytes' object has no attribute 'encode'


実行時
File "BlackBeanControl.py", line 231, in
DecodedCommand = CommandFromSettings.decode('hex')
AttributeError: 'str' object has no attribute 'decode'


ver3ではencode関数とdecode関数が使えません。
なので、それぞれ、
DecodedCommand = CommandFromSettings.decode('hex')
→ DecodedCommand = bytes.fromhex(CommandFromSettings)

EncodedCommand = LearnedCommand.encode('hex')
→EncodedCommand = str(binascii.hexlify(LearnedCommand), 'utf-8')

に置き換えます。

多分これだけのはず。

2022年05月07日


Visual Studioで帳票作成【Crystal Reports】

Visual Studioで利用できる帳票のアドオンがないかと、、、
やっぱ、Crystal Reportsですかね。

あのSAPのソフトでありながら、無料で使えるところがいいですね。
この、Crystal Reports
以前は、Visual Studioにバンドルもされていたんですけど、
最近は、バンドルされなくなってますね。
まあ、無料で使えるのでほぼ変わりはないのですが。。。。


ただ、難点として、
Express Editionでは使えないという問題があります。

これは痛い。
最新の、コミュニティエディションだと、商用では使えないんですよね。

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

【中古】Visual Studio 2008 Standard Edition
価格:47686円(税込、送料別) (2021/4/14時点)



2021年04月13日


Microsoft Javaがサポート開始!!

おーーー!!
これは、IT業界にとって朗報です。

OracleがJava8以降、サポートが有料となり非常に使いにくくなりました。

Microsoftといえば、、実は昔はJavaを提供しており、Windowsにも標準搭載されていたんですよね。
ただし、(当時)SunのJavaを使った方がトラブルが少ないため、MS版は無効にして使っていた記憶があります。



2021年04月11日


Oracle 19cのインストール ソフトウェアの場所(software location)

初めてのOracle 19cのインストール

オンプレ版のソフトをダウンロードして、「適当なフォルダ」に解凍してインストールを進めたところ、、、
ソフトウェアの場所software location)に違和感が、、、
インストーラーを解凍したフォルダがソフトウェアの場所として表示されているわけですが、まさかと思いつつもそのままインストールを完了させたところ、
そのまさかが、、、

どうも、18c以降、インストーラーの場所がそのまま、Oracle_home、
ソフトのインストール先になるようです。。。
マジか。

Oracle 12cまでしか使ってなかった私としてはカルチャーショック



2020年01月25日


ColdFusion cfgridによる更新でエラー

Coldfusion 2018にてcfgridのhtmlもしくは、xmlを使ったときの更新がエラーになる現象を確認。

完全にバグだと思われます。

coldfusion2016でも同じようなバグあり、パッチで解消した、、、という情報もありましたが少なくても2018では更新できません。(最新のパッチを当てても)


原因はハッキリしており、
何故か、POSTに同じパラメータが2つ入るためです。

cfgridのnameをhogehogeとした場合、
更新ボタンを押したとき、次画面に送られる変数は、
hogehoge=null
hogehoge=cfgridの中身
の2つが送られます。

でエラー。


対処方法は一つ。
onsubmitのjavascriptで1つ目の空の変数(hogehoge)を削除して、
同名の変数を1つだけ(hogehoge=cfgridの中身)を次画面へ送るようにします。


2020年01月11日


ODBC経由 Excelの編集でエラー

ODBCでちょっと特殊なExcelの編集をしようとしたところ、以下のエラーが発生
「このフィールドはリンクされたExcelワークシートにあるため、編集できません。リンクされたExcelワークシートのデータを編集する機能は、Access の今回のリリースでは無効になっています。」

まず、最新のWindowsOSにはExcelODBCドライバが付属していないんですよね。。。
そのため、個別にインストールする必要があるのですが、そのドライバでは上記機能が使えないようになっています。

どうも、やろうとしていた機能が使えたのは、
windows server 2008の世代に付属していたドライバ(32bit版で確認)のようです。
それより新しいものだと、たぶん利用不可。

上記エラーに遭遇したら諦めてください、、、が回答になります。


補足
上記エラーは、ODBCで定義されたExcelブックAを経由してExcelブックBを編集する場合に発生します。
ちょっと何言ってるかわからないかもですが、そういうことができたのです。

2019年11月13日


Windowsでフォルダの監視・同期 inotifyのような、、、

Linuxではinotifyという仕組みで通知を受け取り、
ファイルの更新をチェックすることで、フォルダ・ファイルの監視ができるのですが、Windowsでは無いようなんですよね。

なので、リアルタイムファイル同期ファイル同期をするためにはと調べたのですが、ちょうどいい感じのソフトは転がっておらず、、、

一応、.NETにて「System.IO.FileSystemWatcherクラス」を使えばいいらしいことがわかりました。
実装自体はわりと簡単みたいなので、作ってみました。

FileSystemWatcher


引数に、監視フォルダと、コピー先を渡してあげると、
監視フォルダに新しいフォルダやファイルが作られるとコピー先にコピーされるという動きをします。
2つのフォルダで同期をとるときに使います。

2019/08/17 一部の起動方法にてCPU使用率が1コア占有となる不具合を対策(4コアの場合はCPU使用率25%となる不具合)

また、Windowsサービス版を作成
FileSystemWatcher サービス化版

2019年08月07日


Oracle 異なるインスタンスのテーブルのデータを比較

同じデータベース インスタンス内であれば、MINUS演算子を使うだけで、簡単に差異のあるレコードを抽出可能です。
しかし、異なるインスタンス、異なるデータベースのテーブルを比較しようとするとちょっと悩みます。

手っ取り早くであれば、、、データを抽出してExcelに張り付けて比較するという力業(スマートではない)もありますが、データが多いと時間がかかるし、めんどくさいです。


というわけで、私のおすすめとしては、Database Link機能の利用です。
データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。
このオブジェクトを経由することで、MINUS演算子を使って比較ができるようになります。

systemなどアクセス権限の高いユーザ(スキーマ)に対してリンク張れば、xxx.table@dblink_systemなどと全部のテーブルにアクセスできるので結構楽です。


2560 * 1600液晶、10コアのハイスペックタブレット!
値段はチョットしますが、このスペックはあまりない珍しいタブレットですね。
2019年02月06日


Oracle 監査ログ Aud$のSQLTEXT切れてる問題

Oracleの監査ログですがAUD$を直接ではなく、DBA_AUDIT_TRAILのViewを使って監査ログを参照すると、SQLTEXTが切れて、すべて見えない問題が発生します。

というのも、AUD$のSQLTEXTはCLOBですが、DBA_AUDIT_TRAILはVARCHAR2 2000桁で表示されるため、2000文字以上は切れてしまう。
なので、2000文字以上のSQLTEXTを見る場合は、AUD$を直接見る必要がありますが、その場合も、CLOBではなく、VARCHAR2に変換してみるため、SELECT時に工夫が必要。

https://stackoverrun.com/ja/q/1875751

を参考に、2000文字ずつとか、4000文字ずつ表示する必要があります。

SELECT SUBSTR (t1.clob_col, 1, 4000) AS pt1,
CASE WHEN LENGTH (t1.clob_col) > 4000 THEN SUBSTR (t1.clob_col, 4001, 4000) END AS pt2,
CASE WHEN LENGTH (t1.clob_col) > 8000 THEN SUBSTR (t1.clob_col, 8001, 4000) END AS pt3,
CASE WHEN LENGTH (t1.clob_col) > 12000 THEN SUBSTR (t1.clob_col, 1201, 4000) END AS pt4
FROM t1


まあ、分岐する必要があるかは微妙。
別に、0文字~4000文字、4001文字~8000文字、、、を表示するsubstrをそのまま連結でもよさそう。


スマートテレビの新基準
4Kテレビ
2019年02月03日


HP-UXのセグメンテーション違反耐性が高すぎる

hp-uxのセグメンテーション違反耐性が高すぎる問題が発生しています。

セグメンテーション違反耐性が高いのの何が問題なのかという話ですが、、、
hp-uxからLinux(RHEL)に移植したプログラムがバンバン落ちるのです。
セグメンテーション違反で。

悪いのは、100%元のプログラムを作ったやつですが、
何年も動いていたプログラムが想定外のところで落ちるのはイライラするわけです。


確保した領域外にアクセスしても、落ちないんですよねHP-UXって。
OS的に何か制御が入っているのか、、、逆に制御入っていないから何も言わないのか、、、(制御入ってないとしたら相当な時限爆弾)


移植性が高いCプログラムですが、、、純粋な環境依存よりも、
既存バグが怖いと思った今日この頃です。


ルータ用サーバに最適
2019年01月18日


次へ