bringartmのブログ

忘れそうなことを記録にのこそうと。

サーバー保存ファイルの一覧を、Web画面に表示する Pythonプログラム

index.py に配置して、該当フォルダーのファイル一覧を作成する。

資料を共用ファイルとしてサーバーに置いているが、保存されているファイルが一覧で見ることができない。
検索することも難しく、動的にフォルダー内部のファイルを一覧表にしたかった。

レンタルサーバーの任意のフォルダーに index.py という名前を付けて保存。 フォルダーにURLでアクセスすると、ファイル一覧を表示することができた。

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
 
# HTTPヘッダ
print "Content-type: text/html\n"
 
# HTML
print "<html>"
# HTMLヘッダ
print "<head>"
print '<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>'
print "<title>index.py</title>"
print "</head>"
# HTMLボディ
print "<body>"
print "<h1>List of file on this directory</h1>"

import os
import glob
import sys # モジュール属性 argv を取得するため

argvs = sys.argv  # コマンドライン引数を格納したリストの取得
argc = len(argvs) # 引数の個数
# デバッグプリント
#print argvs
#print argc

if argc!=2 :
    print "フォルダー内 ファイル一覧"

    # パス内の全ての"指定パス+ファイル名"と"指定パス+ディレクトリ名"を要素とするリストを返す
    files = glob.glob("*.*") # ワイルドカードが使用可能
    for file in files:
        print '<li><a href=',file,' target="_blank">',file,'</a></li>'

    print "<br>"
    print "Sub Directory <br>"

    CurrentDir = os.getcwd()
    for dir in os.listdir(CurrentDir):
        #print "%" + dir + "%"
        if os.path.isdir(CurrentDir + "/" + dir): 
            print '<li><a href=./index.py?'+dir+'>'+dir+'</a></li>'
    print "<br>"
    print "<a href=./index.py?listing>list</a><br>"

else:
    if argvs[1] != "listing" : 
        # パス内のフォルダーを抽出
        CurrentDir = "./" + argvs[1]
        print  CurrentDir
        files = glob.glob(CurrentDir+ "/*.*") # ワイルドカードが使用可能
        for file in files:
            print '<li><a href='+file+' target="_blank">'+file+'</a></li>'
        print "<br>"

    else: #全ファイル表示 'listing':一括してフォルダーとファイルを表示
        CurrentDir = os.getcwd()
        # パス内のフォルダーを抽出
        for dir in os.listdir(CurrentDir):
            if os.path.isdir(CurrentDir + "/" + dir): 
                print "SubDirectory  /" + dir
                files = glob.glob("./" + dir + "/" + "*.*") # ワイルドカードが使用可能
                for file in files:
                    print '<li><a href='+file+' target="_blank">'+file,'</a></li>'
                print "<br>"

print "</body>"
print "</html>"

お名前ドットコムのレンタルサーバーサービスでは Pythonのプログラムを実行できるということで、フォルダーのトップにindex.pyを置いてみたところ、一覧がきちんと表示されました。
chgmod 755 index.py を忘れないように。 

追記
20170930 一覧表示をハイパーリンクにしました。

夏休み、鉄道模型を持ち寄って運転会開催

夏休みにて、ご近所の方々と、それぞれの鉄道模型ジオラマを持ち寄って運転会のようなものをしようと企画をいただきました。 無事に開催できました。
f:id:bringartm:20170819215846j:plain
マンションの集会室をお借りして、日ごろ運転もしていないので汚れや錆などをきれいにすること3時間。ようやく 互いのジオラマと接続をして、一通り運転をしたら、もう夕方。久々に遊んだ一日でした。
f:id:bringartm:20170819220316j:plain
いつも、この方向で部屋の中で固定して、運転をするというスタイルだったわけですが、今回は360°好きな方向から見ることができました。
f:id:bringartm:20170819220306j:plain
f:id:bringartm:20170819220312j:plain
隣のジオラマとの接続口からみた全景は、自分でも初めてみるアングルで、感動をしました。お互いのジオラマを行き来する電車(模型)を不思議に眺めていました。

また来年やりましょう。

ブリッジ接続の時のNTPサーバー設定には、GWとDNSの設定も必要でした。

Buffaloの無線LAN親機を、別のルーターの配下に入れて ブリッジ接続をしようとしました。
DHCPを止めて、アクセスポイントとして利用する)
停電の後、どうもログの時間が変なので、調べてみるとNTP参照が失敗していたようです。

通常、NTPを有効にするには、[管理]-[システム設定]を開き、[NTP機能]の[使用する]にチェックを入れ、サーバー名・確認時間を入力しますと AirStationの時刻をNTPサーバの時刻と自動的に同期することができます。
最初は このサーバーアドレスがおかしいのかと思って、「インターネットマルチフィード株式会社」で提供されているNTPサーバのアドレスを順番に設定しました。
ntp1.jst.mfeed.ad.jp
ntp2.jst.mfeed.ad.jp
ntp3.jst.mfeed.ad.jp
しかし、NTPサーバ接続に失敗するので、どういうことかと悩みました。

アクセスポイントにつないだPCやiPhoneは 普通につながるんですけど、AirStationからの外部へのアクセスに失敗します。

調べてみますと、ブリッジ接続にするとNTPサーバからの時刻の取得に失敗する原因は、AirStationのDNS解決ができていないとのこと。
[LAN]-[LAN]-[拡張設定]で デフォルトゲートウェイDNSプライマリーを 設定するOKになりました。
f:id:bringartm:20170816151238p:plain
192.168.11.1 ルーターのアドレス
192.168.11.100 今回無線LANのアクセスポイントにしようとしたAirStationのアドレス

TOMIX ポイントコントロールボックスN-W を分解しました。

鉄道模型 Nゲージを夏休みに触り、うまくポイントが動かないところに四苦八苦していました。
原因究明のためにいろいろ不具合箇所探しをしていて、「ポイントコントロールボックス」http://www.tomytec.co.jp/tomix/products/n/5532.html を分解しましたので、後日の参考のために写真で残します。

電子的な基盤でもはいっているのか・・という想像と期待は もろくも崩れ、なんという機械的な構造をしているのかと 驚きました。
 
f:id:bringartm:20170819211843j:plain
f:id:bringartm:20170819211854j:plain
そのメカニズムというか、仕組みは、切り替えレバーがうごくと、ばねではじかれたスイッチの働きをするベロが基板の回路の上を滑って、移動するときに瞬間的に触れ合って、電気が流れるという動作になっていました。
すごい単純な基板の回路で、こういう形を実現するのは TOMIXの技術者のすごいアイデアだなと思います。
f:id:bringartm:20170819211900j:plain
f:id:bringartm:20170819211850j:plain
パワーユニットから直流12Vを 下の接続口から取り込んで、巧みな基盤を経由して ポイントへつながるコネクターに流れるようになっています。
f:id:bringartm:20170819211905j:plain
どうも、上下で、触れる基板の回路が違うようにできていて、 上方面への切り替えでは 瞬間的に+-にながれて、反対に下方向への切り替えでは-+になることで、ポイントに流れる電流の方向を変えているということのようです。

raspberry pi  anthy 設定 日本語切り替え

日本語の入力まで おかしくなってしまったので、 過去やったことを思い出しながら対応してます。

まず日本語入力の 半角/全角 の切り替えが 効かなくなってしまいました。
anthyを入れていましたので、メニューから Preferences - iBus Preferenceで設定を出し、Keyboard Shortcuts の Next input method: に grave を追加。

f:id:bringartm:20170527122409p:plain

Next input methodの [...]を押して、New accelerator を選択し、 日本語キーボードの 「半角/全角」ボタン(入力切替のボタン)を押します。そうすると Key codeに grave が表示されます。
f:id:bringartm:20170527122550p:plain

f:id:bringartm:20170527122644p:plain
Add ⇒ OKを押すと 登録完了です。

念のため、キーボードレイアウトも 正しく設定できているか確認をしてみました。
f:id:bringartm:20170527133625p:plain

f:id:bringartm:20170527133801p:plain
Keyboard : [Set Keyboard...] を見て、 Country : Japan と Variant: Japaneseだったので OKでしたが
何か変なので、もうちょっと確認します。

ja_JP.UTF-8 UTF-8

raspberry pi アップデートしたら gui 起動せず

久しぶりに、ラズベリーパイのアップデートとアップグレードをしたら、画面が真っ黒(左上にカーソルが点滅)になり、壊れたかと思いました。しかし、共有フォルダーとして使っている、raspberry piUSBメモリはネットワークからみえるので どうもGUIが起動できない様子。

コマンドラインに戻る方法をしらべ、 {Ctrl]+[Alt]+[F1]にて 表示できることがわかったのでさっそく実行。起動ログがそのまま残っていて見れたので 何かしらエラーがあるか探しました。 ちなみに [Alt]-[F7] とすることで GUI 環境に戻れます。


f:id:bringartm:20170527101918j:plain

特に何もなし・・・。

とりあえず raspi-config にて パスワードを変更し sudo reboot

そうすると ふつうに GUI (startXの画面)がでました。

理由はわかりませんが、とりあえず。完了。


11:10追記

と おもったら、なぜか リモートデスクトップでPCから接続できなくなってしまいました。
こちらのサイトで 症状がぴったりだったので 
解決策:tightvncserver をインストールしましょう
再度インストールしましたところうまく、動きました。

qiita.com

情報 感謝です。

久しぶりに鉄道模型を出して、楽しみました。


久しぶりに鉄道模型を出して、楽しみました。

まずは、線路の掃除から・・・。 レールを磨いた後、クリーニング車にて、一通りの走行確認をしました。

ホームを設置すると、ジオラマが一気に盛り上がります。

模型の全景、上からの写真。

車両基地、5つの引き込み線があります。そのポイントコントロールのスイッチです。

最初にジオラマを作ったときは このあたりに線路がありました。もうすこし改造をしたいと思っています。

ジオラマの電源供給やポイントコントロールは、取り外し可能なコネクタでつないでいます。

4つの線路の供給を3つのパワーバックでコントロールしています。そのための、供給スイッチです。