2023年5月5日金曜日
落書きブログが770記事
2023年1月4日水曜日
CGIのプログラミングミスで大量のデータファイルが作られていた
劇場の席の予約を管理するプログラムをCGIで作成していて色々いじっていたのだが、ファイルの構成を変えようと思っていじったのだがうまくいかない。
うまくいかない…というかftpがおかしい。データをしまっておくディレクトリを開こうとするとやたらとデータ転送が起こりそのままフリーズしてしまう。
他のファイルは普通にやり取りできるしディレクトリも開ける。そのディレクトリだけ。
で、とりあえずコマンドラインでやってみようと思った。
cmdで「ftp (ftpサーバーアドレス)」→「ユーザー名」→「パスワード」と入力してftpサーバーにログイン。cdでディレクトリ移動、dirでディレクトリ情報を見ていくと、やはりデータのディレクトリではやたらと時間がかかったが、膨大な数のデータファイルが作られていることがわかった。
これ、CGIの途中にデータファイルをループで一つ一つ開いて調べてデータのリストを作る箇所があるのだが、読み込む順番を逆にしようとしたのが原因のようだ。
つまり12個あるファイルを1から12まで行ったら止める様になっていたところを12から1に逆行させようとして、間違って12から13,14…と上の方に開いて行き、見つからない時はファイルを生成するようになってしまったのだ。…と思う。
めちゃくちゃ初歩的なミスだ。
とりあえずそのままには出来ないので、そこから削除をしてみることにした。
複数のファイルをまとめて削除する場合は「mdel *.dat」などとすれば「.dat」がつくファイルを一気に削除できるが、このコマンドそのまま使うと1つのファイルごとに「このファイル削除していいか?」を聞いてくる。
そこで「prompt」と入れて対話モードを止めた。これで一気に削除が進む…はずだが、終わらない。いつまで立っても終わらない。本当に減っているのだろうか?その内サーバーから接続を切られてしまった。もう一度やってみるがやはりいつまで立っても終わらない。
Ctrl+Cで止めるとコネクション自体が止まるので、一旦止めて、ftpを「bye」で閉じてから改めてftpサーバーに接続してdirでdataディレクトリ内のファイルを見る。
...減ってる気がしない。
そこで、「〇〇*.dat」と頭に2文字程度付けて削除してみることにした。これなら条件にあったファイルだけを削除して一旦止まるので少しずつだが進んでいることが確認できる。
ああ、しかし、先は長そうだ。
で、これはftpでやろうとしているから遅いのかもと思った。
sshでサーバーに直接入ったらどうだろう。
サーバーのssh設定でsshができるように設定し、秘密鍵のファイルを作成してPCに保存。cmdでもやれるらしいが面倒くさいのでteratermをダウンロードし、接続先のサーバーアドレス、ポート(ここのサーバーの場合22ではなく10022だった)を設定して進む→ユーザー名と秘密鍵を作った際に使ったパスフレーズを入れ、秘密鍵のファイルを指定して接続で、ログインできた。
データのディレクトリに言ってワイルドカードでファイルを削除しようとしたら「引用リストが長すぎます」と怒られた。ファイルが多すぎるとこうなるらしい。
そこで「rm -rf データのディレクトリ」(四の五の言わずに中身のファイルごとディレクトリを削除)を実行したらちょっとしてすぐにプロンプトが出てあっけなく終了。
こういう作業はssh経由が良いらしい。まああまり世話になりたくないけど。
これで改めて制作作業開始だけど、今度はこんなことのないように、よくよく確認して進めるようにしたい。
2022年12月27日火曜日
IPv6接続でBuffaloNASやフナイのHDDレコーダーにWEB経由でアクセスできるようになった
うちにはBuffaloのNASがありWEBアクセス設定をして便利に使っていたのだが、2年前、IPv6接続にした途端アクセスできなくなった。
原因はPR-500MIのIPv4でのポート開放設定がIPV6に切り替えた時に無くなったため。
改めて設定しようとしたら管理画面にIPv4用の静的IPマスカレードの項目自体が無い。
調べると「http://PR-500MIのipアドレス:8888/t」にアクセスし、「IPoE IPv4」を開くとその中に項目が移っているのでそこから設定してやればいいらしい。
しかし、その時自分のところのPR-500MI:8888/tにアクセスしても、「IPoE IPv4」はあったが、開いても肝心の「静的IPマスカレード」の設定メニューが無かった。
で他の方法もいろいろ試したが上手くいかなくて、ああ、うちのプロバイダ(DTI)では使えないのかもしれないと諦め、そのままにしていたのだけど、先程久しぶりにアクセスしたら「静的IPマスカレード」などの設定メニューが出現していた。ありがたい。早速試してみた。
件のページを開くと使えるポート番号の一覧があるので、そこから手頃のポート番号を選び、静的IPマスカレードでプロトコル:TCP、公開対象ポート:選んだポート、LAN側宛先IPアドレス:NASの固定IP、LAN側宛先ポート:80で設定。
持っているNASは「LS520Dfaa」という機種。
最初はスタンダードにBaffaloNAS.comネームを設定しUPnP有効で進めてみたがうまくいかない。結局、BaffaloNAS経由だと上手くいかないようなので、とりあえず「IPoE IPv4」のトップページに出ているIPアドレスに直接アクセスする方法を試すことにした。
「LS520Dfaa」にWEBブラウザでログインし、「環境設定」→「WEBアクセス」を開き、「リモート接続のオプション」にチェックし、「BaffaloNAS.comサーバー経由でアクセスする」と「UPnP」を共に無効にし、「外部ポート」に「80」を設定。
これで、外部から「http://IPoE IPv4でわかるうちのIPアドレス:選んだポート」でアクセスしたら、NASを開くことが出来た。
ちなちに、Buffaloで配布してるnasにアクセスするアプリでも、nasの設定で「外部のDNSサーバー」を使う設定にして、「アドレス」は「http://IPoE IPv4でわかるうちのIPアドレス」に、「ポート番号」に「選んだポート」を設定すればアクセスできる。
これで行けるなら、これも諦めていたフナイのHDDレコーダーへのWEB経由アクセスもできるかも知れないと思い、こちらも調べてみた。
フナイの宅外接続は「プロトコル:UDP」「ポート: 32768-61000」を開放してやればできるらしい。「IPoE IPv4」の「静的IPマスカレード」でプロトコル:UDP、公開対象ポート:32768~61000でうちで使える任意のポート、LAN側宛先IPアドレス:レコーダーの固定IP、LAN側宛先ポート:公開対象と同じポートで設定。
これで、外部からフナイコネクト・アプリで宅外接続をしてみたら、問題なく接続できた。
まあこのままだと、接続し直しなどでIPアドレスが変わるたびにIPアドレスを調べ直して設定しなおさなければならないので恒久的ではない。が、まあしばらくはこれでいいか。
DDNSで運用するのが吉なんだろうけど、DDNSも結局IPアドレスが変わった時に自動で更新かける方法がないと面倒くさい。
その辺が今後の課題。
2023年10月17日追記
この時から10ヶ月近く断続的に使ってるけど、同じIPアドレスで使えている。途中で終端装置を再起動した時もあるが変わってない。
同じ回線を複数世帯で使いまわしてる仕組みだからなのかな?
2022年12月15日木曜日
Fire7(第5世代)を文鎮化してしまった件
家に、AmazonのFire7(第5世代)が1台余っていた。
せっかくなのでマンガアプリなどを入れて読書用として活用しようと思ったが、Google PlayはインストールできるもののAndroidのバージョンが低くていつも使っているアプリが全然入れられない。
調べて見るとカスタムROMを入れている事例がちらほら見当たるので、ではそうしようと考え、結局文鎮化してしまった。
原因は、読みの甘さだ。
Fire7のroot化やカスタムROMインストールの事例は、そのほとんどが2015~2017年代のもので、当日FireOS5.0.*~5.3.*位を対象にしたもの。対して、手元のFire7は5.7.0。
PCと違い、タブレットやスマートフォンは、ほとんどの場合メーカーによってシステムがロックされていて、勝手にroot化やカスタムROMのインストールは出来ないようにされている。それを回避する技術の多くは、OSなどのセキュリティホールを利用するものであるため、バージョンが上がってセキュリティホールが埋められてしまうと、root化などの作業は出来なくなってしまうものらしい。
実際、Fireタブレットでも最近のバージョンのOSを積んだものではroot化などが出来なくなってしまっている。当然、私のものも出来ない可能性が高い。
しかし、この手の作業はやってみないとわからない部分がある。ネット上の文献も全ての状況の即した手順や説明が書かれているわけではない。書いてる人たちにとって語るまでも無いことや、語りたくないことは語られることがない。その隙間を類推と想像とで埋めていくことになるのだが、私は元々「やってみたい」に偏りがちだ。
今は昔、私が初めてLinuxに触れた時、インストールに失敗してHDDのMBRをおかしくしてしまい、デュアルブートにしていたWindowsが立ち上がらない状態にしてしまったことがある。当時、PCは家に1台しかなく、妻が友人からWindowsの起動ディスクを借りてきて、それを使ってMBRを修復し事なきを得たことがある。
それによって飛躍的にPCのブートの仕組みへの理解が進んだのだが、周り(PCを共有していた妻)から見たらただの迷惑行為でしかなかった。やらなくていい苦労に突き進んでしまいがちなのは、脳の欠陥だろうと思う。
ともあれ、曖昧な部分が多いから、とりあえず一個一個やってみようと思った。
試してみたのはROOTJunkyというサイトで配布されているツールを使った方法だ。
https://rootjunkysdl.com/?dir=Amazon%20Fire%205th%20gen/SuperTool
ここで配布されているツールは実際は「Kingroot」というツールを使ってroot化するものだった。使う前に、PCにADBツールを入れ、タブレット側でADBデバッグ可能な状態(設定>端末オプション>シリアルのところを連打して開発者オプションを出し、ADBデバックを許可)にし、野良アプリのインストールを許可(セキュリティとプライベート>不明ソースからのアプリを許可)しデータ通信ケーブルでつなぐ。
が、何度試してもroot化出来ない。どうもやはり、今のFireOSのバージョンではセキュリティホールが埋まってしまっていてroot化は出来ないらしい。
その方法をより確実に行う方法としてOSをダウングレードさせる方法が紹介されていた。
5.0.1とか5.1.1、5.1.2とかに落とすことで、セキュリティホールがある状態に戻すわけだが、一方で「ダウングレードで文鎮化」の事例もちらほら見当たる。
とりあえず、ROOTJunkyで配布しているツールが対応している最新の5.3.1にダウングレードさせてみよう。駄目だったら駄目でまた考えよう。
Fire7(第5世代)用のFireOS5.3.1のリカバリーイメージをダウンロードし、Fire7を一旦シャットダウンしたあと、音量下げ+電源ボタンを同時に長押してリカバリーモードで立ち上げ、sideloadを指定し、PCからadb sideloadでダウンロードしたイメージを指定して焼く。時間にして十分くらい。焼き終えて再起動がかかった。
が、何も点かない。
電源を何度も入れてみる。
全く画面に反応がない。
ああ、文鎮化してしまった。
仕方なく、文鎮化した時の直し方を調べてみた。ちなみに文鎮化は英語で「brick」という。文鎮化を解除することは「Unbrick」で調べると良い。
はじめに試したのはFireTv2の文鎮化を治すツールを使う方法。
文鎮化しているFire7をPCのつなぐ。一見何も反応していないデバイスだが、実はPCに「不明のデバイス」として一瞬認識され、解除され、また「不明のデバイス」として認識されを繰り返しているという、そこで、認識された瞬間にpreloaderのドライバーを噛ませてPCから使える状態にする。
この状態でパーティション情報などが生きていれば、downloadモードと言って、ちょうどPCをBIOSで立ち上げたような状態で、OSを書き込むことができるモードになるらしいのだが、文鎮化している場合、パーティション情報が壊れてしまっている場合が多い。
だから、まずはパーティション情報を直してやる必要がある。
で、件のFireTV2用のツール。これを使うとパーティションの情報を調べたり、それを書き込んだりすることができるらしい。
だが、これを使ってもうまくいかなかった。デバイスは見つかるが最初のHandshakeのところで止まる。対象としているのがFireOS5.1.1当たりまでだったからだ。
それ以降のバージョンでも使えるツールを探したら、amonetというツールが見つかった。これを試そう…と思ったのだが、残念ながらPythonとシェルスクリプトで構成されている。
私のPCはWindows10でシェルスクリプトを使える環境を整えていない。Linuxなどのほうがやりやすいらしい。
で、Ubuntuをダウンロードして、必要な設定をして、amonetの中にあるbootrom.shをsudoを付けて実行。今回もデバイスは見つかる。しかし今回もHandshakeで止まる。
どうやら、かなりギタギタにパーティションテーブルを壊してしまっているらしい。ブートローダーが壊れてしまっているのでどうにもならない感じ。
だが、デバイスが認識されているなら、強制的にデータを入れ込むことはできないのだろうか?PCでパーティションイメージを強制的にHDDに書き込むみたいに。
調べてみると、MediaTekのデバイスにデータをダウンロードするツールがあるようだ。
SP-Flash Tool https://spflashtool.com/
最後の期待をかけて調べてみたが、書き込んだりするために必要なパーティションの地図にあたるscatterファイルというのが必要なのだが、Fire7(第5世代)用のそのファイルが見当たらない。他の会社のデバイスだと公式ROMと一緒に配布されているらしいのだが、無い。そのファイルがなければ、ブートローダにせよリカバリーイメージにせよインストールできない。
仕方なく、ネット上で手に入るscatterファイルを使って試してみたが、うんともすんとも言わない。万策尽きた。
今回は、とりあえず諦めることにしようと思う。残念。
2022年6月26日日曜日
発達障害者の出てくる物語
発達障害者が出てくるお話が昨今多いが、それらに出てくる発達障害者の有り様・役柄には以下の4タイプのいずれか、もしくはいくつかの組み合わせが多いように思う。
- 敵 害意がある、もしくは害意はないが実害がある存在。
- 怪物 実害はないが迷惑な存在で、混乱や波乱の元凶となる存在。
- 天才 人並み外れた感性や技能・才覚を持つ存在。
- 愛玩物 才能はないけど素朴だったり素直だったり可愛い存在。
出番があったとしてもメインストーリーではなく賑やかし、フレーバー、モブとしてで、仮にメインになることがある場合は「そういうあまり面白みのない存在が、何らかの出来事をきっかけに、4つのいずれかに変わる。」物語として構成されている様に思う。
- 敵や怪物の発達障害者がちょっと変わることでみんなに受け入れられる。
- 天才や愛玩物の魅力が知れ渡り、そのままでいることをみんなに認められる。
2022年5月11日水曜日
Pythonでグラフなどのあるシートを同じExcelブック上で名前変更してコピーする方法
Pythonからpywin32でExcelマクロを実行してマクロでシートをコピーするというやり方。
- pywin32でexcelファイルを開く。
- tab_nameというシートをtab_nameの後ろにコピーしようとするが、一つのブック内に同じシート名では追加できず、また、この時点では名前の変更ができないので、自動的にbook1というブックが作られそこにコピーされる。
- book1はアクティブなブックなので、「アクティブなブックにあるtab_nameというシート」を指定し、名前をnew_tab_nameに変更する。
- book1のnew_tab_nameというシートを元のブックのtab_nameというシートの後ろに移動する。移動の結果book1はシートが無くなるので消滅する。
- 元々のブックをセーブして閉じる
2022年4月17日日曜日
Gmailで同じドメインのメールをやり取りすると「このメールにご注意下さい」と出る問題
最近、GoogleがGmailのセキュリティ絡みをいじったらしく随所で「このメールにご注意下さい」と表示されるようになったのだが、それが落ち着いて来たのに一向に表示が出続けるアドレスがある。会社のメインのメールアドレスだ。
メインのメールアドレスでそんな表示が出るのはよろしくない。そこでレンタルサーバーの会社に連絡を取り色々手を入れたがなかなか改善せず、どうやらGoogleの仕様の問題っぽいため手の打ちようが無いらしい。
で、改めていろいろなパターンを調べた結果、次のような事がわかってきた。
- 会社のドメインのメールアドレス同士で、両方Gmailでメールの送受信を行うと、GoogleのサーバーのIPアドレスでSoftfailとなり「このメールにご注意下さい」が出る。
- 会社のドメインのメールアドレス同士で、片方はそのレンタルサーバー付属のWEBメール、片方がGmailの場合、WEBメールから送ったものは「このメールにご注意下さい」が出るが、メールヘッダにあるIPアドレス=WEBメールのサーバーのIPアドレスを、メールサーバーのDNSレコードのTXTにSPFテーブルとして+ip4:×××.×××.×××.×××で登録してやると表示が出なくなる。
- 会社のドメインのメールアドレス同士で、片方はWindows付属の「メール」を、片方がGmailの場合、「メール」から送ったものは「このメールにご注意下さい」が出るが、メールヘッダにあるIPアドレス=そのパソコンがインターネットに接続しているプロバイダのサーバーのIPアドレスを、メールサーバーのDNSレコードのTXTにSPFテーブルとして+ip4:×××.×××.×××.×××で登録してやると表示が出なくなる。
- 会社のドメインのメールアドレスから、個人のgmail.comのアドレスに送信した場合は表示されない。
そう、結局、「同じドメインのメールのやりとりをGmailで行うと表示が出る」が、他のメーラーが絡んだ場合は必要な設定をDNSレコードに追記すれば表示が出ないし、他人のメールアドレスに送信した場合は表示されていない…らしい。
ちなみに穿った記事では、GoogleWorkspaceに契約した場合はそうした状態でもこの表示は出ないので、Googleとしては会社内で使うような場合はGoogleWorkspaceを契約してほしいといからわざとこの辺の手を抜いてるのだ…という説もあった。
個人的には、仕事の環境的にどちらかのアドレスをGmail以外に移行するのは難しい。もちろんGoogleWorkspaceに移行するのも無理。
どうしたものかなあ。