やる気を高めたい2017年05月05日 02:01

やる気を高めたい


(1. やる気を高めよう)
https://docs.python.jp/3/tutorial/appetite.html

パイソンのチュートリアルの初めの章は、ありがたい題名がついている。

別サイトの入門編を終わって、基礎編に進むと、内容はいきなりつまらなくなり、覚えることだけになって、これ以上進む気をなくさせる。

言語の習得というのは、何かモチベーションがなければ辛い作業だ。

「たくさんのテキストファイルで検索-置換操作を行いたい、大量の写真ファイルを込み入ったやりかたでリネームまたは整理したい」

「小さなカスタムデータベースや、何かに特化したGUIアプリケーション、シンプルなゲームを作りたい」

そんな需要はないのだ。

プロの開発者でもないしな。

「Pythonはそんなあなたのための言語です。」

つまり、対象ではないということになる。

ボケ防止に、道楽としてプログラミングが使えるかどうかを実証したいというのは、どうも不純な動機のようだ。

「それらの作業の幾つかは、Unix シェルスクリプトや Windows バッチファイルで書くこともできますが、シェルスクリプトはファイル操作やテキストデータの操作には向いているもののGUIアプリケーションやゲームにはむいていません。」

だからこそ、シェルスクリプトを学ぼうという気になったんだがな。

ファイル操作やテキストデータを簡単に処理して、「ほほう!」とか言いたいだけなのだ。

GUIなんて、ゼニティくらいでたくさん・・・。

「Pythonは簡単に利用でき、Windows、Mac OS X、そして Unix オペレーティングシステムで動作し、あなたの作業を素早く行う助けになるでしょう。」

そうだろうとも。

しかし、ウインドウズとリナックスの環境しかないしな。

それで十分ともいうが、どう使えばご利益があるのかが、いまいち分かり辛い。

「Python ではプログラムをモジュールに分割して他の Python プログラムで再利用できます。Python には膨大な標準モジュールが付属していて、プログラムを作る上での基盤として、あるいは Python プログラミングを学ぶためのサンプルとして利用できます。」

それって、どんな言語でも、それなりに実装しているんじゃないのかあ?。

他言語で書かれた部品を使って、メタ言語として書くことは、ベーシックの昔から行われている(ゲームとかでは、機械語埋め込んでたしな)。

構文の構造が、記述によって表されているので、読みやすい形になるというが、他言語でも、チュートリアルの記述はその点を考慮して書かれているので、学びやすいかどうかは何とも言えない。

「さて、皆さんはもう Python にワクワクして、もうちょっと詳しく調べてみたくなったはずです。」

うーん、そうかあ?。

このチュートリアルも、次ページからは同じような感じだ。

言語学習に向かない性格なのか。

今日は、やる気も起きない。

プログラム言語を効率的に学習するプログラムって、誰か書いてくんないかな・・・。

whiptailで気分転換2017年05月05日 09:06

whiptailで気分転換
whiptailで気分転換


気が乗らない時には、脇道にそれる。

一心不乱にパイソンなんてやってられない。

で、摘み残したドットインストールのシェルスクリプトのビデオを見る。

一応、マネして入力して見たりもするが、やはり、後半になればなるほどワケワカだな。

そういうもんだと、覚えるしかない。

応用が利くんだろうか?。

人様の書いたシェルスクリプトを見ながら、勉強するしかないだろう。

で、GUI環境で対話的な処理が出来るというゼニティ(Zenity)でもやろうかと、ちょろっと探してみたら、whiptailという、CUI環境で出来るやつがあるというじゃないの。

(Bash Shell Scripting/Whiptail)
https://en.wikibooks.org/wiki/Bash_Shell_Scripting/Whiptail

なんか、バイオスとかの設定画面のような感じだが、これが味があっていい(そうかあ?)。

もう、こっちに決めた!。

画像は、BUWで出したものだが、ちょっと形が崩れている。

クリエーターズアップデイトで改善されるかどうかは分からない。

入力した結果によって、処理を振り分けるやり方も分かった。

ほほう・・・。

こういうのが、やる気を出させるんだよな。

銭てぃもいいが、ウィップテイル(トカゲの一種らしい)も、いい感じだ。

if (whiptail --clear --title test --yesno Are_you_ready? 0 0)
then
whiptail --clear --msgbox "Ok, let's go!" 0 0
else
whiptail --clear --msgbox "Oh..., I'm waiting." 0 0
fi

ちょっと改造して、結果に応じてウィップテイルの画面を返すようにした。

縦横のサイズは、0にしておくと、良きに計らってくれるが、ちゃんと指定した方がいいかも知れない。

if文は、真偽判定しているようだが、$?でちゃんと取った方がいいかも・・・。

ともかく、動くことが大事だな。

シェルスクリプトも、こういう例題を使ってくれると嬉しいんだがな。

テキストデータを上手く処理しても、面白くもなんともない。

いろいろ弄りながら、気分転換しよう・・・。

dialogなど2017年05月05日 22:11

dialogなど
dialogなど


whiptailには、カレンダーがない。

やっぱ、あれがないと、気分が出ないな。

(Bash Shell Scripting/Whiptail)
https://en.wikibooks.org/wiki/Bash_Shell_Scripting/Whiptail

「From its README: whiptail is designed to be drop-in compatible with dialog(1), but has less features: some dialog boxes are not implemented, such as tailbox, timebox, calendarbox, etc.」(READMEから:whiptailは、dialog(1)とのドロップイン互換性を持つように設計されていますが、tailbox、timebox、calendarboxなどのいくつかのダイアログボックスは実装されていません。)

つーことは、あれかあ、ダイアログとかいうのを弄れば、憧れの(!)カレンダーが表示できるのかあ?。

というわけで、早速BUWにアプトゲットインストールする。

(Bash display dialog boxes)
https://bash.cyberciti.biz/guide/Bash_display_dialog_boxes

「Box options:
--calendar <text> <height> <width> <day> <month> <year>
--checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--dselect <directory> <height> <width>
--editbox <file> <height> <width>
--fselect <filepath> <height> <width>
--gauge <text> <height> <width> [<percent>]
--infobox <text> <height> <width>
--inputbox <text> <height> <width> [<init>]
--inputmenu <text> <height> <width> <menu height> <tag1> <item1>...
--menu <text> <height> <width> <menu height> <tag1> <item1>...
--msgbox <text> <height> <width>
--passwordbox <text> <height> <width> [<init>]
--pause <text> <height> <width> <seconds>
--progressbox <height> <width>
--radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...
--tailbox <file> <height> <width>
--tailboxbg <file> <height> <width>
--textbox <file> <height> <width>
--timebox <text> <height> <width> <hour> <minute> <second>
--yesno <text> <height> <width>」

あるある・・・。

で、テキトーに表示させてみる。

dialog --calendar hoge 0 0

出た出た!。

こっちのがいいな。

引用したページから、何回か関連のページが見られる。

マニュアルもあった。

(dialog(1) - Linux man page:英語)
https://linux.die.net/man/1/dialog

(DIALOG(1):日本語)
http://www.yosbits.com/opensonar/rest/man/freebsd/man/ja/man1/dialog.1.html

「--calendar text height width day month year
calendar ボックスは、別々に調整可能なウィンドウに月、日と年を表示します。日、月または年の値が指定されていないか、または負であるなら、現在の日付に相当する値が使用されます。利用者は、左、上、右、下の矢印を使用してそれらのいずれかを増加するか、または減少させることができます。 1 月の日の配列の周りを移動するために vi スタイルの h、j、k と l を使用します。ウィンドウの間を移動するためにタブまたはバックタブを使用します。 0 として年が与えられるなら、現在の日付は、最初の値として使用されます。
終了時に、日付は、形式、日/月/年で印刷されます。 --date-format オプションを使用して形式を上書きすることができます。」

これを読んで、出力された年月日を、変数に取り込むことが出来ないかを考えた。

試行錯誤しても、良く分からない。

前に読んだwhiptailの記事になんか書いてあったような気がして、読み直してみた。

(第422回 whiptailでCUIをグラフィカルにする)
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0422?page=2

「シェルスクリプト内部でwhiptailを使う場合,その選択結果をコマンド置換を用いて変数に代入したいことがあるでしょう。」

「単純に標準エラー出力を標準出力にリダイレクトする方法だと,whiptailのUIまで変数に入ってしまいます。」

「そこで以下のコマンド(3>&1 1>&2 2>&3)では,標準出力と標準エラー出力を入れ替えています。」

「$ choise=$(whiptail --title "選ばれたのは" --menu "選ばれたのは?" 0 0 0 \
"綾鷹" "コカ・コーラ" "伊右衛門" "サントリー" "お〜いお茶" "伊藤園" "生茶" "キリンビバレッジ" \
3>&1 1>&2 2>&3) && echo "選ばれたのは「${choise}」でした。"」

ちょっと他の事もやっているので、ごちゃついている。

そういえば、他にもそんなおまじないが書いてあったような気がするな。

(Bash Shell Scripting/Whiptail:Input box)
https://en.wikibooks.org/wiki/Bash_Shell_Scripting/Whiptail#Input_box

「COLOR=$(whiptail --inputbox "What is your favorite Color?" 8 78 Blue --title "Example Dialog" 3>&1 1>&2 2>&3)
# A trick to swap stdout and stderr.
(以下、略)」

「3>&1 1>&2 2>&3」の意味が分からなかったのだが、これでスッキリした(ホントは、まだ、良く分かっていません!)。

#!/bin/bash

HIDUKE=$(dialog --calendar hoge 0 0 3>&1 1>&2 2>&3)

if [ $? -eq 0 ]
then
echo "get " $HIDUKE
else
echo "no get"
fi

まあ、お稽古ということで。

シェルスクリプト内で日付をゲットしたわけだが、dd/mm/yyyyで出てくる。

ここから、日、月、年を取り出すには、どうしたらいいのか。

まあいい。

忘れていることが、多過ぎる。

今日は、BUWから、nkfコマンドを使って、改行コードを変更することにも成功した。

(【 ファイルの文字コードを変換する 】)
http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231148/

BUWには、標準では入っていなかったので、アプトゲットインストールした。

nkf -s -Lw 変換元ファイル名 > 変換先ファイル名

無事に改行コードが入って、また一つ幸せになる。

dialogで取得した日付は、コマンドとして実行し、変数に取り込むと、コマンドライン上でも弄れる。

HIDUKE=$(dialog --calendar hoge 0 0 3>&1 1>&2 2>&3)

echo $HIDUKE

シェルスクリプト内部で弄るか、コマンドラインで弄るか。

まあ、どっちでもいいんですが。

その辺は、次回のお楽しみだな・・・。

(バッククォートの代替機能:追加)
http://shellscript.sunone.me/variable.html#バッククォートの代替機能

ちょっと癖のあるサイトだが(お前に言われたくない!)、非常に実践的で参考になる。