投稿

2018の投稿を表示しています

雑感 〜食わず嫌い編〜

ありがとう 今年も大きな怪我や病気もなく過ごせたことは感謝しかございません。ありがとうございました。 カタチアルモノ 先月・今月と、ナカナカ、これ!っていうのはできなかったのだけど、前回、Desktopが云々なんていうことを書いておりましたが、あの流れで、今は、何故か、ElectronやVue.jsをいじってる状況になっておりまして(笑) ツケヲハラウ まだ、Demoをごにょごにょやってるだけなんだけど、Vue.jsは、面白いかな、って。加えて、Electronもいいかな、っていう感じになってるんですよね。いろんなFrameworkがあるんだけど、今の立ってる位置は、ここかな、という感じです。 なんとなくだけど 来年は、Javascript絡みをいじってそうな気がします。そうします(笑) それでは よい年越しをお過ごしください。それでは!

雑感 〜師走と味噌編〜

気づけば 気づくと十二月で。前回の投稿からだと、自動車メーカーが大変なことになってたり。AWSが、どう考えても、Geek向けでしょ的な発表というかサービスを怒涛の如くしてたり、と、いろいろあるものです。 ドロってる ここ数週間は、ずぅっと脳内で変換しつづけてたUI(一部分だけど)のイメージが固まってきたので、数パターンを作りつつ、ああでもない!こうでもない、と、ごちゃごちゃやってます。Androidで、Javaってます。 Kotlinっていう話もあるんだけど、ナカナカね、そこまで辿りついてないな、というところでしょうか。 パイってる ここにある 記事 で、「へぇー、今は、そうなんだ」というのを眺めながら、自製Flaskアプリもチョロっと修正をしてたりします。自製のPythonの2割ぐらいは、なにかと手を入れてる感じはするんですけどね。 JavaベースのMicro Webないかな、という流れもあって。というのは、上のAndroidもSQLite3を使ってると、同一DBを使いたいっていうのもある上に、できうることなら、DB周りのCodeも共通化したいな、と思ってたりしてて。 ただ、学習Costっていうのを考えたら、いろいろ考えちゃうのですね。 考えようによっては Androidで、SQLite3とHTML5で構築すれば、Desktopでも併用できるぜ!なんていうのも考えますけれども。 味噌 これまた、汎用的な調味料なわけで、久しぶりに、購入をしまして。マヨ+ワサビの変種として、マヨ+味噌、なんていうのを。そういえば、塩麹も買いましたかね(笑)ブラック・ペッパーも詰替え用買いました(笑)

雑感 〜修正と拡張編〜

ゆるいノルマ 大体、3日間隔で、いろいろ投稿していきたいな、とは考えていたのだけど、ナカナカ難しいのですな、ということを、今更ながらに、実感していたりします。脳内は元気なんだけど、作業まで移っても、既存の至極プライベートなScript修正とかになってて、どやねん!的には、ならないな、という日々でございます。ボチボチやります。 なんちゃってFormat 自家製のAndroidアプリは、DBを使用してて、複数Tableが多少複雑に絡み合っていたりします。更新前提なので、DB登録前のDataは、Tag付きのcsv的なんちゃってFormatだったりします。 一応、削除・追加・更新前提の仕組みはいれているのだけど、ざっくりとDataを入れ替えた方が楽、っていうこともあって、見直しをすることにしたのです。 時々思うのだけど、「われながら、(結構無駄に)作り込んでるなぁ」と。 Accessか、ExcelでMacroか、否、LibreOffice Baseか、CalcでPyUNOか、という流れもあるのだろうけど、なんだかんで、楽なのは、Textだよね、というのがあって、Tag無しのcsv的なんちゃってFormatを新規で起こし、Tag有りとTag無しを相互に処理するように、Encode/Decode用のScriptを作ることにした。無駄の再開発(笑) Tag有りが何で必要なのか、という話をすると、DBの更新処理時、ということになります。特定のDataのみを更新するので、それをを特定化させるためです。 sqlite> update hoge set a = 'moge' where id=5; カラム列が、id、a、b、cとあって、idが5の場合に、aのみ変更っていうのを表現したものになります。(テーブル名はhoge) bとcはそのままなので記述は不要となるわけです。 Network越しに、Data更新をしたら、上手くいきました。一息。 ついでに まじめに、自家製のDataは、いくつか作ってて、運用しているわけですが、次は、Data検索用のScriptの修正を。 $ ./hoge -m AAA -n 40 なんていうのがあるとします。AAAは毎回変わるのだけど、40のところは、数ヶ月に一回変更するだけ、という感じ。流石に、40を毎回...

Tabulatorで行こう! 〜ダイバー編〜

あれから半日 ある程度のところまで、というところで、寝たんだけど。寝付けないわけです(笑) 「何をどうすれば」「あれをこうすれば」「これがああなって」という感じで、脳は活動をやめてないわけです。 ルーチンなので、そのうち、眠りに落ちるのですが、ナカナカ抜けない癖のようなものです。 修正を加えていた「書庫アプリ」も、ほぼ所望には仕上がりをみました。 そうなんだよね Wiredのフロントエンド に関する記事なのですが、「そうね!そうね!」と思ってしまいました。ほんと、移り変わりが早いので、ナカナカ入るタイミングを見つけられないで、今に至ってしまってますからね。大縄跳びに、上手く入れないみたいな(笑) Sort機能 Defaultで、Sortすることになっているので、Sortさせない列に対しては、以下のような設定をします。(一部抜粋) var table = new Tabulator("#example-table", { layout:"fitColumns", columns:[ ... {title:"Gender", field:"gender", headerSort:false}, Full は、こちらに。 Filter機能 Exampleを見ると、いろいろできますが、ここでは、「Text入力」と「選択入力」の二つを紹介。 var table = new Tabulator("#example-table", { layout:"fitColumns", columns:[ {title:"Name", width:150, headerFilter:true}, ... {title:"Favourite Color", field:"col",           headerFilter:"select", headerFilterParams:{values:true}}, ... ...

Tabulatorで行こう! 〜違うじゃん編〜

あれから数日 タイトルに書いてしまってるので、なんですが(笑) 「 table.js 」に、再度落ち着いたと思いきや、結局、別のLibraryをいじってるという日々でした。 「 Tabulator 」という多機能のTable操作のライブラリです。 まだ、最終的にやりたいことはできてないのだけど、落とし所は過ぎてるので、カキコ。 初動のハマり箇所 いつものように、ぐぐる先生に、お手伝いをいただきますと、 $("#tabulator-example").tabulator({ layout:"fitColumns", ... と表現されているところが多いのですが、実は、 var table = new Tabulator("#example-table", { layout:"fitColumns", ... というのが、最新では紹介をされています。最初の方は、「 jQuery 」とセットになってるお話なんですが、最新では、いりません。ちなみに、最新は、 4.1 です。 それでも、jQueryという場合には、 <script type="text/javascript" src="dist/js/tabulator.min.js"></script> <script type="text/javascript" src="dist/js/jquery_wrapper.min.js"></script> Wrapperが用意されているので、それをimportしてください、ということになっています。(パスは読み替え要です) 必要な設定 最低限の設定は、以下になります。 <link href="dist/css/tabulator.min.css" rel="stylesheet"> <script type="text/javascript" src="dist/js/tabulator.min.js"></scr...

Pythonで行こう! 〜ごにょごにょ編〜

そこまで! 煮詰まっていたような、ないような感じだったので、久しく更新をしていなかった Flask ベースの「 書庫管理アプリ 」を見てみようと思ったわけです。 大昔は、 LibreOffice のみで管理をしていたものを、 TurboGears (今のPylons)ベースに変更をして、そこから Flask へシフトしたという経緯があります。ほんと、今でこそ、って感じな訳なんですけどね。 閲覧するだけの代物かしら、と思っていたら、更新機能を作り込んでいて、自分に、びっくり!(笑) 構成要素 Python 3.7 Flask SQLite3 Genshi jQuery and Others SQLite3 は、すっぴんで使用。 SQLAlchemy でラッピングもありなんでしょうが、まあ、すっぴんでいいかな、と。 Genshi は、テンプレートエンジンで、デフォルトだと、 Jinja2 。(確か、一時、 Mako を使ってましたかね)Genshiにした理由は、HTML内でのCodeの有り様が自分の肌に合ったから、ということでしょうか。 新規 微調整をしたら、先のアプリは、それなりに動いたので、 新規 で一つ作ろうかな、と。要素列も10に満たないので、テーブル1つでいいだろうから、即決して、作業を始める。 結局のところ いつものように、というか。一番時間がかかったのは、元となるDataの作成と微調整。それさえも、自動にできれば、そりゃぁ、楽だけど、大元の検索ワード自体は、与えないとダメ、かつ、多言語の扱いもあるので、そりゃ大変(笑)(否、考える価値はあるんだろうな、これは。。。) 当初 Julia で作り直そうかと思って、あれこれやってたんだけど、Version問題で、動かないものがゴロゴロしてて、上のように、ササッといきたいのに、その負担は負えないな、という判断で、Flaskになったという顛末です。 欲張る アプリと言っても、HTMLでTable表示をしているだけのもので、そこに、Javascriptでもって、SortやFilterを使用していたのです。「 table.js 」ってやつを使ってたのですが、気分転換的に、別のもいいかな、と、探すことにしました。 「 20 Best jQuery Filter and Sort P...

Fedoraで行こう! 〜ラリー編〜

Java Oracle版のJava 8の改版があったようなので、Installしてみようと思ったら、ConflictでNG。じゃあ、旧版、と思ったら、rpmはなく、tarballのみ。さて、どうしましょう、という自体に。 Fedoraが29になったので、Android Studioの動作確認をしよう!じゃあ、Javaは改版されているのかしら?という流れで。 SDKMAN これまでにも何度か書いてきたように、tarballだと、後々、面倒くさくなりそうなので、そうでない方法があれば、よいな、ということ。はたと気づく。 「 そうだ!SDKMANだ! 」と。現時点でも、 kotlin や gradle の新版は、 SDKMAN で対応しているので、ここに、Javaが加わってもなんら問題はないじゃん、と。 SDKMANは「Java関連のPackage Manager」というものなので、それがよい、と。 Which version do you select? $ sdk i java ... $ sdk i java 8.0-191-oracle ... $ sdk l java ================================================================================ Available Java Versions ================================================================================ 12.ea.15-open 11.0.1-zulu * 11.0.1-open 10.0.2-zulu ...

Fedoraで行こう! 〜28 to 29編〜

on Schedule Fedora 29。予定通りにRelease。気づいたのは、今日。 ここ に、Upgrade方法記載してありますが、現時点(2018-10-31夕方)で、記述ミスがあるので、注意が必要です。 Upgradeしてみる $ sudo dnf clean all $ sudo dnf update F28での身なりを整えておきます。 $ sudo dnf upgrade --refresh $ sudo dnf install dnf-plugin-system-upgrade $ sudo dnf system-upgrade download --releasever=29 時々、Problemなrpmに警告が出ることがある(当方はjdkで出た)ので、迷わず、removeした後、再度、実行してください。 問題がないようなら、いつもと同じような感じで進捗します(笑) 記述ミスと言っていたのは、 29 のところが 28 になってた、ということです。(直ってるかな) $ sudo dnf system-upgrade reboot ひたすら、待ち。CPUが強力だったりすると速いのでしょうけどね。(SSDになったことで、速くはなりましたけどね) 使用感 リブート後、すぐなので、使用感も無いもないけど。gnomeのextensionである「 dash to dock 」に、当方の環境だと問題がでているようで、これから解析かな、というところ。vlcとかemacsとか常用している一部では問題はでていないので、ほぼ問題ないのだろう、と思われる。Python3は、3.7.1で、Juliaは、1.0.1になっていますね。 その後 upgger で使用しているPythonが3.6から3.7に上がったことで、venv(virtualenv)の作り直しが必要になってて、pipで、あれこれinstallして、Uploadできる状況にはなっております。 解決 Gnome3 が出た当初は、「なにこれ?」っていう感じだったので、 MATE や Cinnamon を使ったりしてたのね。 で、 Gnome Shell Extension のSiteで、「Dash to Dock」ていうのを見つけてからは、重宝してたんですよね。気づくと、これないと...

Uploadしよう!〜埋め込み編〜

イメージ
IBM acquires RedHat for $34 billion ZDnetの記事は、 ここ 週明けから驚いた。Cloudのテコ入れかなぁー。 一番の心配は、Fedoraだったりするけど、個人的には(笑) 90年代や00年代のMicrosoftやIBMを知ってたら、考えられない状況っちゃ状況ですからね、やっぱ。 埋め込み どうしても、やりたくなったので、お試ししてみることにしました。埋め込みです。 Youtube。 そのまま、埋め込んでいるだけです。Pandocはスルーしてくれるみたいですね。 Nybble 上のYoutubeのやつは、Raspberry Pi+Arduino Compatible(IR+12CH-PWM)なのね。 これ、いいなぁ、と思って、ぜひ!と思ったので、埋め込みできないかしら、ということでのお試しだったのです。

Juliaで行こう! 〜ぶらぶら編〜

この1ヶ月ぐらいで、ボリュームゾーンのとあるCPUは、3割近く値上がるぐらい、物がない、ってことか。 置き換え PythonからJuliaへ。というより、PythonのCodeをJuliaで呼び出すというのが正しいのでしょう。前回のPythonをJuliaで呼び出せるように、します。 @pyimport PySide.QtCore as c @pyimport PySide.QtGui as g @pyimport PySide.QtWebKit as w @pydef mutable struct TestFive function __init__(self) self[:x] = 100 self[:y] = 150 self[:w] = 720 self[:h] = 480 self[:u] = "http://localhost:8000/" self[:t] = "Demo Title" self[:m] = "" end function start(self) app = g.QApplication([]) view = w.QWebView() view[:setGeometry](self[:x], self[:y], self[:w], self[:h]) view[:setWindowTitle](self[:t]) if self[:m] == "" view[:load](c.QUrl(self[:u])) else view[:setHtml](self[:m]) end view[:show]() app[:exec_]() end end using PyCall include("../lib/libj/TestFive.jl") tf = TestFive() function c...

Pythonで行こう! 〜ぶらぶら編〜

胡椒多め、大葉をトッピング。ぐぅ! WebKit 試したいことがあって、まず、Juliaで、 Blink を試そうとしたのだが、 Build Failed 状態。 しようがないので、Pythonで、 Gtk+WebKit というのを見つけたのだけど、今の環境だと、 Install Failed 。なんですと! で、結果的に、 Qt5+WebKit となりました。まあ、出自を考えたら、こういう構成になりますかね。 ということで、試してみます(笑) 下準備として、 $ sudo dnf install python3-pyside クロスプラットフォームな PySide をInstallします。 Site Access 以下、引数に、URLを与えたら、表示される、という簡単なものです。 #!/usr/bin/env python3 from PySide import QtCore from PySide import QtGui from PySide import QtWebKit import sys class WebDemo: def __init__(self): self.x = 100 self.y = 150 self.w = 720 self.h = 480 self.u = 'http://google.com' self.t = 'Demo Title' def start(self): app = QtGui.QApplication([]) view = QtWebKit.QWebView() view.setGeometry(self.x, self.y, self.w, self.h) view.setWindowTitle(self.t) view.load(QtCore.QUrl(self.u)) view.show() app.exec_() if __name__ == '__main__': wd = WebDemo()...

雑感 〜急な雨に右往左往編〜

少し間が空いてしまいました。 mono Fedora上で、Win Binaryを動かすのは、昔と比較すると、随分と洗練されてきました。今は、Win Binaryも作成できる環境になってるのはいいのですが、如何せん、Winを使用しない生活をしていると、作成をする意味付けが非常に弱い、という事実があります。それ故、そちら側の技術を置き去りにしているという状況になっています。 Hello Worldを作成してみるのはいいかもしれない、ということで、お試しをしてみました。 $ sudo dnf install mono-devel $ sudo dnf install mono-data-oracle 2つ目は、Compile時にErrorが出たので、追加Installしたものです。 枠だけHello 準備ができたので、簡単なCodeを。Titleが表示されるだけのものです。 using System.Windows.Forms; class MainWindow{ static void Main(){ Application.Run(new HelloWorld()); } } class HelloWorld : Form{ public HelloWorld(){ this.StartPosition = FormStartPosition.CenterScreen; this.Width = 240; this.Height = 80; this.Text = "Hello World"; } } これをCompileします。 $ mcs -target:winexe -pkg:dotnet hello.cs Compileが上手くいくと、「 hello.exe 」が作成されます。 $ mono hello.exe なんとも、あっさりと、Windowがたちあがってきます。ブルブル。

雑感 〜少し肌寒い編〜

タイマー カップ麺を食べる際、タブレットのタイマー機能で、云々ということをやっていました。ただ、タブレットが替わると、その標準的なアプリはメーカーによって、UI/UXが異なってきます。すると、お湯を入れてから、アプリを動作させるのに、少しだけ戸惑う時間が発生します。少なくとも、十数秒程度は。加えて、カップ麺そのものを頻繁に食べないこともあって、毎回、その逡巡する時間が発生してしまいます。 なんとかしたいなぁ、と思ってて、某timer周りをいじってたんだけど、今のところ上手くいってなくて、結果的に、上手くいってるPyGTKベースのTimerを作成(ちょい変)。デフォルトで、180秒と300秒のカウントダウンのみ。アラームもでないけど、作業をしているデスクトップ上に、ポチッとおけるので、いいかな、と。 SQLite3 諸々のSiteを巡回するのに、Rssアグリゲーターである Liferea を使用しています。このアプリ上でも閲覧はするのだけど、元々、このアプリを使うようになったきっかけは、DataをSQLite3で持っていたことに起因します。 RssのLink先から得られるFull TextをOfflineでも、読めるようにしたいということを考えていて、epub化すれば、いわゆる一般的なブックリーダーで読めるな、と思ったわけです。限りなく、自分的には、ビンテージに近いアプリで、当時、iPod Touchで読めるようにするのが、自分的至上命題だった。 それ故、Handling可能なDataをSQLite3で構築している Liferea が筆頭だったのです。SQLite3は、一般的なCopy and Pasteにて、可搬性が可能なRDBでしたので、作ったScriptは、当初、 SQLite3をCopy→未読Data収集→Script実行→Dataの既読化→Offline使用 SQLite3を含めて、Backup ということをやっていました。使用されているSQLite3は、既読してもData量が減るわけではなく、Readフラグが「0」となるか「1」となるか、でしたので、Data自体は、膨れていきます。(時々、Delete実行するんですけどね) Dataは基本鮮度が大事なので、そこまでして、Dataを保持する必要性もないかな、ということで、作業フローの見...

Juliaで行こう! 〜探して!編〜

仕込み期間 どうしても、仕込み期間というか仕込み時間というのが必要で、ナカナカ毎日とはいかないものです。 今回は関数一つだけ。仕込み途中で、へぇー、と感心したので、それを書こうかと。多分、Pythonでも同様のことはできるのだろうえけど、HotなPandas使って、ゴリゴリっていうので、やってないので。逆に、Juliaで初っていうことになってるのですね。 Julia 1.0.1 Conflict問題はそのままで、実作業的には、 1.0.1 ではなく、 1.1.0-DEV を使用しています。Versionを記載したのは、0.7を含む1.x系で、BaseのModuleの関数が、いろいろと変わってまして、 xxfirst というものに、頻繁に使用しそうなものが変わっています。今回紹介する関数もその流れにあるものだったします。 探せ! いきなり、参考Codeを以下に記述します。 julia> x = [ 1, 2, 3, 4, 5, 6] 6-element Array{Int64,1}: ... julia> y = [ 1 2; 3 4; 5 6;] 3×2 Array{Int64,2}: ... julia> z = ["A" "B"; "B" "C"; "C" "A";] 3×2 Array{String,2}: "A" "B" "B" "C" "C" "A" 3つ程、Arrayを用意しました。2つ目と3つ目はMatrixになってるものです。 julia> findall(u->u==2, x) 1-element Array{Int64,1}: 2 julia> findall(u->u==2, y) 1-element Array{CartesianIndex{2},1}: CartesianIndex(1, 2) julia> findall(u->u=="A", z) 2-element Array{Cart...

雑感 〜秋の夜長編〜

昨日は Switch付きのUSBハブが速攻ダメになりそうな気配があったので、今度はSwitch無しにするかな、と、Amazonを覗いておりましたら、意外なことが。 少し前の記事で、「CPUが品薄」っていう話が出てて、「品薄なのはNote向け」なんていうのも出てまして、へぇー、と思ってながしていたんですね。 さっき、見たら、売ってないです、まじめに(笑)次組むなら、Coffe Lake以降ということにしていたので、いくつかMarkingしてたのですが、諸々ありませんでした。無いというのは語弊があるので、訂正をしておくと、「Amazonにて、出荷」というのがなくなってるという意味で、「出品者」ベースのものはあります。 メモリ価格は少し下がってきたということもあったのですが、CPUとは、ちょっと驚き。まあ、AMDさんが大暴れしてるのと、Fabの問題で、大変なのかもなぁー、と思ってみた秋の夜長でした。 夏日? 少し買い出しをしておかないとダメですな、ということで、午後に外出。すると、久しぶりの良い天候ということ以上に、恐ろしく日差しが痛かった。というか、暑かった。日本も亜熱帯寄りになってきてるという話もあるので、この時期に、この暑さもありなのかな、と。余りに、暑いので、「ガ○ガ○君」を買ってしまいました。 プッシュの嵐 GithubとBitbucketを併用しています。Julia関連は、ほぼGithubなのですが、この記事とかPrivateでしか使用しないと思われるCodeは、Bitbucketと切り分けています。gitとhgで、時々混乱をきたすのですが、まあ、恒常的に使ってると、まあ、なんとか使用できているので、いいかな、と。 夕方から深夜にかけて、Code修正やUpdateによる動作確認なんかをして、ひたすら、pushをしてました。「なんで、こんなにpush」してるんだ、と、途中でふと思いました。 最初は別のCodeを直していたのですが、ふと、「Macが落ちているのは、Compilerの差かな」と、Linuxとの相違を思ったので、「だったら、CMakeで、Clangベースにしてみるか」という思考を経て、Codeを変更、push。結果はNGでしたけど。(手元にないOSのでDebugすることの難しさよ) 更新タイミング 今は、Fedora上のgedi...

Juliaで行こう! 〜Plots編〜

いっぱいあるのよ 前回も言いましたが、専用機であるJulia(笑)は、グラフ描画向けのPackageも結構ございまして。 ただ、ご多分に漏れず、当方の環境依存で、Installできない代物もあります。 そういうことからではないのでしょうが、描画する部分をBackEnd、Dataの処理やデザインに相当する部分をFrontEndと切り分けをしまして、そのFrontEndを共通化して、好みのBackEndを使用するというPackageがあります。 「 Plots 」というものです。Plotってつくので、いろんな意味で頭の中が混乱しましたけど。 BackEnds さて、描画を担うPackageも、それ単体で使用可能なものですので、切り分けなく使用するのもありかと思います。機種等が変わった場合、上手くInstallできないものもありますので、そういう部分を念頭において、判断するのがよいと思います。 PyPlot Gadfly GR Plotly InspectDR ここ には、他にもありますが、すでに使用できないものや、JuliaのVersionが古いものをBaseにしているので、ご注意ください。 「 PyPlot 」はTk、「 GR 」はQt、「 Plotly 」はBrowser、「 InspectDR 」はGtk+。「 Gadfly 」は、手元のJulia-1.1-DEV on F28ではBuild Errorとなりましたので、省きますね。(最新Branchは試していないので) 使ってみる前に for i in linspace(0, 2pi, 100) という記述があります。0.7以降は、このlinspace()関数はなくて、上記と同じように、0.7以降で記述をしようとすると、 for i in range(0, stop=2pi, length=100) と書き直す必要があります。 Package Install (v1.1) pkg> add Plots いつものように、Installします。 さて、使ってみよう! BackEndを決める必要があります。 julia> using Plots julia> backends() 9-element Array{Symbol,1}: :pyplot ...

Juliaで行こう! 〜PyPlot編〜

Julia-Nightly、Conflict起こしてて、Installできないっす。強制的って話もあるのですけどね。 多いのよね JuliaがData特化型ということは、グラフ描画云々、という流れになります。その際、多いのは、 Pyplot によるもの。Jupyterによるとも言うのでしょうけど。Gadflyも多かったのですが、FedoraちゃんにはInstallできなかったので。 気まぐれに、描画してみようなんて思ったので、 PyPlot を使ってみることにしました。 Warningが出る まずは、PackageのInstallから。 (v1.1) pkg> add PyPlot 続いて、Import。 julia> using PyPlot WARNING: No working GUI backend found for matplotlib とのたまう。はて? julia> using PyPlot WARNING: No working GUI backend found for matplotlib julia> figure() PyPlot.Figure(PyObject <Figure size 640x480 with 0 Axes>) 一見、問題なく動作しているように、見える。が、何も表示されない。 Warning なので、いけるんじゃないの、と思っていたら、甘かった。 matplotlib on Python PyPlot って事ですから、当然、Pythonなんだろう、と。Pythonで、matplotlib久しく使ってなかったけど、動くのかしら、と。(Fedora 28にしてからは動かしてはいないなぁ、と) Julia環境からPython環境へ移行し、以下を実行してみると、 $ python >>> import matplotlib.pyplot as plt ... ModuleNotFoundError: No module named 'tkinter' tkinter 。キタコレ。やっぱり、なんだかんだで、Tkなんだな、と。Tk入ってなかったか。 $ sudo dnf install python2-tkinter pytho...

Juliaで行こう! 〜Package閑話編〜

前座 一連の流れで、0.7以降、PkgDevが使用できない、というものがあります。 (v1.1) pkg> add https://github.com/JuliaLang/PkgDev.jl#kc/07 Commit前のBranchですが、問題なく、動作します。LICENSEもでます(笑) いずれ、取り込まれるので、待つべし! Commit前のBranch使うとか、やばいな、自分(笑) 「const cd = Pkg.Dir.cd」ってところで、まず落ちてたんですが、Code見ると、がっつりなくなってた。 口上 では、本編を。少し閑話的な今回のお話です。Juliaにも標準ではない便利Libraryがあります。今回はPackageに関するお話を少し。 初稿を書いていた時点は、v0.6.3のお話でしたが、今は、メインがv1.1-DEVなので、追記しつつ、進めていこうと思います。 どう探す? まず、ぐぐる先生で、「 Julia hoge 」とやって、上位に出てくるPackageを覗いてみますと、githubには、先人達が記述した様々なPackageがゴロゴロしています。これは、JuliaのPackageのHostがgithubベースになっているからです。それを見て、ほうほう、そういうのがあるのか、と。 しかしながら、諸々の言語やFrameworkと同様、流行り廃りや開発者のモチベなどなど様々な理由で、開発が止まってしまった場合、JuliaのVersionが上がって、使えなくなるなんていうこともでてくることが考えられます。(OSS全般のお話かもしれませんね) そうはいっても、個人個人に好みの問題も発生しますので、難しい問題でもあるわけです。(どうしても使いたい欲求) ぐぐる先生とのPackage探索は、希望とするものがはっきりしているので、入力するKeywordも相応のものになっていたりますので、Hit率もあがるのでしょうが、それでも、面倒臭いって思う時もでてきます。そういう場合には、   Julia Observer というSiteは、どうでしょうか。カテゴライズもされていて、比較的わかりやすいのではないでしょうか、と。 今のところは、検索のみで済んではいるのですが、その先へ進むには、こういったSiteに、大いにお世話になりそうです...

Juliaで行こう! 〜少し簡単に編〜

ペッパーミルが欲しくなってきました! 口上 前回、Dataを標準関数を用いて、読み込んでみました。他言語と同じように、csv的なものは追加libraryが潜んでいるもので、Juliaもご多分に漏れず存在しています。 では、何故最初から使用しないか?という疑問が湧きます。いずれ訪れるであろう大量(破壊)Dataを目の当たりにした時、太刀打ちできない可能性がでてくるかもしれません。 つまり、通常装備(標準関数)のみで凌がなければならないかもしれないのです。便利すぎるのは身体に毒です(笑) csvread関数 しかし、Juliaは標準だったりします。(笑)Pythonも今は標準なのかもしれません。(基本的に、いつも自家製関数なので…) 準備したDataは、csvread関数が想定している範囲内になっているので問題なく使用が可能となっているようです。 ただ、0.7以降は、関数名が変更されています。以下、説明致します。 では解説(Header無し編) 0.6.3での、お試しの実行方法は以下。 $ ./practice_01.jl ./data/elements.csv readfile()関数部分は以下のようになっています。 function readfile(filename) L = readcsv(filename, comments=true, comment_char='#') (rnum, cnum) = size(L) @printf("(row,col)=(%d,%d)\n\n",rnum,cnum) for i = 1:rnum println(L[i,:]) end end readcsv()関数では、コメントの有無とコメント示す開始文字を設定しています。 size()関数の返り値はタプルで、行数と列数を返しています。 @printfは 、format付きの出力を行う際に使用する関数になります。 諸々の処理がreadcsv()関数にて実現できているので、Code自体はスッキリです。 Codeは、 ここ にあります。 @printfは 、以下でも問題はありません。 @printf "(row,col)=(%d,%...

Juliaで行こう! 〜データ読み込み編〜

ツナパスタ。どうしても、ひと味足りない。どの調味料なのだろう。。。 前口上 前回の結果、Dataが準備できましたので、軽めの実践を行います。 Manualやあちこちをクロールしていますと、Juliaは、本当に、Peakyな機体だな、と(笑) Python界で言うところのpandas的なDataを準備するまでをPythonで、その後の実行をJuliaでなんていうのが、(個人的にはPythonに慣れている手前)一番効率がいいのかな、と思っていたりします。 実行環境 Fedora 28 Julia 0.6.3 Ubuntuでもなく、Macでもなく。慣れた機体っていうのはいいものです(笑) Juliaは標準ReposにてInstallしているものです。JuliaのSiteを見ると、coprにてのInstallが記載されていますが、1.00相当が見当たらなかった(2018-08初頭。つまり、1.0が出てすぐの頃)ので、ひとまず0.6.3で行こうかと思っています。 tarballからbuildしてもいいのだけど、本論ではないので。まあ、そのうちUpgradeされるだろう、と。 まずはHello World 鉄板ネタでHelloWorldであろう、と。 $ ./hello.jl Hello Wolrd on Julia!! と実行することで、標準出力に、Hello Worldが出力されます。 Pointと言うほどではないですが、Shellモードにて実行しています。そのため、Scriptの中身は以下のようになっています。 #!/usr/bin/env julia println("Hello Wolrd on Julia!!") 1行目は、言ってしまえばおまじないみたいなものですね。 Codeは、 ここ にあります。 すっぴんで読み込んでみる Fileを開いて、読み込ませて、必要なDataを、配列に格納してみる、ということを行ってみます。 Pythonで言うところのArgumentParserを探しきれなかったので、最低限の引数を制御できる 予約語ARGS を用いて、実装を行っています。 例えば、 $ ./hoge.jl abc.txt def.txt と実行すると仮定すると、 hoge.jl : ARGS...

Juliaで行こう! 〜データ準備編〜

前口上 何故かビット演算の話からということになっていますけれども。読んでいて、ナカナカ面白そうだったというのが大きくて。 そろそろ新しい言語を、ということを考えてもいたので、Julia。 Pythonっぽい(後に違うとわかる)ので、少しいじってみたら、これは、と思ったので。不定期で書いていこうかと思っている次第です。 Benchmarkを見ると、演算に関しては、速いのですよ。Fortranよりは遅いのだけど、Cよりちょいと遅いって感じで。(少し誇張) Pythonが全方位で汎用的なのに対して、Juliaは赤いカラーリングが施された専用機(演算特化型)という違いなのかな、と。そんな感じがしています。 下準備(データどうしよう編) いつも悩むところなのです。お試しデータをどうするか?というところで。 以下に、注意を払っていて、 100行から500行ぐらいまでの適量なData(列方向は20列程度まで) csv的なFormatで、Data欠損がない Data自体は中立的 というものです。国や地域になるべく依存してないDataを、ということです。 これを考えていくと、植物や動物のData(図や写真無し)がよいのでしょうか、と、OpenでFreeなものを日々探しているのですが、これは!というものをナカナカ見つけられずにいて、その時点で、作業が始まらないというジレンマに陥ってるということになっています。(本末転倒という) jsonだと、階層的でもあり、いいのですが、初歩においては、限りなくcsvに近いものを扱うのがよいと考えて、準備を開始します。 下準備(データこうしよう編) 先にも書きましたが、Formatは以下のようなものを準備します。 csv的なFormatベース header行の有無は適宜 各要素にData欠損無し デリミタはカンマ 各要素にカンマは含まない、スペースは含んでよい 任意行の1文字目がシャープの場合、コメント行 これを網羅したDataをどうするか。現時点で用意したのは、元素周期表のDataとなりました。 各元素の全Dataではないのですが、ひとまずこれで進めてみようということにしました。 読み込ませてみるっていうもので、ガツガツと演算をというものではないですが、読み込んで、配列等に格納するという意味では...

Juliaで行こう! 〜ビット演算子編〜

事始め JuliaのOnline Manualを読んでおりまして。その流れで、いろいろと書いておくのもよいかもしれないと思いまして。 つらつらと始めようか、と。ゴールは定めていないので、それなりに(笑) で、読んでいて、急に、気になったのが「ビット演算子」というお話。 Julia Version on Fedora 28 今後、何度も記載することになるのでしょうが、 Fedora 28 に標準搭載されているのは、 0.6.3 というVersionです。 Fedora 29 (2018-10-30 Release予定)には、 0.7.0 か 1.0.0 のどちらかが搭載されると思います。ちなみに、Juliaの最新Stableは1.0.0です。(1.1.0は開発版) 従って、以降のお話は、しばらく、0.6.3でのお話になります。 ビット演算子とは? まずは、気になったビット演算の例をば。(結果的には、勘違いきっかけ。恋のようなもの) julia> 1 & 1 1 julia> 1 & 0 0 julia> 10 & 10 10 julia> 11 & 11 11 julia> 11 & 12 8 Interpreterモードにて、お試しをしてみました。へぇーなるほど、と。 ただ、我々は普段10進数の世界にて生存していることから、 11 と 12 の積である 8 に疑問が湧きます。 というか、湧いてしまったのですね。「ビット演算子」という項目なのに。 すわ、ビット演算 つまるところ、ビット演算とは、10進数の世界ではなく、非常にコンピュータに優しい2進数の世界の演算ということになります。 例えば、10進数にて、29という数字は、 29 = 2 * 10^1 + 9 * 10^0 ではありますが、2進数では、 > 29 = (1 * 2^4) + (1 * 2^3) + (1 * 2^2) + (1 * 2^0) ということになります。括弧は見やすくするための措置なので、意味はありません。 もう少し詳しく書くなら、 29 = (1 * 2^4) + (1 * 2^3) + (1 * 2^2) + (0 * 2^1) + (1 * 2^...

どうするの? 〜Unicode編〜

竹輪って、何気に、万能選手だと思うのですよね。 ダンダンダダン IMEに何を使ってるかと言いますと、その昔は、 Anthy で、今は、 Mozc だったりします。 辞書は鍛えたりしてなくて、ほぼスッピンで使用しています。普段使用する文字入力においては、ほぼ不満もなく使用できています。 特殊文字 キートップ(キーボード)を眺めていると、「M」の右隣のキーに、「ダッシュ」があります。ただ、キートップ上は、右上にありますので、通常入力ではなく、Num等を使用して入力することになるのでしょうが、考えてみるに、使ったことないな、と。 果たして、どのように入力するのだろうか?と頭をよぎりました。 ダッシュ 日本語的には、「ダッシュ」。英語的には、「プライム」。仏語的には、「アクサン・テギュ」。 数学的には、「一次微分」。これが一番わかりやすい(笑) 画面的には、「シングルクォート」との相違がわかりにくいってのも問題っちゃ問題なのですけどね。 入力方法(ダメ) いつも助かってますググる先生によると、 B4と入力して、文字をMarkした状態で、Alt+X かな入力にして、SHIFTを押しながら、Mの右隣キーを打鍵 これらは、Fedora上のTerminalでは、なんら効果のない入力方法でした。 ただ、「B4」は、Unicode的に、「U+00B4」であり、 Unicode入力 ができれば、表記可能を示しています。 入力方法(よっしゃ) その方法とは、 Ctrl+SHIFTを同時に押しながら、uを押すことで、入力モードにする Unicodeのコード「b4」を入力し、RET Fedoraでは、「u」が表示されつつ、入力待ちの状態になっています。「b4」を10進数化すると、「180」なのですが、先の失敗と同様に、「180」と入力すれば、というところもあるのですが、「U+0180」のことになりますので、全く別の文字が出力されることになりますので、注意が必要です。 例 表示 コード 読み ´ U+00b4 シングルプライム Σ U+03a3 シグマ π U+03c0 パイ ∞ U+221e 無限大 「シグマ」は「U+2211」にも存在するのですが、どちらがよいのでしょうかねぇー...

Uploadしよう! 〜High Light編〜

あんドーナツ。和洋のセッションが素晴らしい! 時々、気まぐれ ほぼ修飾をせずに、諸々使用しているんですが、それでも、ちょっと変えてみたい気になることがあります。ほぼ気分。 今回の気分は、Code部分の 行数表示 に関してです。 まだ、Bloggerの使い方がよく分かってないので、できるのかもしれないですが・・・。 記事を修正すると、修正日時で公開されるので、過去日も修正日になってしまうので、過去分は 行数表示無し で行こうかと思っています。(仮に、できるとしても、あれこれ修正するので、いささか・・・) pandoc変換 Markdown での記述が、 Test Test のようになっていると、 pandoc 後は、 <pre class="lang-python"><code>Test Test</code></pre> と出力されます。pandocでは、何もせず、単に、markdownを変換しただけの状態です。 ただ、諸々のCode HighlightをsupportできるJavascriptでは、以下のような記述にする/なるようになっています。 <pre><code id="lang-python">Test Test</code></pre> 上記の「id」部分の記述は、 Prism.js でのもので、「lang-xx」もしくは「language-xx」がHighlightをさせるAttributeになります。 Code Highlight on Prism.js 使用している Prism.js で、行数表示を行うには、HTML上で、 <pre class="line-numbers"><code id="lang-python">Test Test</code></pre> のように、 <pre> に、「class」属性を記述すれば、可能となっています。 諸々変換 pandoc変換後HTMLからBlogger用HTMLにするための、諸々変換その1を上記仕様に合わせる形でUpdate。 ...

やっぱりawk 〜Title編〜

レピシを見ると、牛乳!ほう! マヨ!ほう!となってたけど、結局、塩コショウに落ち着きました(笑) ある日の出来事 Upgger した後、 Preview で、全体確認をやっています。Upload後は、公開制御ぐらいになってるわけなんですが、ある時、Titleが変なことに気づきました。 例えば、今日のタイトルをベースにお話すると、Previewでは、「やっぱりawk」となっていたのです。はて? デフォルトはスペース Markdown での記述は、 % Title: やっぱりawk 〜Title編〜 なっていて、正しくは、「やっぱりawk 〜Title編〜」となるはずなのです。Title部分の処理には、 awk を使っていて、何も指定をしないと、デリミタはスペースなわけです。つまり、 第一フィールド: % 第二フィールド: Title: 第三フィールド: やっぱりawk 第四フィールド: 〜Title編〜 となっていて、本処理部分のCodeは、 TITILE=`awk '/Title:/{print $3}' ${DIR}/head.txt` これじゃ、出力されません。そりゃそうだ。 第三フィールドのみ となっているのですから。 考えてみれば、スペース無しでタイトルをつけていましたし、Label側で問題が発生しないのは、LabelはAPI上、「 カンマ 」がデリミタですので、 第三フィールド を指定すること自体に矛盾が発生しなかったというのが一つの原因でした。まあ、独自ルールなので、注意が必要ってことになります。 いったんawkったら、最後までawk その昔は、awkでも長い記述をしたものですが、複雑処理は、 Python などにお願いにすることなるので、awkでの処理は、「限りなくワンライナー」にしておこう、否、おきたい、というのが、どうでもよいポリシーです。(笑) すると、ここでのawkは、「 第三から最終フィールドまでを取得する 」ということなります。 TITLE=`awk '/Title:/{print substr($0,10);}' ${DIR}/head.txt` 独自ルール(またか!)上、「Title:」の後ろは、「半角スペース」の後、「タイトル」を記述するということにしています...

ちょっとだけFlavor〜IrisData編〜

豆板醤もよく使いますよ(笑) お試ししてみる たまに、お試しをしたくなることがあって。今回は、Scikit-LearnでRandom Forestをやろう、と。使用Dataは(有名な)Irisを用いてやってみます。いろいろとはまるわけです。(笑) Anaconda 「データサイエンス・機械学習向けのPython+RのDistribution」とあります。確かに、いつものように、Google先生でも、Anacondaというのがよくでてくるなぁ、と。pipじゃダメなの?というよりも、「RedHat系のOS Installer」の名称じゃないの?っていうのが、まずよぎります。個人的に、いつも混乱をきたすのです。(笑) Anacondaは 特化型 (カプールみたいなもの)だけど、VirtualEnvだと 汎用型 (ザクです)なので、後者を選択。 各種Version on VirtualEnv Python 3.6.6 Numpy 1.15.1 Pandas 0.23.4 Scikit-Learn 0.19.2 VirtualEnv上に、pipでInstallしたものです。こちらも個人的には、自家製はv3ベースのみになったので、venvでもいいのだけど、諸々v2じゃないとダメなこともありそうなので、VirtualEnvを使ってるという感じです。 DeprecationWarning from sklearn.ensemble import RandomForestClassifier sklearn.ensembleをimportすると、 DeprecationWarning: numpy.core.umath_tests is an internal NumPy module and should not be imported. It will be removed in a future NumPy release. from numpy.core.umath_tests import inner1d という警告がでます。Errorじゃないので、動かくなくはないのだけど、モヤっとします。 StackOverflow先生に聞いてみたりしますと、Numpyとscikit-learnのversionが問題で、scikit-learnを...

Uploadしよう!〜ひとまずまとめ編〜

どちらかと言うと「つぶあん」派かもしれない、と思うのですけどね。 現時点での総括 バタバタって感じできましたけど、とりあえず、今の時点でのまとめを作っておこうかと。 Phase 1. どこにどう記述するか?という選択。 投稿先を決める Blogger を選択 Formatを決める Markdown形式 を選択 pandoc にて、HTMLへ変換 Google Accountを作成 Blogger を立ち上げる Onlineで試し投稿 UploadはHTMLね、というのもありました。が、Blogger選択時に、Google先生は、Markdown云々という結果も得ていました。そこからの逆算で、Markdownの選択は、DataはLocalに持ちたいという希望にも叶うものでしたので、ほぼ一択に近い形での選択になりました。ただ、Upload前後での手間がそれなりにかかることが分かったので、その解消を考えました。それが次のPhaseです。 Phase 2. どういう流れなのか?を把握するお話。 Google Developer Consoleに登録 Blogger API v3 を有効化 Secret ID 等を取得 Python追加ModuleをInstall google-api-python-client oauth2client exampleを試す 試し投稿 のUp/Down Upload用Script( Upgger )作りつつ、改善したい点がでてきました。 Tagの属性に関すること id属性 class属性 Tagの不足に関すること カラーリング センタリング Data(not HTML)の置き場 JS text Code Highlight 用のLibraryであるJSの置き場を確保するための(3)。置き場は、 Github Pages 。 Libraryは、 Prism.js を選択しましたので、 <code> に属性を必要があり、pandoc変換で得られる場所からの置き換えを行う必要が出てきました。 Phase 3. どう効率してゆくかというお話。 HTMLのTag ID変換及び削除用Python Script HTMLのTag追加用...

Uploadしよう!〜仕様拡張編〜

無印さんの「グリーンカレー」青唐辛子が好みかも。。。 HTML5 <center> は、HTML5では、廃止されている。 CSS にて対応するよろし、ということになっています。ってことは、現行の変換だとダメというお話に。ほぼ作り直しに近いですやん。 追加仕様 変換ルールを以下のように変更しました。 変換前 変換後 (1) +++{x}string+++ +++{x}string+++ (2) +++{ss}(ta:center)string+++ <span style="text-align:center;> string </span> (3) +++{ss}(c:#ff0)string+++ <span style="color:#ff0;"> string </span> (4) +++{sc}(hoge)string+++ <span class="hoge"> string </span> (5) +++{dc}(moge)string+++ <div class="moge"> string </div> (1)は、何もせず、そのまま出力 (2)は、文字(string)をセンタリング (3)は、styleにて、色・サイズ等を指定 (4)は、class属性の定義が可能 (5)は、class属性の定義が可能 「{ss}」や「{dc}」などは、(Script上)限りなく予約語っぽいものになっています。 上記だと少し不親切ですが、「{ss}(c:#ff0,b:lime)」のように、「style」内は複数定義が可能ですし、「{sc}(aaa bbb)」のように「class」も複数定義が可能になっています。 限りなく完了形 ほぼ所望のことは可能になりました。 シメ! 春 は花 夏 ほととぎす 秋 は月 冬 雪さえて すずしかりけり Awesome!!

タブレット考

流石に、同じネタが続くと枯渇してくると申しますか。否、すでに、投稿する文書を書くことに集中すればいいという状況が作られつつ、あるということで。 最初のタブレット 何時、購入したかは覚えてはいないのだけど、800☓600クラスでした。中華パットで、量販店だと、タブレットはまだほとんど店頭に並んでいない頃だったと思います。近場のPCショップのワゴンで買ったのが最初だったかな、という記憶があります。 動画を観るのには、CPU性能が不足でしたが、これまた当時だと、mp3プレーヤと文書閲覧のために、軽いものを、というのに、見合うハードがタブレットという選択肢だったのですね。(スマートフォンもない頃か。。。) こだわりの機能 その初期から今まで一度も方針を変えたことはないのが、 SDカード が使用できるかどうか。これは、本体側は標準SDであればいいって話で、その分の本体価格が低くなるのと、手持ちのSDが流用できるというのが大きかったですね。 困り事 まあ、致し方ない部分はあるのですが、CPUの性能不足というのが数年経つと出てきます。まあ、これは、ハードなので仕方がないのですが、それ以上に、問題なのは、OS更新がされないというのがあります。ある意味、OS好き(というカテゴライス)からしてみると、最新は入れたい・使いたい、というのが本音のところで、その部分が、いつも、悶々とするところだったりします。 KernelをBuildするのはいいのだけど、rootまでとって云々というのはやりたくない、というか(笑) 今使ってるのがどういう状況かは調べてないので、調べてみないとダメですね(笑) 最近のタブレット 考えてみると、歴代ずぅっと中華系パッド。国産やリンゴは使ったことがないし、多分、これからもそうな気がします。初期の頃に比べると、安かろう・怪しかろう、というものでしたけど、今は、価格以上に高性能。今使ってるのは、4コアで2K画面(笑) 解像度が高すぎて、アプリ側の方が挙動不審(笑)

Uploadしよう!〜突貫工事編〜

仕事って生まれてきちゃうものだしな、というのが持論だけど、他視点だと、「忙しくしてる風」になっちゃうのが難点です(笑) Markdown拡張 前回、「色付き」や「センタリング」ができない、っていうお話で。やっぱ、たまに、なんとかしたいよね、と思うことが必ずでてくると思われる案件だと思っています。少し拡張してみることにした(笑) 自分用だからいいだろう、という。 文字に色をつけたい 文字をセンタリングしたい 今の要望はこの2つです。上は、 <center> タグ。下は、 <span> タグを用いればいけると考えました。 問題は、Markdown上、どうするか?というお話です。 決めたこと 変換ルールを設定しました。 変換前 変換後 (1) +++string+++ +++string+++ (2) +++()string+++ <center> string </center> (3) +++(c:#ff0)string+++ <span style="color:#ff0;"> string </span> (1)は、何もせず、そのまま出力 (2)は、文字(string)をセンタリング (3)は、styleにて、色・サイズ等を指定 (2)が奇妙に見えます。ただ、Markdown的に、特殊ルールを複数作るのは、大変だな、と思ったので、「+++」だけで対応しようと考えました。現状、二択なので、現行(考えてる)仕様やれる話なのですが、もっと増やすことを考えると、仕様拡張が必要になってきます。(こう書いた時点で、どうしようかと思案し始めるのであった) 本質的に、こういった拡張部分に、入力手間を増やしたくない(それが数文字であったとしても)ので、color表現なども、なるべく少ない文字数で表現しようとしています。 ちなみに、この「c」に相当する部分は、PythonにおけるKey(辞書)相当なので、出力時には、Valueを使用するようにしているので、実際のところ、対応は自由!(笑)今は、「fs」が「font-size」と「fs」が「font-style」になっています。 +++(c:#ff0,fs...

Uploadしよう!〜作業効率化編〜

同じテーマで、いつまでやってるんだって、話なんですが、もうちょいで、終わりかな、と思ってるところです。もう少しお付き合いくださいませ。 作業手順 現状の作業手順は以下のようになってます 投稿するMarkdownをEditorにて記述 pandocにて、HTMLに変換する HTMLを少し修正(Upload後でもOK) Upggerにて、タイトルやラベルを決め、Upload Blogger上にて、編集&公開 という流れです。 ただ、項目だけ記載すると、まあ、そんな感じよね、と思うのだけど、実際は。 作業時の問題点 各Scriptと記事の格納場所が異なるため、出入りが面倒 フルパスでええやん(深いと大変。いっぱいあるし、毎回だし) Terminalを準備すればええやん(画面が狭くなる) 手入力多い(どんだけ省力) 素と仮想の出入りが面倒 System側に影響がでないように、追加Moduleで特殊なものは仮想 今回の大半は仮想側にInstall タイトルとラベルの入力が面倒 TerminalのCLIで日本語をあまり扱いたくない(わがまま(笑)) HTMLの微調整の量がそこそこある こだわらないと、別にいい部分も多分にある HTMLの微調整に関しては、部分的には、Scriptで逃げることにしました。それ以外は、フロー上の問題なので。 最近の言葉で言うなら、RPA案件ですかね? 一括処理 できうることなら、記事を作成しているDirectoryから、Uploadまでを一括で行いたいので、Bashやawkの出番と相成りました。 今は、 $ go 20180903.md と行えば、Uploadまで終わります。Blogger上では、手元ではできない処理だけを行えばよいところまで、ほぼ持っていけたのではないかという状況になりした。個人的には、超絶楽になった、というのが正直な気持ち。 検討項目 色付け センター化 HTML上で上記のようなことをしたいので、そちらを調べようかと思っております。 Offset問題 今、ReleaseしているUpggerは、Dateutilを使用しているが、どうやら問題あり。 当初、tzlocalを使用していたが、Upload時間に差が発生するので、Dateutil.tzに...

Uploadしよう!〜問題発生編〜

何も考えずに、あっさりと終わってしまうのもさみしいものではありますが、細々とした問題が発生し続ける状況 は、それはそれで辛いものではあります。 格納場所 認証用Fileを直下においていたんだけど、それはあまり綺麗ではないな、ということで、隠しFolderにおくことにした。 flagの問題 flags=Noneとでもして、対応しないとダメ、ということを書きましたが、なくても動作している状況になってて、ただ、無いよりはあったほうが確実性が高い(信憑性があれだけど)と思うので、その部分はそのままにしておくことに。(今のところ) fetchImagesの問題 insert()関数の引数に、fetchImagesがある。引数そのものは受け付けているようだけど、実際の画像Dataそのものは、どうやってもbodyに返ってこない、という状況になっています。StackOver Flowなんかで、「画像のUploadは許容してないぜ!」なんていうのも見受けられるので、そうなのかもしれない。 borderの問題 Bloggerではなく、pandocの問題。単純にMarkdownを変換すると、表のborderはない状態で出力されます。出力されたHTMLに 以下のような記述を追加すれば、表示はできるので、まあいいか、と。(頻度の問題) <table border="1"> classの問題 一番の問題は、Markdownとpandocをちゃんと理解していないってことなんでしょうけどね。 <pre class="language-python"><code> ではなく、 <pre><code class="language-python"> であった欲しいというお話です。Code Highlightは、Prism.jsを使用予定なんですけどね。 idの問題 これは、どちらかというと生理的な問題で(笑) <h2 id="ほげ">ほげ</h2> 総括すると Markdownと、それに伴うpandocをきちんと把握して、対処すればよいのでないか、というお話です。 Markdownの記述そのもの ...

Uploadしよう!〜暫定対策編〜

大枠での方向性は決めたものの、詳細を詰めてゆく必要があります。 いろいろ試していると見えてくるものもあるもので。解釈の間違いも諸々(笑) ホトトギス 家康的に、良いEditorが出現するまで待つ、というのも、信長的に、面倒くさいからBloggerやめちゃう、というのも、答えにはならず、結果的に、秀吉的に、じゃあ、作りますか、ということに。 先生、ありがとう 先生と言えば、Google。BloggerもGoogle。Google Developers Consoleには、GoogleのService向けのAPIが準備されていて、当然、BloggerにもAPIが準備されています。Blogger API v3。 いくつかの言語が対象となっているが、当然のように、Pythonを選択。 Sample Code Python用のSampleがあり、Client IDを取得して、実行。ContentsのStatusがLIVE(公開)のものを取得して、表示するScriptになっているようであった。JSON形式で取得している。ふむふむ。 insert()関数のisDraft引数の話 現状の必須と考えている機能を実装するにあたって、2つほど悩んだ部分があった。その内の1つが、insert()関数のisDraftという引数。これは、StackEditでPublishedやStatusとなっていたもので、Contentsの状態を決める引数です。 Developers Consoleにある実行検証用のMenuには、isDraftはtrueとfalseの2値が扱えるとなっていて、つまるところ、前者がDRAFT(下書き)、後者がLIVE(公開)だろうと推測できる。 設定値 結果 true LIVE(公開) false DRAFT(下書き) ところが、実情は異なっていた。 設定値 結果 - LIVE(公開) None LIVE(公開) Integer DRAFT(下書き) String DRAFT(下書き) 試した結果だと、上表の結果となっており、Noneかそれ以外で、所望の結果を得ることが可能であった。(正しいのだろうか?) Boolean値には間違いないが、それはPythonでは...

Uploadしよう!〜試行錯誤編〜

GoogleアカウントでBloggerにログインをし、編集画面を少し触ってみた。なるほど。 StackEdit Contents DataはLocalに持ちたいな、と考えていたので、StackEditなるMarkdown形式に対応しているOnline Editorを触ってみた。 Markdownの頭に、TitleやPublishedを定義すれば、その状態が反映される!と。いいじゃん。 しかし、何度試してみてもうまくいかない。どうやら、それは、StackEditのVersionによる問題だと分かった。 Markdown内に定義をしてうまくいくのは、Ver 4。現行、推奨されているのは、Ver 5。 YAML形式 では、Ver 5で、どう行うのか?と調べてみると、MenuのProperty設定にて行うようだった。 つまるところ、Upload予定のFile毎に、設定を行うことになる模様。詳しく調べてないので、そう解釈をした(笑) Published相当は、DRAFT(下書き)か、LIVE(公開)を一律でいけそうだが、TitleやTagはFile毎になりそうなので、ヤダヤダ病が発病した。 保持したいこと そうであっても、個人的には、 MarkdownのFileはLocalに保持したい TitleやPublishedは適宜設定したい という部分が譲れない条件なので、検討を行うことにした。 Editorの選択 Atom emacs vi gedit 今は、Markdown Preview(Extension)を重宝しているので、Atomを使用中だが、Markdown自体に慣れてきたら、geditでもよいかな、と考えています。(確か、geditでもPreviewはExtensionでいけたはず) 微調整 Stack EditからUploadをしても、BloggerのEdit Screenで、微妙な調整を行うことになりそうなので、Uploadできる環境が作れれば、なんとかなるのだろうな、と。

始めます

タイトルにあるように、のんびりと始めようかと思っております。よろしくお願い致します。 タイトルは(仮) タイトルはひとまずってことで、(仮)みたいなものです。