広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2017年01月14日

pythonで「Internet Explorer_Server」クラスの子ウインドウ内のボタンを自動クリック

前回少し書いたが
pywinautoでソフトを自動操作して
ボタンを押していく中で、
「Internet Explorer_Server」というクラスの子ウインドウ
の中にログインボタンがあるのだが、
子ウインドウに対してcontrol_identifiers
を使ってもボタンの情報が見当たらない。
どうやらHTMLのページがソフトのウインドウの中に埋め込まれているようだ。
そのHTMLの情報を取得しないと
ログインボタンは押せないと考えた。

で前回の記事では
下記の本を参考にVBAでinternet explorerの操作を勉強した。

>Excel VBAでIEを思いのままに操作できるプログラミング術 Excel



どうやらHTMLデータ全体であるHTMLドキュメントなるものを取得して
その中の色んなプロパティのうちの一つを指定することで
必要なデータを見れるようだ。
「DOM(Document Object Model)」という概念らしい。

他ソフトの中に組み込まれている「Internet Explorer_Server」クラスの子ウインドウから
HTMLドキュメントを取得し、ボタンの情報を取得しクリックするのが目標だ。

HTMLドキュメントを取得するところまでは
前回記事にも記載した下記のサイトが参考になる。

>Python : Automating Internet Explorer_Server
http://stackoverflow.com/questions/35778771/python-automating-internet-explorer-server

HTMLドキュメントにどんなプロパティがあるかは
下記のサイトを見つけて知った。
>IHTMLDocument2 Object
https://msdn.microsoft.com/ja-jp/library/office/aa219325(v=office.11).aspx

activeElement PropertyからvlinkColor Propertyまで
たくさんのプロパティがある。
取得したHTMLドキュメントを変数docに格納したとすると
print(doc.URL)でURLを確認できる。

※ちなみに全部print()で確認したが
 fileCreatedDate Property〜parentWindow Property
 はエラーで表示されなかった。

HTMLのテキストを見たかったが、
見れるプロパティは見つからなかった。おかしいなあ。

次の日、再度各プロパティ名を使ってgoogle検索してみると
下記のサイトを見つけた。

>DOM(Document Object Model)のouterTextとinnerTextの違いについて
http://www.vba-ie.net/element/outer-innertext.html

「AllプロパティはHTMLドキュメント内の全ての要素オブジェクトを返すプロパティ」
と書いてある。
この中に絶対HTMLのテキスト情報が含まれているはずだ、、、
(でもprint(doc.all)だと[object]としか表示されない、、)

と思って読み進めていくと、
「objIE.document.All(添え字).プロパティ/メソッド」とか
「objIE.document.All(添え字).innerHTML」
と書いてある。

どうやらプロパティ名だけで完結するものと、
プロパティ名だけだとまだ複数の情報をもったオブジェクト扱いになっていて、
その後ろにさらにプロパティ名みたいなものを「.」を付けて指定しないと
いけないものがあるようだ。

きっとHTMLドキュメント内に複数のinnerHTMLなるものが
入っていて、1つ目を見るなら
print(doc.all(0).innerHTML)
で見れるはずである、、、、見れた!

ついに、、ついにHTMLのテキストを
pythonで他ソフトの「Internet Explorer_Server」クラスの子ウインドウから
取得したぞーーー

そして中には「ログイン」ボタンについても書いてある。
よし。


※ちなみにこれらのプロパティ操作で思ったことがある。
 ん、、、、
 パスワードのテキストボックス内の
 ●●●●●●
 と非表示になっているパスワードまで取得できてしまうぞ。
 僕はなんて深淵まで来てしまったんだ、、、、
 (webの仕事をしている人からしたら超ド素人が表層の表層をこちょこちょ
  遊んでいるだけなのだろうが、、、、)
 少しびっくり。
 これからはできるだけログイン画面のパスワードを
 「次回から自動」とか「PCに保存」にしないようにしょう。


話をもとにもどして
たしかVBAの本にはDOMでは取得したオブジェクトは
複数のタグで構成されていて、
.タグ(タグ番号)でタグを取得し、
.タグ(タグ番号).プロパティで名前や値を取得する、、、ようなこと
があった気がする。

innerHTMLで「ログイン」ボタンは
INPUTというタグに挟まれていた。
google検索してみると下記のサイトを見つけた。

>ken3memo (三流君) Set objINPUT = objIE.Document.all.tags("INPUT") で
>タグを集めてみたものの...使いにくかった(笑)
http://d.hatena.ne.jp/ken3memo/20101003/1286108874

「Set objINPUT = objIE.Document.all.tags("INPUT")」とか
「objINPUT(0).Value = "0000"」とか書いてある。
ということは
print(doc.all.tags(u"INPUT")(0).Value)
print(doc.all.tags(u"INPUT")(1).Value)
print(doc.all.tags(u"INPUT")(2).Value)
とすればよいのではないか。

ビンゴだ!
doc.all.tags(u"INPUT")(2).Valueで「ログイン」という文字列を
取得した。

ということは最初の参考サイトに戻って
doc.all.tags(u"INPUT")(2).click()
でログインボタンを押せるのでは、、、

押せたーーーー!!(感動)


結論としては、ほんとただボタン1個押すのに
どんだけ労力かけてんだよ、、と思うが、
パズルゲームのようで嫌いじゃない。
パソコンを使ってプログラムを書くという
常に頭に負荷をかけて解けなかったものを解きたい、、
という欲求みたいなものが少しあるのだろう。
数独が趣味の人と似ているのだろう。

そして一度解いたものは関数化して忘れる。
次から何も考えなくても一瞬。
下記は今回のソースコードである。
(パスやソフト名やクラス名、タイトルなどは伏せるため
 適当な文字列にしてあるのであしからず)

海外のpythonユーザー等で「Internet Explorer_Server」クラスに
苦労している人もいるようなので参考になればいいなあ、と思います。




ちなみに次の課題としては
ログイン後のウインドウの中に
「Internet Explorer_Server」クラスの子ウインドウがあって
その中の「リスト」を操作したい。
リストにチェックを入れて、次に進むボタンを押す、
ということをやりたい。
リストのタグを探して何かするのだろう。
また時間のあるときに頭の体操として頑張ろう。



posted by iyoder at 13:45 | Comment(0) | TrackBack(0) | プログラム

2016年12月24日

VBAでInternet Explorer自動操作の勉強


pythonのpywinautoでウインドウのユーザーインターフェースを
自動操作しようと思ってちょこちょこプログラミングの勉強をしていると
control_identifiersを実行して子ウインドウのクラスやらタイトルやらを
見たときに、「Internet Explorer_Server」なるクラスを発見する。

yahoo検索03.JPG

その子ウインドウの中に表やらボタンがあっても
その情報が取得できない。。。

そこでボタンの場合は
下記のような感じで
Typekeysでタブを一定回数送信して
Enterを送信することで
ボタンを押すことができた。

for i in range(0,19):
dialog1.TypeKeys("{TAB 1}")
time.sleep(0.01)
for i in range(0,2):
dialog1.TypeKeys("{ENTER}")

ただ、子ウインドウの中に表があったときは
お手上げである。
タブで行けないところは何もできない。

下記のサイトを参考にすると
その子ウインドウのURLまでは取得できる。
本当にInternet Explorerの子ウインドウ的なものらしい。
ただその先は何もできない。

>Python : Automating Internet Explorer_Server
http://stackoverflow.com/questions/35778771/python-automating-internet-explorer-server

ということで
結果、あきらめた。

ただ、、、
VBAならできるのではないかと
思う。
こんな本もあることだし。

>Excel VBAでIEを思いのままに操作できるプログラミング術 Excel




VBAでできるようになったら
pythonに還元すればよい。
今は久しぶりにVBAをやろう。

で書いてみたのはこんな感じ。
yahooで日本語のキーワード複数で検索を
VBAで行う。



日本語のキーワードは
URLエンコードが必要である。
UTF-8に変換するために、
下記のサイトを参考にした。

>参考サイト:VBでURL エンコード
http://www.geocities.co.jp/SilkRoad/4511/vb/sample/ue_utf8.txt

下記のように
エクセルシートの
A1〜A10にキーワードを
打って検索ボタンを押せばよいよう
マクロ登録しておく。
※最近見ていたドラマ「逃げ恥」が
 最終回で視聴率20%超えを果たした
 ことに敬意を表して、検索キーワードは
 写真のような感じ。

yahoo検索02.JPG

ボタンを押すと
下記のように検索結果が表示される。

yahoo検索01.JPG

ほんとは起動済のinternet explorerに接続したい。
最終的にはInternet Explorer_Serverの自動操作へのヒントにしたいから。

さらに先の先のことを妄想すると
ほんとはgoogleを自動操作したいところである。
chromeを自動操作したいところである。
会社がそうだから。
ただ、まずは多少違っても実践が大事。
追々できるようになろう。

posted by iyoder at 13:20 | Comment(1) | TrackBack(0) | プログラム

2016年12月03日

pywinauto練習〜メモ帳で名前を付けて保存&Gist使ってみた〜

業務効率化したい。
何でも自動化して
(今のところ)自動化できないことに
時間を使いたい。
エクセルだろうがvbaだろうが
なんだって使ってやる。
pythonも戦力とするために
少しでも慣れようと思う。
pywinautoで前はCADソフトを起動して
名前を付けて保存していた。
それを違うソフトでやってみよう。

手始めはメモ帳である。

せっかくなので
ブログ記事内にソースコードを
埋め込むということにも挑戦したいと思う。

他のサイトでもよく見かける。
行番号付きでソースコードを見れる。
Gistというものが便利らしい。

Gistの使用やメモ帳の操作などなど
下記のサイトを参考にしてみた。

>林檎と珈琲 blogにソースコードを載せる(Gist編)
http://akio-t.hatenablog.com/entry/2015/05/05/163032

>さよならストレス Python と pywinauto で Windows の GUI 操作を自動化する
http://d.hatena.ne.jp/wwwcfe/20110317/pywinauto

>pywinauto Documentation Release 0.5.4
https://media.readthedocs.org/pdf/pywinauto-docs/latest/pywinauto-docs.pdf



苦労した点は
「SetTextだと1行しか書けない。(上書きされる)」
ということ。
複数行書く方法が分からなかったので下記の方法をとった。
 @SetTextで1行分書き込み、
  Typekeysで{ENTER}を送ることで
  改行した。
 ATextBlockで今入力されている入力済テキスト({ENTER}含む)
  を上書き前にtext2に格納し、
  pos_end=text2部分でtext2の後ろに追記する形を取った。
時間のあるときに関数化しておきたい。
(12/6修正)
関数化した。


これで一応、GUIを操作して
文章をメモ帳に書き込んで
保存(上書き含め)はできるようになった。

notepadsav01.JPG

現状の問題点としては、、

保存場所を指定したい。(パス)
.pyのある場所ではなく、最初にテキストファイルを保存した場所
に保存される。

これも勉強していけばすぐに解決されるだろう。


(12/6修正)
ファイル名の欄に
ファイルの絶対パスを打ち込むと
フォルダが存在する場合は指定フォルダに
保存できることが分かった。
(自分が気づいていないままこれまで生きてきただけなのだろう。。)

ただし、フォルダが存在しない場合はエラーになるので、
import osで
mkdirを使って
無いフォルダは作ってしまうことにした。
※参考にしたのは下記の2サイト。
>ファイルやディレクトリの有無を調べる
http://www.gesource.jp/programming/python/code/0008.html

>ディレクトリを作成する
http://www.gesource.jp/programming/python/code/0009.html

これでいかなる場合もどこのフォルダでもpywinautoで
GUIを操作してメモを保存できるようになった。
「pywinautoでGUIを操作して」
の部分が重要である。
あくまでGUIのメニューを自由自在に操作するのが
目標なのだから。
(単にテキストファイルを好きなフォルダに吐き出すだけなら
 vbaでもpythonでも簡単である。)

さらに、実用性を考えて、
pythonのスクリプトファイルのある場所に
ファイルを保存も選べるようにした。
スクリプトファイルのあるフォルダの絶対パスの取得は
下記のサイトを参考にした。

>Python で スクリプトのファイルパス を 取得する基本コード (メモ)
http://qiita.com/HirofumiYashima/items/fd8391d5cba1383da52e

pywinautoで「名前を付けて保存」ダイアログで
保存先フォルダを指定する、という内容を
書いたサイトが探しても探しても見つからなくて、、
諦めそうだったが、
結果的には単純な話だった。
スマートではないかもしれないが。

現状の問題点としては、、
続きとしては
メモ帳に書く文章も
配列(リスト)として関数に渡すようにしたい。


(12/7追記)
配列で関数に渡すように変更した。
メモ帳については
やりたいことはすべて完了した。


posted by iyoder at 21:52 | Comment(0) | TrackBack(0) | プログラム

2016年11月17日

ブルーレイドライブ買いました。〜m2tsファイルについて〜


昨日の朝とあるドラマが録画されたディスクを
会社のかわいい後輩から入手した。
明るい笑顔と自分への思いもよらぬ気遣いに、
色々悩みながら歩いていた朝の通勤中の憂鬱さが嘘のように消えた。
「乾いた心に染み渡る」とはこういうことだったのか、と一人感慨にふける。
めざましテレビの占いも当たるものだ、と感心した。(2位)
ポカリスエットのような効果を発揮した後輩、good jobだ。

そして1日の仕事を終え、
帰宅する。
楽しみにディスクをセットすると、
ドライブがウーンとうなって
パカッと口を開けた。

ん、、、読み込めない。

そこで重要な事実に気づく。
「BD-R」

IMG_1516.JPG

まさか、、これは、、

ブルーレイディスク。。。。

なんということでしょう。
これまで初代surface proにはドライブがないので、
CDからソフトをインストールする用に
DVDドライブを買って使っていました。

時代はとっくにブルーレイ。
映画を借りない、
TVも録画しない、
ネットの動画で遅れてドラマを見る、
そんな人生を送ってきた人間。
「録画」なんて言葉は
学生時代に実家でしていた「ビデオ(死語)」以来である。
(カルチャーショックである。)

すまん、後輩よ。
見れん。。。

俺はだめなのか、、、、、、、いや。どらえもーん(と書いてAmazonと読む)

Amazonでブルーレイドライブ
BRXL-PT6U3-BKC
(2016年発売バッファロー)を1クリック購入(9150円)。
翌日便。(Amazonプライム)

ああ、、
最近お金を使いすぎたので節約でもしようかと思ってたら、
節約開始1か月でAmazon復活。



そして今日、
再度楽しみにAmazonの段ボールを開ける。

IMG_1514.JPG

うん。バッファロー感満載だ。

そして開けてみる。

IMG_1519.JPG

う、、薄い。15mm。ぱっとみは10mmに見える。

同梱のCD。
再生ソフトが入っている。
マニュアルの紙には必ず入れてください、と書いてある。

IMG_1520.JPG

ブルーレイドライブを使うために
DVDドライブを使って再生ソフトをインストールするという
何とも不思議な感じ。

IMG_1523.JPG

BDR01.JPG

無事インストール。
だいぶ時間かかったなあ。どんだけ容量食ってんだろ。
まあ、とにかく早く再生したい!
ブルーレイドライブを選択して、
その中にある動画ファイルを選択した。

BDR02.JPG

ん?

目を疑う。

BDR03.JPG

なんということでしょう。(2回目)

拡張子m2ts。
なんかサポートされていないみたいなことが表示された。

あーーー。9150円。どぶに捨てたのか?

マニュアルを見返すと
Windows10で使うにはアップデートを
してください、とあるので
やってみたが効果無し。
※アップグレード(有料)ではなく
アップデート。

Googleで色々調べると
「powerdvd m2ts再生できない」で検索している人が他にもいた。
そんな悩みに答えるすばらしいアンサーも見つけた。

>教えてgoo! m2tsの動画がPCでうまく再生できない。
http://oshiete.goo.ne.jp/qa/9121260.html
>ひょっとして、HDDには、m2tsしか保存していないのですか?
>BD上のファイル全てをフォルダごとHDDにコピーすると、
>PowerDVDで再生可能になります。

それを見て、
わらにもすがる思いでパソコンにデータをコピーし始める。。。

1%、、、いやいや、ファイル1個4.5GBを10話分コピーしたら
初代surface proの残り容量食いつぶさないか?
それにハードディスクに移したら見れるっておかしいだろ。

そこで、頭で考えてみる。ポクポクポク、チーン。

きっとm2tsファイルだけをダブルクリックで実行しようとするのがいけないのだ。
他のファイルと同時に正しく起動されれば見れるという意味ではないか。

そこでマイコンピュータで、ブルーレイドライブを右クリックしてみる。

IMG_1530.JPG

一番上にpowerDVDで開くというものがある。
これならブルーレイディスク全体に対して実行している感じでいけるんじゃないだろうか。

そうすると、
なんかいつもと違うメッセージ。

コンポーネントを更新しますか?
みたいなこと(写真は撮り忘れたが、)

お、、小さな手ごたえ。もしかして。
そのまま更新。

すると、、、

IMG_1529.JPG


やりましたーーーーー。
映ったよ。

そうなんだよ。
見れない訳がないんだよ。
9150円払って、付属のソフトインストールしてんだよ。
見れない訳がないんだよ。(2回目)

後輩よ。先輩は頑張った。
ありがたくこのBD-Rでドラマ10話見させていただく。

powerDVDでブルーレイのm2tsの動画が見れない方。
見れますよー(エール)

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

【在庫目安:あり】【送料無料】BUFFALOBRXL-PT6U3-BKC
価格:9687円(税込、送料無料) (2016/11/18時点)




posted by iyoder at 23:29 | Comment(0) | TrackBack(0) | amazon

2016年11月16日

pywinautoの1ファイルexe化


前回記事で「pyinstaller」,「cx_freeze」,「py2exe」
の3つを1ファイルexe化が可能となった。

>NSISでpy2exeとcx_freezeを1ファイルexe化
http://fanblogs.jp/mountain4101/archive/59/0

さっそく
仕事効率化へのささやかな1歩として
pywinautoの簡単なプログラムを
「pyinstaller」,「cx_freeze」,「py2exe」の3つで
exe化してみよう。

まずはpy2exe。

今回pywinautoで書いたのは
以前の記事で書いたCADを立ち上げて
名前を付けてファイルを保存する、というプログラムに
更にソフトをとじるとこまで自動でするように追加したもの。

最初はうまくexeファイルができなかった。
なのでsetupファイルは下記のように変えた。

pywinauto_exe06.JPG

distファルダに56個もファイルができたが、
どうやらexeファイルもできている。
そのままNSISで1ファイルのexeにした。

ん、、、

115MB。。。

えーーーーー。
なんてこった。
.pyのソースは2kBなのに。
pythonというのはほんとパッケージに
頼っているんだと思った。
これでは他の人に容易に配れる感じではない。

ダブルクリックすると
「名前をつけてファイルを保存する」ダイアログが
表示されない。。
あれ?前は動いたのに。

そこでstartで起動した後に
3秒のsleepを挟んだ。
そしたらきちんとすべて自動で動いた。
(下記の画像)

pywinauto_exe05.JPG

どうやらCADを起動(start)し終わる前に
ソフトに接続(connect)の命令が素通りしていたようだ。
まあ、そこらへんはもっとプログラムに詳しくなってからでいいや。
無事CADのファイルがフォルダにできていた。

ただし、CADのソフトが閉じるときに
変なウインドウが表示された。

pywinauto_exe02.JPG

logについて言っているが
logファイルがない。

そこで1ファイルにする前の状態で
exeを実行してみた。
するとlogファイルが出力された。

pywinauto_exe03.JPG

どうやら32bitの自動化をしているのに
あなたは64bitのpythonを使っている、ということらしい。
いやいや、exeを実行するたびにこんなのが表示されて
手動で閉じるまで表示され続けるという。
pywinautoとpy2exeの相性はよくないのか?

py2exeの実験はここまでだな。

ちなみに
NSISで1ファイル化するときに
;!define compressor
の「;」を外して圧縮すると
1ファイルのexeの容量は30MBまで減る。
ただ、ダブルクリックしてからCADが起動するまで
解凍分、若干タイムラグがある。

(11/17追記)
「py2exe」のsetupファイルを下記のように
色々excludeしたら
5MBにまで減った。

pywinauto_exe10.JPG

PyQtが重かったのかなあ。
メニュークリックの自動化なら
5MBしか必要としないということだ。
速度も速い。
cx_freezeと変わらない。

まあ、相変わらず
py2exeは
warningのウインドウが表示されるから
そいつを自動で閉じるようにしないと
他の人にはexe渡せないけど。
一歩前進。





次はcx_freeze。

1ファイル化しない状態だと
buildフォルダに45個のファイルが出力される。
1ファイル化すると108MBになる。

pywinauto_exe07.JPG

ただダブルクリックすると
コマンドプロンプトがCADの後ろで
こっそり立ち上がって64bit pythonで32bit自動化について
文字がこっそり表示されているが、
CADソフトの起動→名前を付けて保存→ソフトを閉じる
までの一連の流れは最も早くスムーズだ。
コマンドプロンプトも後ろで自動で閉じられていた。
pyinstallerやpy2exeに比べて
exe化しないときの動きに最も近いかもしれない。

NSISで圧縮すればきっと30MBになるのだろうが、
このスムーズさが少しでも損なわれるのはデメリットだと思う。

(11/17追記)

cx_freezeも容量削減について
色々調べてみた。
すると下記のサイトに
includeやexcludeのオプションが書いてあることが分かった。

>音楽プログラミングの超入門(仮)
>Python スクリプトのスタンドアロン化
http://yukara-13.hatenablog.com/entry/2014/10/11/195316

py2exeでexcludeしたのと
同じパッケージをexcludeした。
setupファイルの最後の2行(options)も追記するのを忘れずに。

pywinauto_exe11.JPG

ついでに仕方なくNSISで圧縮もした。

最終的には7MBまで減った。

cx_freezeであればワーニングの表示される
コマンドプロンプトもそこまで目立たず自動で消えるので
これなら実務でも使えそうである。
(いやあ、今回は諦めずに素人なりによくがんばったなあと自分で思う。)



最後にpyinstaller。

pywinauto_exe09.JPG

exeファイルは簡単にできる。
容量は35MB。

ただし、最初はダブルクリックしたときに
途中でエラーで落ちた。

その後、
py2exeと同様、3秒のsleepをかませたら
落ちずに最後まで動いた。
cx_freezeに比べると遅い気がした。

3秒sleepのさじ加減はアナログ感たっぷりだと思ったが、
CADソフトが起動しきるまで
connectを発信し続けるようにfor文なりif文を
使えばそこらへんは自動で100%処理できるのだろう。
なので今は気にしない。


(11/17追記)

pyinstallerも容量削減について
色々調べてみた。
すると下記のサイトに
excludeのオプションが書いてあることが分かった。
(すべて英語、、)

>Using PyInstaller
https://pythonhosted.org/PyInstaller/usage.html

py2exeやcx_freezeでexcludeしたのと
同じパッケージをexcludeした。

今回はsetup.pyファイルではなく、batファイルである。

pywinauto_exe12.JPG

最終的には9MBまで減った。
(NSISの圧縮を介さない分、py2exeとcx_freezeよりは重めかな)
こちらも実務で使えそうだ。




目下、最大の課題は
ファイル容量だと思う。
(11/17追記)
→一応解決。
 5〜9MBまで減った。


VBAだとウインドウハンドルの取得やsendmessageは
結構使えるようになったが、
メニューのクリックは
「階層」をたどるプログラミングがうまくできない。
menuiteminfo構造体とか、、うまく動くときと動かないときがある。
その点pythonのpywinautoはメニュークリックをここまで
簡単に、短いソースで扱えるのは便利だ。
exe化さえしなければかなり優秀といえる。

VBAに戻りたくなるが、、、今はpythonで粘りたいところである。
仕事効率化にはまだ遠いなあ。
(11/17追記)
→結構着々と進んでいる気がしてきた。
(py2exeのワーニングさえ出なければ文句ないのに。)


posted by iyoder at 21:32 | Comment(0) | TrackBack(0) | プログラム

2016年11月13日

NSISでpy2exeとcx_fleezeを1ファイルexe化


前回の記事
>python3でpy2exe
http://fanblogs.jp/mountain4101/archive/58/0

では、pythonで書いたプログラムを
「pyinstaller」、「py2exe」、「cx_fleeze」
の3種類でexe化した。
その際、pyinstallerは1ファイルでexe化されたが、
py2exeは1ファイルや2ファイルで指定しても
必ず3ファイルで出力された。
cx_fleezeは5ファイルで出力される。

他の人も気軽に使えるようにしたいことを考えると、
1ファイルがいい。
「〇〇のフォルダに放り込んでダブルクリックしてくれればいいから」
と指示も簡単だ。

そこで前回記事の最後に書いた、
NSISというソフトでの1ファイルexe化を試みる。

調べるとNSISは
自作プログラムのインストーラを作るソフトのようである。
ただし、指定によっては
一時フォルダに展開して実行まで自動でするようにできるので
実質1ファイルのexeにまとめているようなものとのこと。
(下記のサイトの652に書かれている。)

>くだすれPython(超初心者用) その24
http://peace.2ch.net/test/read.cgi/tech/1407008551/

さらに調べると
NSISにはポータブル版があるとのこと。
自分はwinpythonを使っているので
NSISもポータブル版があるとありがたい。
早速下記のサイトからダウンロードする。

>PortableApps.com NSIS Portable
http://portableapps.com/apps/development/nsis_portable

Unicode版、ANSI版があるが
よくわからずUnicode版をダウンロード。
フォルダの移動がめんどくならないよう
winpythonのフォルダの直下にインストールした。
(C:\WinPython-64bit-3.4.3.6)

さあ1ファイルのexeを作ろう。

環境
・PC:surface pro (初代)
・OS:windows10(64bit)
・winpython3.4 (64bit)
・py2exe 0.9.2.2
(cx_fleeze 4.3.4)
・NSIS Portable Unicode 2.46.5 Rev 3

使い方を調べると
下記のサイトがあった。

参考サイト@
>NSISというのを使って、py2exeで作ったファイルを一つに見まとめてみた
http://blogs.yahoo.co.jp/topitopi38/1038112.html

リンク先の下記のサイトも記載しておく。
参考サイトA(オール英語です。)
>SingleFileExecutable
http://www.py2exe.org/index.cgi/SingleFileExecutable

参考サイトAにはsetup.nsiというプログラムが
2種類記載されている。
そのうち2つ目の方のコードをコピーする。
参考サイト@にも記載されているが、
最初の3行を自分の内容に書き換える。
(ファイル名はpy2exeのsetupファイルと紛らわしいので
setup_nsis.nsiとした。)

nsis01.jpg

1行目
!define py2exeOutputDir 'dist'
はpy2exeがexeを含む3ファイルを吐き出すフォルダ名である。
(このフォルダ内のファイルを1つにまとめることになる。)

2行目
!define exe 'test.exe'
setupファイルの隣にこの名前のexeファイル(1ファイル)が吐き出される。

3行目
!define icon 'C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64\DLLs\py.ico'
iconファイルのパスを示す。
ちなみにnsisで扱うパスは日本語が入っているとエラーになるようなので注意。
ここではpythonのファイルのicon。

参考サイトには書いてないが
4行目
;!define compressor 'lzma' ;one of 'zlib', 'bzip2', 'lzma'
これは「;」マークでコメントアウトする。
圧縮すると容量は半分くらいになるが、
完成したexeファイルを実行したときに
若干起動が遅くなる。
(解凍時間が含まれるためだろう。)


次にNSISの実行ファイル(makensis.exe)へのパスを通す。
環境変数のpathに
C:\WinPython-64bit-3.4.3.6\NSISPortable\App\NSIS
を登録した。

そしてコマンドプロンプトで
cdコマンドでsetupファイルのある場所に移動し、
「makensis.exe setup.nsi」
と打つ。
自分はめんどくさいのでbatファイルに書いてしまう。

nsis02.jpg

とうとう1ファイルのexeが
吐き出された。
さっそくexeファイルをダブルクリックすると、
いつものtextファイルが吐き出され、成功である。

ただ、、、、アイコンが
指定したpythonの.pyのアイコンじゃない。。。
ダサい。

PCとCDの絵がついた旧式のインストーラのアイコンである。

nsis03.jpg

ちなみにそのexeファイルを隣にコピペすると
コピーの方はpythonのアイコンに変わる。

何でだ?
と思って調べてみる。

参考サイトB
>アイコンが変わらない?
http://blog.syo-ko.com/?eid=1451

とそのリンク先のサイト

参考サイトC(参考サイトBのwindows8の場合のリンク)
>PC、ゲーム、ガジェットの紹介、PCトラブルシューティングの記録とか色々。
>Windows 8 で 変更したはずのアイコンが変わらない
http://eisen-japan.blogspot.jp/2013/08/windows-8.html

を見ると、
IconCacheというキャッシュファイルが
残っているせいらしい。

参考サイトCに書いてあるとおり
下記の画像のbatファイルを作成してみる。
(IconCacheファイルの種類は各パソコンの環境によって
異なると思うので、フォルダ内を確認してから作ってください)

nsis04.jpg

そして実行。

これでキャッシュファイルは消えた。
もう一度exeファイルを作り直してみる。

よし、pythonのアイコンになったぞ。
これで完成だ。

nsis05.jpg


では次に
cx_fleezeで同様のことをやってみよう。
下記の画像がsetup.nsiファイル(自分はファイル名をsetup_nsis.nsiとしている。)

nsis06.jpg

1行目
!define cx_fleezeOutputDir 'build\exe.win-amd64-3.4'
今度はpy2exeではないので
「cx_fleezeOutputDir」に変える。
cx_fleezeがexeファイルを含む5つのファイルを出力するフォルダを指定するので
「build\exe.win-amd64-3.4」となる。(自分のcx_fleezeの仕様による。)

42行目
File /r '${cx_fleezeOutputDir}\*.*'
こちらもpy2exeOutputDirからcx_fleezeOutputDirに変える。

そして
batファイルで「makensis.exe setup_nsis.nsi」
を実行。

nsis07.jpg

cx_fleezeでも1ファイルのexeファイル
を出力できた。

「pyinstaller」、「py2exe」、「cx_fleeze」
の3種類ですべて1ファイルのexe化ができるようになった。

個人的には
cx_fleezeはexeファイルをダブルクリックすると
一瞬だけコマンドプロンプトが立ち上がるのが
いやである。
まあ、一瞬だけなので、
他の性能が良ければ使ってもいいが。

1ファイルにした場合の各exeファイルの容量は五十歩百歩である。
・pyinstaller 4.97MB
・py2exe 5.53MB
・cx_fleeze 6.11MB

ほんとは速さを測定してみたいが
自分にはそのスキルはない。
まあ、今のところはそんなに差を感じない。
プログラムが複雑になったときに明確に差が出てくるだろう。

よし、今度こそ
役に立つexeファイルをたくさん作るぞ。



posted by iyoder at 01:22 | Comment(1) | TrackBack(0) | プログラム

2016年11月08日

python3でpy2exe

通勤電車の中でpythonの本を読んでいる。

>ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

IMG_1513.JPG




現在1/3程度読んだ(多層パーセプトロンまで)。
今は損失関数や誤差逆伝播法に入るところだ。
とてもわかりやすい。
素人の自分には。今までいくつか人工知能の本を読んだが、
一番わかりやすい。
素人が基本を学ぶのにとてもいい本だと思う。


そういえばpython、、、あれから使っていないなあ。。
なぜだろう?

、、、そう、
だいぶ前にpython3系でcx_fleezeを使ってexeファイルを作れるようになった。
>pythonでexeファイルを作ろう
http://fanblogs.jp/mountain4101/archive/48/0

>pywinautoとcx_freezeとpywin32の共存
http://fanblogs.jp/mountain4101/archive/49/0

ただ、、、
cx_fleezeってexeファイルとセットで幾つかファイルが隣にできるの。
exe含めて5個くらい。
それらがセットじゃないと動かない。
まあ、、、確かに何か新しいソフトをインストールすると
Cドライブのprogram filesフォルダにソフト名のフォルダができて
中身はexeファイル以外のものも一杯入っている。

そういう物だと割り切ればそうなんだけど、、、
僕がやりたいのは業務圧縮。
1ファイルがいいのだ。

最近安倍内閣で長時間労働の改善がニュースでよく聞く。
電通の事件もあったりするから。
仕事時間を短縮するようなツールが欲しいということ。
人間だと30分とか1時間とか、もっともっとかかることが
プログラミングを使うと1秒で終わってしまうようにしたい。
「人間より速い」ことがプログラミング、PCにとって
大事なこと。
難しいプログラミングをいくらしても、
人間より遅かったら意味がない。

くどくど書いたが日が暮れる、途方にもくれるような
やりたくないことを、1秒で終わらせる魔法のスイッチを作りたいと
思っている。

そして前の記事を書いてから今日までの間に数回、
そんな途方に暮れる、やりたくない作業に直面した。
僕は、こんなんやってられないよ!と(心の中で)発狂すると同時に、
プログラミングを実務に投入した。門をあけたのだ。

だが、、使った言語はVBA。
だってExcelだったから。
他の市販ソフトに入力しているある大量の情報を
他の人が作ったExcelに「手打ち」することを頼まれた。

「わかりました」と言って打ち込み始めたが、、、

入力する箇所はちょっとずつ離れていて、
数であったり寸法であったり符号であったり、と
まあ詳細は伏せるが、複数の種類のデータを部材数分入力するというもの。
部材数はざっと40くらい。
1部材の入力データの種類は5種類くらいで1部材あたり10か所以上は
入力するセルがある。
そして、もし市販ソフトの入力に変更が生じたら、
またその何百か所の手打ちをもう一度やるのか、、、と。

やってられん!!
そして僕はVBAを駆使し、
スイッチ一つですべてのセルに値を打ち込むプログラムを書いた。
案の定、実際2〜3回ほど変更があり、
作ってよかったと思う。

ここでpythonを使わなかったのは悲しいところである。
実務ではExcelをよく使う。
他の人もそのファイルを操作することもあるから
プログラミングを使うのは避けていた。
他の人が触れなくなるから。
ただ、今回は、他の人が作ったエクセルの中身は
一切いじらず、「手打ちでも使える」状態にし、
隣にスイッチを一つ付けただけである。
「手打ち」するところを「PCが打つ」だけの
プログラムを書いた。
これなら文句は言わせない。
指示した人が自分で入力したくなった時は
「どうぞ手打ちしてくれ」という姿勢だ。
(日が暮れると思うけど、と心の中。)

話はそれたが、結局本当に時間がないと
一番得意なVBAに走ってしまう。
別にVBA使えるだけでも十分職場の他の人に比べたら
速度は上がるのだが。
(他の人はVBAも使わないから。)

pythonも1ファイルのexeファイルにできれば
人に配布しやすい。
スイッチと同じ扱いになる。
押すだけ(ダブルクリックするだけ)でいいから。
わかりやすい。
1つのexeファイルにできれば
きっともっとpythonを実務で使うようになるのでは
ないだろうか、と思う。
そして他の人にも配布しやすい。
自分以外の人の業務時間短縮にもつながるのでは。
難しいプログラムの中身は自分が把握するとして、
気軽に使える便利なスイッチ的なexeを作って配布したい。

そこで、、、前置きが長かったが。
まずpyinstallerを使ってみた。(この記事のタイトルはpy2exeだが。。)

pythonをexeファイルにできる3つのツール
「pyinstaller」、「cx_fleeze」、「py2exe」の3つがあり、
この3つのキーワードでgoogleを検索していくつかサイトを見ていたらこのサイトがあった。
>My Future Sight for Past
http://myfuturesightforpast.blogspot.jp/2014/07/windowspython.html

上記サイトの中段の「3 exe化」の段落に
「これを使うことで驚くほど簡単に単独で動作するexeファイルを作れる。
 py2exeやcx_Freezeを試すのがバカらしくなってしまった。」
と書いてあった。
このセリフに妙に魅力を感じた。
で試してみた。

コマンドプロンプトにpip install pyinstallerでインストール

下の画像はwinpythonのspiderの画面である。
初期に作ったテキストファイルを吐き出すプログラム(test.py)。

pyinstaller01.JPG

これをpyinstallerで1ファイルのexeにする。
cx_fleezeと違ってsetupファイルは不要。
コマンドプロンプトでcdコマンドでtest.pyのあるフォルダに移動し、
「pyinstaller test.py --onefile --noconsole」と打ち込めばよい。
とても簡単。

で、僕はコマンドプロンプトを立ち上げるのもめんどくさいので、
下記のようにテキストファイルを作成し、ファイル名「setup.bat」で保存する。

pyinstaller02.JPG

あとはsetup.batをダブルクリックすればよい。
そうすると「__pycache__」、「build」、「dist」の3つのフォルダが隣にできて、
「dist」フォルダの中を除くと、ほんとに1ファイルでexeファイルができてるのだ。
衝撃。

pyinstaller03.JPG

アイコンもpythonな感じのアイコン。
ダブルクリックすると、ほんとにテキストファイルを吐き出してくれる。

pyinstaller04.JPG

ただ、こんなしょぼいプログラムで4.9MBある。
重いね。まあ、、でも相当楽よ。重さの分を差し引いても、楽すぎてすばらしい。
(cx_fleezeの存在がかすんでくるね。)


そして次はpy2exe。
今年の2月の時点で探したときは
python3系では使えないと聞いていたが、
今調べると、どうやらpython3.4以下なら使えるようだ。
(3.5は非対応のようだ)
僕はpython3.4を使っているので問題ない。

コマンドプロンプトにpip install py2exeでインストール。

py2exeでgoogleを検索していると
下記のサイトのタイトルに目が行く。

>[Python] pyInstallerの遅さにがっかりしてpy2exeにしたら爆速で驚いた件
http://april.fool.jp/blogs/2014/10/python-pyinstaller%E3%81%AE%E9%81%85%E3%81%95%E3%81%AB%E3%81%8C%E3%81%A3%E3%81%8B%E3%82%8A%E3%81%97%E3%81%A6py2exe%E3%81%AB%E3%81%97%E3%81%9F%E3%82%89%E7%88%86%E9%80%9F%E3%81%A7%E9%A9%9A%E3%81%84/

参考にさせていただいたが、
一番はタイトルである。
タイトルを見てクリックしたくなった。
まあ、たぶんpy2exeの方がだいぶ速いのだろう。

他に参考にしたサイトは、、
>baruthのメモblog
http://blog.livedoor.jp/baruth_/archives/19416524.html

>python-ism
http://www.python-izm.com/contents/external/exe_conversion.shtml

テキストファイルを吐き出すtest.py
は変わらないが、setupファイルを作成する必要がある。
下記の画像のsetup.pyファイルを用意した。

py2exe01.JPG

そしてコマンドプロンプトでtest.pyのあるフォルダにcdコマンドで移動し
「python setup.py py2exe」と打てばよい。
だがやっぱり僕はコマンドプロンプトを開くのがめんどくさいので
下記の画像のbatファイルを用意してダブルクリックする。

py2exe02.JPG

py2exe03.JPG

「dist」フォルダの中をのぞくと3つのファイルができている。
"bundle_files": 1 にしているが、
どうしても3つのファイルにまとめられてしまう。
(exeファイル以外に2つ吐き出される)
dllファイルとライブラリの圧縮ファイルだ。
どこかのサイトにpython3系だと3しかできない、と
書いてあったが、そういうことなのだろうか?

容量は全部で合計5.44MB。
あれ?なんだかpyinstallerの方が軽い。
でもexeファイルだけなら30kBなので圧倒的にpy2exeの方が軽い。
ダブルクリックしてみる。。。。
あんまり早く感じない。
pyinstallerと同じ約1秒後にtextファイルが吐き出される。

ちなみにcx_fleezeのsetupファイルは下記のような感じ。

cx_fleeze01.JPG

"excludes"部分で不要なライブラリを削っていくと1MB以上は軽くなった。
'readline'部分でwarningが出るが、
'readline'自体使っていないので、同様に"excludes"で
除外してしまうとwarningが出なくなる。

batファイルはこんな感じ。

cx_fleeze02.JPG

吐き出されるファイルはこんな感じ。

cx_fleeze03.JPG

容量は合計で5.87MB。
exe単体だと3.9MB。
まあ、使うライブラリが増えてきたら
もっと容量は増えるのかなあ。

そうするとpyinstallerがファイルの合計だと一番軽い。。。
一番楽だし。。。
まあ、もっと重いモジュールをたくさん使うようになったら
exeのみが圧倒的に軽いpy2exeが効いてくるのかもしれない。

まあ、どうするにしろ、
3つのツールをすべて使えるようになった。

ちなみにNSISというソフト
(自作のアプリケーションのsetupファイルを作るときに使うソフト)を使うと
py2exeもcx_fleezeも1ファイルにできるらしい。
1つ手間が増えてしまうが。
なので次はNSISを勉強してみたいと思う。


posted by iyoder at 22:54 | Comment(0) | TrackBack(0) | プログラム

2016年09月03日

電動砂消しゴムでボールペンの字を消す

とある資格試験を強制的に受けることになった。
(ほんとは受けたくない。。)

9月2日(昨日)が願書締め切り。
願書は8月1日にあらかた書いていたが
証明写真やら郵便局での払い込み証やら
面倒なことがいくつかあったので
そのまま盆休みに入ってほったらかしてた。
そして8月28日(日)になってしまった。

月日が過ぎるのは早い。。
(ポケモンGOのせいで余計早く感じた8月だったな。
 セミを追いかけて夏休みが終わる小学生の気分だ)

このままだと願書出し忘れる。

慌ててスーツに着替え、日曜日の暑い中ネクタイも絞めて
駅前のスピード写真機で撮影。よし。

スタバでカフェモカを飲みながら(糖質いいのか、、?)
必要書類の確認を再度していると
試験元から送られてきた専用の送付用封筒の宛名の一番下に
自分の目が行き、そして反射的に胸ポケットのボールペンで
斜線を引いて「様」と書く。。。

おい

「行」を「様」に直すならともかく
「御中」を「様」にしてしまったー。

バカ

封筒は専用だから1枚しかない。
これで送っても試験元で受け取った人が
気づいたらバカだな、と思うだけなんだけど。
気になってしかたない。。。ストレスだ。
修正液を使ったら、グレーの封筒にホワイトで余計目立つ。
何とかボールペンの字を消せないものか。

どらえもーん(googleの検索を開始する、と読む)

下記のサイトに砂消しというものについて書いてあった。
>究極の「砂消し」を発見?:正橋史人さん
http://next-stage.at.webry.info/201408/article_6.html

ただ、できれば電動消しゴムみたいなのが
あってほしいなあと思う。
手動だと紙をやぶかないよう力加減が難しそうなので。

もっかい、どらえもーん(再度googleの検索を開始する、と読む)

調べるとどうやら電動砂消しゴムはいくつかのメーカーから出ているようだ。

@プラス 電動消しゴム(電池式)
 (amazonを見ると付属の替えゴムは)白ゴム6本、砂ゴム4本 



Aシード 電動字消器 サンドルフィン3 EE-D03 コードレスタイプ
 (amazonを見ると付属の替えゴムは)鉛筆用プラ消しゴム&ボールペン・インク用砂消し



Bラビット 電動消しゴム 電池式 RBE300 イエロー
 (amazonを見ると付属の替えゴムは)鉛筆用×5本
 →ボールペンインク用は別売の替えゴムを買う必要あり



※色は電池式のブルー、イエローと充電式のブラック色バージョンもあるが、
 充電式のブラックは値段が高いのでパス。
 仕事で頻繁に使って電池買いに行くのめんどくさいという人むけか?




これら3種類が主。
でラビットにした。
替えゴムの種類が豊富で楽しそうだから。

・鉛筆用



・インク、ボールペン用



・インク、コピー用スーパー



・PPC第二原図用



・PPC第二原図用スーパー



・製図インク用



形が丸くてデザインがいい感じだから。
黄色が好きだから。。

本体に鉛筆用のゴムしかついてないので
替えゴム(インク・ボールペン用)を注文しようとすると、
本体は翌日届くのに、替えゴムは3〜4日で発送って。

えーーー、間に合わん。明日ほしい。明日ボールペンの字を消したい。

そんなばかな、と思ってとほうに暮れていると
あることに気付く。

amazonでイエローとブルーでなぜか値段が違う。。。。
ブルーの方が少し高い。なんでだ?

よく見ると、ブルーには本体に
替えゴムが複数種類入っていて、
インク・コピー用がついている。
(ボールペン用じゃないけどボールペンも消えるのでは?)

ブルーなら翌日にボールペンの字を消せるのでは!
よく気付いた、俺。

Cラビット 電動消しゴム 電池式 RBE400 ブルー
(amazonを見ると付属の替えゴムは)
 4種(鉛筆用・製図インク用・PPC第二原図用・インク/コピー用×各5本)付き




で、ブルーが届く。

image.jpeg

image.jpeg

いざボールペンの字を消してみよう。

image.jpeg

封筒は厚手なのでたぶん穴が開く可能性は低いだろう。
気分は完全に歯医者さん。
歯をウイーン、ウイーンと少しずつ削っていく感じ。

image.jpeg


image.jpeg


よし、ほぼ目立たなくなった。
少しすす汚れて見えるけど、本来の目的は達したぞ!

こうして無事、資格試験の願書を翌日郵便局から郵送で送ることに成功。
あとは問題集買って勉強するだけだな。



posted by iyoder at 11:11 | Comment(0) | TrackBack(0) | amazon

2016年08月21日

WinpythonでAutocad

前に下記のサイト
>エクセルでAutoCADを自動作図させる方法
http://excelvba.info/index.html
を参考にVBAでAutocadを自動作図するよう
プログラミングした。
(下記の日記にも少し書いた)
>脱線につぐ脱線
http://fanblogs.jp/mountain4101/archive/37/0?1471709775

ただ、VBAをやめてPythonというかWinpythonに切り替えるつもりなので
WinpythonでAutocadの自動作図ができるよう
コードを書き換えようと思う。

で、本日試行錯誤の素人コーディングの成果はこんな感じ。
(起動しているAutocadに線を1本書くプログラム)

Autocad1.JPG


何をしているかというと、
acadcommand()関数とline1関数で
作図する命令一式を記載したacadcode.scrというテキストファイルを作成し、
送信することで作図している。

acadcode.scrファイルの中身は単純で
下記のような感じ。

Autocad3.JPG

で、test.pyファイルをダブルクリックすると
Autocad上に以下の写真のように線が引かれる。
ちゃんとレイヤも指定して。

Autocad2.JPG

たかが1本の線。
だけど、これで円、長方形、文字もレイヤを指定して書ける。
組み合わせれば複雑な図形も一瞬で好きな大きさで書けるようになる。

応用としては
計算プログラムから座標等を吐き出せば、
全自動で図面が書けるはず。
エクセル等で計算した際に、
openpyxlで寸法を読み込み、
一緒にcad図面を吐き出すなんてこともできるだろう。

便利な作図プログラムを沢山作りたい。



posted by iyoder at 01:13 | Comment(0) | TrackBack(0) | プログラム

2016年08月18日

winpythonにしよう

pythonを使い始めたが、
このまま知識をつけていっても
結局今のsurface proでしか使えないものが
できあがるのではないか?
cx_freezeでexe化するしかないんだけど。

そこで今のpythonをやめて
winpythonに変えようと思う。
レジストリに依存しないポータブルなpythonらしい。
USBに入れて持ち運べるようだ。
科学技術計算に必要なモジュールが
最初から入っているようだ。

調べてみると下記のサイトにインストールの仕方が書いてある。
>ねこゆきのメモ
のインストール。
http://nekoyukimmm.hatenablog.com/entry/2015/03/02/095750

レジストリの設定(ボタン1つクリック)と
環境変数のPathの設定(2つ)をしてるから
違うPCにコピーして使おうとしたら
この2つだけはしないといかんのだろうな。


※(8/21追記)
 上記サイトのまま環境変数のPath設定したら
 python.exeにPathが通ってなかったので
 「C:\WinPython-64bit-3.4.3.6\python-3.4.3.amd64」
 もPathに加えた。→ダブルクリックで.pyファイルが実行できるようになった。


ということで
標準のpythonをアンインストール。

そしてwinpythonにはSpyderと呼ばれる開発環境があるようなので
テキストエディタとして使っていた
SublimeTextもアンインストール。

で先ほどのサイトに従い
winpythonの3.4.3.6をインストール。
Register Distributionをクリック。
環境変数のPathも設定。

winpythonはpipも使えるらしい。
インストールしたフォルダ内に入っている
WinPython Command Prompt.exeから
winpython用のコマンドプロンプトを起動。

pip install openpyxl

あれ、、エラー。なんでだろ。


。。。そして2日が経過。

もう一度pip install openpyxlしてみると
なぜかメッセージが変わってる。
pipが最新じゃない、とさ。
環境変数変更後にパソコンを再起動したからかな。
まあいいや。
pipを最新にし、openpyxlも無事インストール完了。


そして試しにtest1というファイルから数値を読み取り
値を変えて別のエクセルファイルtest2を吐き出してみる。


test1はこんな感じ。

excel操作.JPG


こんな感じのコードを
書いてみる。

excel操作3.JPG


そして実行。
吐き出されるtext2.xlsxはこんな感じ。

excel操作2.JPG


よし。
うまくいった。
はじめは簡単なことしかできない。
が、一度プログラミングしたことは2度と自分でしなくていい。
仕事効率化には程遠い。
が、一歩一歩できること増やそう。

そうだな、、次はpythonでautocad操作してみたいな。


posted by iyoder at 17:27 | Comment(0) | TrackBack(0) | プログラム
最新記事
<< 2017年01月 >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
カテゴリーアーカイブ
ファン
プロフィール
最新コメント
×

この広告は30日以上新しい記事の更新がないブログに表示されております。