スキップしてメイン コンテンツに移動

network_sketcher

 InternetWatchの「イニシャルB」で紹介されていたnetwork_sketcherを試しました。
https://internet.watch.impress.co.jp/docs/column/shimizu/1591288.html

普段Pythonなんて使わないし、メインPCにPython入れたくなかった上に、配布元の紹介動画でexeを実行していたので、exe化することろから始めました(笑

VirtualBoxでWin10を適当にインストール、pythonをインストールして、pipコマンドでなんとかpyinstaller.exeをインストール完了。

python ./network_sketcher.py
で起動することを確認。
(必要モジュールとかは「python3 -m pip install -r requirements.txt」でインストールしろ、って書いてあったので、pip install -r requirements.txt を実行)

配布元の「How to create the exe file for Windows using pyinstaller」のコマンドをpathをちょっといじって実行、38MiBほどのexeができました(でかいなぁ)。

exeを起動すると、
 _tkinter.TclError: couldn't open "ns_logo.png": no such file or directory
っていうエラーが、、、。

Copilotさんに尋ねると、いろいろ回答してくれたけど、コマンドオプションやらspecファイル修正でも解決できなかった。。。


「ns_logo.pngの読み込みに失敗しているだけなのだから、読み込まなければ良い」
と思いつき、ns_logo.pngをBASE64エンコードして、ソースファイル内にべた書きしました。(BASE64エンコード方法と、ソースファイルへの修正はCopilotさんに考えてもらいました)

その後、pyinstaller.exe でexeを作成。
問題なく起動できました。

さて、本題にとりかかろう(笑



$ diff -u ./network_sketcher.py.org ./network_sketcher.py
--- ./network_sketcher.py.org   2025-07-15 08:44:51.000000000 +0900
+++ ./network_sketcher.py 2025-07-21 14:18:40.000000000 +0900
@@ -22,7 +22,9 @@
 import ns_def,network_sketcher_dev,ns_sync_between_layers,ns_attribute_table_sync_master, network_sketcher_cli
 import ns_extensions
 import ns_vpn_diagram_create
-
+import base64
+from io import BytesIO
+from PIL import Image, ImageTk

 class ns_front_run():
     '''
@@ -44,7 +46,11 @@
         self.root = TkinterDnD.Tk()
         self.root.title("Network Sketcher  ver 2.5.2")
         self.root.geometry("510x200+100+100")
-        icon = tk.PhotoImage(file='ns_logo.png')
+        img_base64="""iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAA・・・中略・・・BEAAAAASUVORK5CYII="""
+        img_data = base64.b64decode(img_base64)
+        image = Image.open(BytesIO(img_data))
+        icon = ImageTk.PhotoImage(image)
+        #icon = tk.PhotoImage(file='ns_logo.png')
         self.root.iconphoto(True, icon)

         # Notebook

コメント

このブログの人気の投稿

LS220DのHDD交換

 BuffaloのNASであるLS220Dの赤色LEDが点滅していました。。。 HDD故障だそうです。 元から入っていたのは、東芝の1TB(TOSHIBA DT01ACA1)でした。 手元にWDの2TB(WD20EARS)、4TB(WD40EZRX)、6TB(WD60EZAZ)、SeaGateの4TB(ST4000DM000)、8TB(ST8000AS0002)が あったので、後日容量アップができるのでは、と思い入れてみました。 RAID再構築をクリックしてみたら・・・  WD   2TB:「指定したメソッドに対するパラメータが不正です。」   4TB:「指定したメソッドに対するパラメータが不正です。」   6TB:リビルド成功  SeaGate   4TB:「指定したメソッドに対するパラメータが不正です。」   8TB:「指定したメソッドに対するパラメータが不正です。」 という散々な結果でした。 何がダメなんだろう?と思い返してみると、WDの6TBだけは未使用の ものでした。 ほかのHDDは入れる前にパーティション情報をWindows上で消したけど、 もしかしてMBR領域(というかHDDの先頭セクタ0)になにか情報があると ダメなのかも。 ということで、Linux機にWD 4TB(/dev/sdb)をつないで、  sudo dd if=/dev/zero of=/dev/sdb bs=512 count=1  sudo sgdisk -Z /dev/sdb を実行してからLS220に入れました。 「破損」という表示になってしまいしたが、RAID再構築を押すと 再構築が始まった、、、、ぽい。

Windows Server 2016 にOracle11gをインストール

.Net3.5が要るらしい。 orz 一回目のインストールの際に「.Net3.5が必要」ってダイアログが山ほど出てきた。 .Net3.5が必要な場合のエラーダイアログはどうして「ダウンロードしてインストールせよ」なんだろう? 参考にした  http://otndnld.oracle.co.jp/easy/oracle11gr1/windows/pdf/SelfStudy_01_win.pdf だと、LISTNERの追加設定(?)が必要そうに書いてあるけど、やってみたら「すでに作成済み」ってなる。 それを信じて進めてみたらどうにもうまくいかない。。。 OracleDBをGUIで操作しよう、っていうのが間違いのようか気がする (逆にSQLserverをCLIでやるのは狂気の沙汰だと思う)。 一旦、アンインストールすることにして、スタートメニューにある「Universal Installer」 を実行してアンインストールしようとしたら「batファイルを実行せよ」というダイアログが。 ググりかたが悪かったのか、 「アンインストールはUniversal Installerからしかないぜ。その他の方法はどーなっても知らないぜHAHAHA」(意訳) と書いてるOracleさんしか見つからない。 どっちを信じたらとも思ったが、目の前のほうが正しいだろうという考えに従いそのバッチ を実行しました。(Universal Installerさんは何度やっても消そうともしてくれないし) バッチ実行後、しばらく放置したら終わったらしい。 Oracleさんがインストールされていたっぽいディレクトリもだいたい消えていた。 消えたよね?ってことで一度再起動してから、Oracle11gのインストールを再び実行。 エラーは出ずに無事終了。 (.Net3.5がインストール済みだったからかな??)  sqlplus / as sysdba は問題ない。でも、別PC(Linux機)からの接続はNG。  lsnrctl status コマンドの実行結果から、やはりlocalhost以外からの接続はLISTENしてない模様。 listener.oraをちょっと修正して、LISTNERサービスを再起動。  lsnrctl status を再度実行すると、IPアドレスの分も表示されたので、外部からも接続できるだろう...

VirtualBoxのUSBメモリからの起動

検索すると、USBメモリからの起動はできないような感じだけど、 UEFIブートだとできた。 手順 1.設定→システム→UEFIを有効化 2.設定→USB でUSBメモリを仮想から使えるようにする3.F12を押しつつ仮想を起動  ※ブートメニューが出てくるまで挫けずがんばる4.ブートメニューの「Boot Manager」に入って、USBメモリを選択 UEFIじゃないのは無理なのかも。