カテゴリー「プログラミング」の106件の記事

2018.07.28

予想外の動きに必死のパッチで対応する

台風が東からやって来るとのことで、朝から家にこもってGoogle Drive APIをダラダラ叩いていたのだが、APIのガイドに書いてある通りにやってもうまくいかず、埒が明かないモヤモヤ募る。

なにかこう達成感的なものを感じたくなったときの常とう手段って掃除か料理かあるいは段ボール工作ですよね(?)。 とっておいた段ボールのパネルで、かねてからの懸念事項を解決しよう。

スマホ視聴台2.0。 割にしっかりできました。 Dsc_3304


家族がよろこぶ ダンボール工作
pika
日本ヴォーグ社
売り上げランキング: 4,852


縦置きはあまり需要がないけど、充電しながらでも大丈夫。 Win_20180729_09_17_08_pro

横置き。最近はスマホでテレビ的なものを見る機会が多いので便利。
Win_20180729_09_26_09_pro

後ろからはこんな感じ。
Win_20180729_10_01_11_pro

と、なんとか心の平静を取り戻し、再び Drive APIに対峙して、試行錯誤の末、夕方ごろに問題解決。

一部のドキュメントに間違いがあったというオチだった。

Google Driveへファイルをアップロードするとき、既存のファイルを更新するには「PUT せよ」と書いてあるのに、実は、PATCH じゃないと動かないと。。。 確かに別ドキュメントにはPATCHだと明記されていた。

さらに「新規作成はPOSTせよ」と書いてあるけど、このREST APIではファイル名を指定できない。 結局、先に別APIでリソース情報のみのファイルを作成してから更新するという2段階が必要だった。


日中雨はほとんど降らず。しかし夜9時、ウォークに出ようとしたら突然降り出した。 東からやって来る珍しい台風は予測できない感じがある。 てことで、ほぼ運動なしの土曜日だった。

2018.07.26

「楽しい」は無尽蔵のエネルギー

「やっていて楽しい」ということが全ての原動力になるんだろうなという話。

仕事は楽しいかね?
仕事は楽しいかね?
posted with amazlet at 18.07.26
デイル ドーテン
きこ書房
売り上げランキング: 2,208

今日帰宅すると、自宅に義父が所有していた「ステッパー」という足踏み運動の器具があった。 家内によれば、次男が使いたくなったらしく、急遽実家からお取り寄せ。 次男に聞けば今日は200回やったらしい。運動に目覚めたのかも? 学校では、ほぼ毎朝ランニングをやっていたので、夏休みに入ってカラダを動かしたくなったのかも。

次男の趣味は、スーパーマリオなどのゲームの架空のリメイク版を脳内で作り上げること。 まるでゲームの説明本みたいに楽しそうに説明してくれる。 障害によるものだと思うが、繰り返しが多くて、さらに自分にゲームの知識がないから理解できないことも多いのだけど、やっぱり楽しそうに話す次男を見ていると、こちらも楽しい。

ゲーム画面の画像や、設定やストーリーのテキストも作成しているようで、今日はじめてざっと見せてもらった。 画像はオリジナルの画像をコピーしたり改変したりしているらしい。 そしてテキストはちょっと考えられないぐらいの分量があったみたい。

小学校卒業時には「プログラマーになる」と書いていたけど、今はあまり興味がないようだ。 実際に描いた画像などを脳内で動かしているからプログラミングの必要がないのだろうと思う。

次男の得意技をまねしてマリオフォント的に書いてみたが、、、
Dsc_3303

案の定、ダメ出しもらった。「これは正確にはマリオフォントではない。パソコンで表示して参考にすれば?」だって。


朝夕ちょっと涼しい気がした。気のせいかもしれないけど。 夜7時から8時にかけて、ゲリラ豪雨的な雨雲が北から南へ移動していったが、ギリギリ降らなかったみたい。

2018.07.15

酷暑ラン他

先日からリファクタリングしていたBNFモジュールをようやくPublish。増築改築でカオスになった「だらしのない実装」を解析しながら少しずつまともにしていく残念な作業。さらにユニットテストのカバレッジが低くて独立元のモジュールで動作確認。

水分補給を欠かさず、お昼ご飯をしっかり食べて、午後2時から6キロラン。気温も高いが陽射しに直接体力を奪われる感。汗がひどい。

Dsc_3188

気象庁の統計では、明石の最高気温は30.7℃。もうちょっと高いと感じていたがそんなもんか。 他の場所では38度を超えていたところがあったそうで、風が吹けば余計に暑いってことですね。 水冷方式を取るしかないのか。

夕方からGoogle Drive APIと戯れる。こちらも仕様を調べつつ、思いつくままコードを書いているから、「そこじゃないだろう」な箇所が散見。ホビーとはいえキチンと考えて進めたい。

基礎から学ぶ Vue.js
基礎から学ぶ Vue.js
posted with amazlet at 18.07.16
mio
シーアンドアール研究所 (2018-05-29)
売り上げランキング: 1,469

夜、ツールの英語放送を見ながら筋トレ2セット。石畳の連続で落車多すぎ。痛々しい。

2018.07.08

Pythonで人工生命(ALife)を実装し理論を学べるオライリー本(7月28日発売)

作って動かすALife ―実装を通した人工生命モデル理論入門
岡 瑞起 池上 高志 ドミニク・チェン 青木 竜太 丸山 典宏
オライリージャパン
売り上げランキング: 18,697

その昔(1998年ごろだと思う)、Tierra(ティエラ)っていうコンピュータで動く人工生命に興味を持って調べていたことがあった。

当時、シンプルな幾何学図形で表された人工生命が、進化を繰り返しながら繁栄したり衰退したりという様を観察できるスクリーンセーバーがあって、夜中にぼーっと眺めていたのだけど、そういったソフトウェアの技術的なことを調べていくと自然にティエラに行きついた。

ティエラは、仮想マシンの中でDNAの複製をシミュレートしているようなもの。 この仮想DNAは仮想マシンの命令コードを使って自己複製するように組まれたプログラムで、限られたメモリ空間内に存在する。生命はスレッドであり一度実行すると別のメモリ領域へプログラムを複製し、新たなスレッドを開始する。メモリ内の情報は一定の確率でランダムにビットを反転するようになっている。また複製時のコピーでも一定の確率でミスが発生する。これらは紫外線によるDNAの破壊や突然変異のシミュレーション。 ただし、ビジュアルに観察するのが難しくて、プログラムの入手が困難だったため、自分で動かしてみることはなかったが、その機構には感心した。

※ ちなみに、自分はこれまで20年間「ティアラ」と読んでいたので違和感がある。ティエラはスペイン語で地球という意味だそうだ。


てなことを、7月2528日発売(日付間違えてた)の「作って動かすALife ―実装を通した人工生命モデル理論入門」を知って思い出した。ティエラに触れられているかどうかも知らないが。 Pythonで実装するようだけど、あまり言語に依存していなければいいな。

今のところ人工生命は実用的な何かというわけではないと思うが、将来的にはBotやAIと融合していくようにも思う。

なにより当時のティエラへの関心が、現在の知識や能力に、つながっているというのは確かなこと。 きっかけはどこにでも転がっていて、興味を持って関わってみれば、きっと何かの糧になるのだろう。

作って動かすALife ―実装を通した人工生命モデル理論入門
岡 瑞起 池上 高志 ドミニク・チェン 青木 竜太 丸山 典宏
オライリージャパン
売り上げランキング: 17,459

2018.07.04

JavaScript向けに字句解析・構文解析を支援するモジュールを公開しました

夕方にはまさかの青空。
Dsc_3116

未明からとてつもない大雨で。風も強い。南東からの風っぽい。

次男が乗る通学バスが遅れていると連絡あって、いつも通り家を出たので心配だったが、連絡を見た時点でタイムアウトだった。結果的に遅れただけで何の問題もなかったようでヨカッタ。

npm lex-bnf

字句解析、構文解析を支援するNodeモジュール lex-bnf をPublish。

元々、AWSをコマンドラインから、ちょっとだけ便利に使おうとしているモジュール aws-node-util で、DynamoDBをSQLチックな構文で扱うために作り込んだモノ。

他のモジュールでも使いたいケースが出てきたので独立させた。 使い方は、大変ややこしくて(笑)、説明なしでは無理だと思うのですが、おいおいドキュメントを追加しますかね(時期未定)。


夜に3キロウォーキング。部屋より家の外のほうが涼しいという残念な季節。扇風機発掘したので大汗かきながら引っ張り出した。

2018.06.21

コマンドラインからエクセルファイルを操作するコマンド作った(npm exl@0.1.0)

コマンドラインからエクセルファイル(*.xlsx)を操作するコマンドを作った。 「ExcelJsを使い倒せ」って神の啓示を受けたので(ウソ)。

とはいえ、できたてホヤホヤ v0.1.0。まだ貧弱です:

  • 単一セルしか扱えない。
  • 設定できる値の型は文字列と数字だけ。
  • Node.js 8.10 でないと動かないかもしれない。
  • Git For Windowsのbashからしか動かしていないので・・・。

検索機能と更新機能をうまく組み合わせて実装できれば、それなりに便利なものになりそうな予感はしてる。

npmからグローバルにインストールすれば、exlコマンドが使えます。


$ npm install --global exl # グロ-バルインストール
(略)\bin\exl -> (略)\bin\node_modules\exl\bin\exl.js
+ exl@0.1.0
added 91 packages in 27.863s

$ exl #パラメータ無しでUsage表示
Usage: exl <operating-address> [<new-value> [<value-type>]]

# To echo a value at a cell:
$ exl [foo.xlsx]Sheet1!A1

# To set a string to a cell:
$ exl [foo.xlsx]Sheet1!A1 'Hello Excel'

# To set a number:
$ exl [foo.xlsx]Sheet1!A1 '1234' number

ネ申Excel まとめて撃退! 7つの改善術
中野 明 岡本 ゆかり
日経BP社
売り上げランキング: 203,417

これとは別に、ExcelJsで計算式が更新されない件。 Google Drive の Spread でも完全対応しているので、クラウドのAPI使って何とかならんのかなーとか。


よく晴れていたので夕方ラン。走り始めに右のふくらはぎが突っ張る感じ。丁寧に着地して、どうにか回復。 6分2秒/kmでまあまあだった。暑かった。

2018.06.19

ファクトリをnewしてた

JavaScriptで不可解な現象に困っていたのだが、最終的に「ファクトリ関数をnewで呼び出していた」と発見。


/**
 * MyClassのコンストラクタ
 * @constructor
 */
function MyClass() {
    ・
    ・
    ・
}

/**
 * MyClassのファクトリ。
 * @returns {MyClass} インスタンスを返す。
 */
MyClass.factory = function() {
    ・
    ・
    ・
    return new MyClass();
};


function foo() {
    let myClass = new MyClass.factory(); // ← ここ
    ・
    ・
    ・
}

最初にこう書いてしまったのもダメだけど、なかなか発見できなかったのも情けない。

eslintで JsDocのコメントをチェックしてくれるのだから、警告出してくれたらいいのにね。 @constructor のない function は new できないとか、ないのかな。

ジブンがしっかりするのも必要だけど。


スラスラ読める JavaScriptふりがなプログラミング
インプレス (2018-06-22)
売り上げランキング: 1,530

2018.06.15

npm ExcelJsが計算式の結果を自動更新しない理由

昨日検証したExcelJsで、計算式が設定されてるセルの値が自動的に更新されない件について、GitHubのIssueを検索してみると、3年ほど前に、ちょっとした会話があって「ああなるほどな」と納得した。

結論としては「とりあえず自分で再計算して更新しましょう」ってことですよ。

このやり取りは以下のような感じです(抄訳)。 この後にも続いているけど、本論からズレて「Excelでこうすりゃいいよ」みたいなことなので省略。 Closeされてないのが少し気にはなりますが。

@morgante

既存のXLSファイルの中を読み込んで値を更新したら、計算式の結果が新しくなっててほしいのだけど、ドキュメントではよくわからん。

例えば以下のシートがある場合:

A1=3
A2=4
A3=7
A4=sum(A1:A3)

A3を8にしたら、A4の値は15になってほしいのね。

@guyonroche
worksheet.getCell('A3').value = 8;

// A4には計算式の結果の値があると仮定して
worksheet.getCell('A4').value.result = 15;
@boloeng

@guyonroche ライブラリでは計算式を計算しないけど、元のファイルから取り出されている。と理解してるけど合ってる?

@guyonroche

そう、ライブラリがExcelを置き換えるのではないから結果を計算しません。少なくとも今のところはね。

これ読んで「えーっ不親切やなー」って思った人は私ですが、よくよく考えると、

再計算は大変なんです、その理由・・・

まず、読み込んだワークブックには、「計算式が、どのセルを参照しているか?」という情報がない。

だから、読み込み時に全セルを総なめして「セルの参照マップ」を作っておかねばならなくて、セルが更新されたら、マップを逆にたどって影響を受けるセルを更新する必要があるのですが、計算式は単なるテキスト情報なので構文解析せなアカン。

Excelの膨大な数のワークシート関数も実装しなけりゃ意味がない。 デカいファイルだと開くだけでも負荷高そうです。 不可能じゃないけど、やる価値ある?って話ですね。

再計算は、こういう理由で実装できないという判断でしょう。 まったく妥当な判断だ。

そもそも「知ってるでしょ?」って話でもある。

そして、そもそもですね、特定のセルを更新し、そこを参照している特定の計算式のセルを更新したいということなら、そのワークブックの仕様をよく知っているということですよね。 だから計算できるでしょ?ってことでもあるのですね。

完全に理解した。

Excel 最強の教科書[完全版]――すぐに使えて、一生役立つ「成果を生み出す」超エクセル仕事術


朝まさかのパラパラ雨。慌ててカッパ着てたいして濡れずに終了。 昼間に少し降ってたようだが、夕方には上がってた。 台風の影響なのか、北西からの風が強くて幹線道路途中で海沿いへ迂回して追い風快適。

三日連続の夕方ランは、さすがに速度が乗らない。3.8キロ、6分/km。このペースにしては消耗がひどい。

あさって日曜日は魚住中尾の住吉神社で「あじさい祭り」。
Dsc_2886

2018.06.14

JavaScriptからエクセルファイルを扱える ExcelJs

JavaScriptからエクセルファイルを扱えるモジュール ExcelJs が使えそう。

この手のモジュールでよくある話が、罫線や色、セルの大きさなどが出力したときに失われてしまうというもの。 しかもたいていREADMEなどに、そのことが書かれてなくて、やってみてから使えないよ~ってことがたくさんあった。悩ましかった。

本日見つけた ExcelJs はXLSXファイルを読み込んでから別のファイルに書き出してもスタイル情報が保存されてたた(完全かどうかは未確認)。

固定のテンプレートにデータを吐き出すような使い方を想定しているので、これで十分なんだよね。

ただし、使ってみて気になった点は以下3つ

  1. 結合セルの右側罫線が失われていたが、深く追及していない。
  2. 既存シートを複製したり、他のワークブックからコピーしてきたりする操作が、簡単にではできなかった。たとえば、getWorksheetの戻り値をaddWorksheetにそのまま与えられないようで、なんとなく対称性が崩れているようでスッキリしない。
  3. 更新したセルを計算式で参照しているセルの値が自動で更新されていなかった。

これらにも正式な対処方法があるかもだけど、今回は別手段でまるっと回避するので問題なし。


夕方ランは毎度おなじみ3.8キロ。無風で湿度が極度に高い曇り空。ペースは5分21秒/㎞と絶好調。 体重がどんどん減っているが、なんとか快調。

2018.06.08

DOM要素に書いた計算式の結果を表示するJavaScript

起床時のBMIがMath.round( 55 / (1.6 * 1.6 ) * 100) / 100だった。 プチ飢餓状態ヤバいヤバい。朝から食べ物の事しか考えられない。 しかも最近、朝ご飯を食べてないので、おうちに食べ物全くない。 仕方がないから牛乳飲んだら、腹ピーピー。参った。

しかし「痩せ気味」とも言えない値だから、徐々に慣れていけるのだろうけど、「気が付けば体重が減っている」というこの状況に、ココロとカラダが慣れてない。

Kentai NEWウェイトゲイン アドバンス ミルクチョコ 1kg
健康体力研究所
売り上げランキング: 1,181

ところで、テキスト書いてるときに計算式を計算してほしい時があるんだけど、ちょっと考えたら JavaScript には eval という魔法があるのを思い出したので、やってみた(が、モバイルブラウザで動作してないと 指摘されたのでFunctionでやりなおし+モバイルブラウザではSCRIPTタグにdeferとかasyncとかの属性を付けて非同期で読み込まないとダメみたい)。

上のBMIはこれで計算してる。

Array.from(document.querySelectorAll(".calc")).forEach(e=>{
    let expr = e.innerHTML;
    e.setAttribute("title", expr);
    e.innerHTML =
        (Function('"use strict"; return (' + expr + ");")());
});

HTMLのソースはこうなってる。

<p>起床時のBMIが<span class="calc">
Math.round( [体重(kg)] / ([身長(m)] * [身長(m)] ) * 100) / 100
</span>だった。</p>

多少タイムラグがあるのでリロードすると式が見えたりしてちょっと面白い。最初はCSSで非表示にしておいて演算後に表示するとかすれば良いかも。式を表示するのもありかもね。もっと発展させて方程式を書いてグラフ書くとかも可能っぽいな。夢が広がる。


帰宅時豪雨。バケツが何個かひっくり返っているくらい。しかしカッパ着てから出発すると雨あがる。

雨あがる
雨あがる
posted with amazlet at 18.06.08
(2015-11-15)
売り上げランキング: 177,792

より以前の記事一覧

2018年8月
      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  
フォト

Google AdSense

銀の弾丸

無料ブログはココログ

他のアカウント