Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

gulp.destはgulpfile.jsの位置が基点

gulp.destはgulpfile.jsの位置が基点です。
srcの場所じゃありません

実際のところ

以下のような、pugファイルをコンバートするgulpコマンドがあったとします。
gulp.destはどう書いたら良いのでしょうか?

const paths = {
  pug: ['./src/pages/**/*.pug']
};

gulp.task('pug', function (done) {
  gulp.src( paths.pug )
    .pipe( pug() )
    .pipe( gulp.dest( #{どうすべき??} ) )
    .on( 'end', done );
} );

こういう時は試してみます。
" '.' "を指定すると、以下のようにgulpfile.jsのある位置に展開されます。
ワイルドカードで指定したディレクトリ名ごと作られるわけですね。

$ tree
.
├── gulpfile.js
├── Hoge
│   └── hoge.html
├── Fuga
│   └── fuga.html

...

というわけで、'./src/pages/'というようにしてあげれば意図通りpugのある所にhtmlが吐き出されます。

参考もと

gulp-dest - npm

誤ってコミットしてしまったら、--amendで直す事ができる

履歴頼みで雑にコマンドを叩いていると、時折commit commentが誤爆する事があります。
内容は問題ないのにgit resetするのはどうも……。
そんなときは--amendをしたげると、コメントの変更が可能です。
こんな事も知らずにgit使ってたのか……という話ですが。

実際のところ

$ git commit --amend

で、直前のコミットのコメントを修正できます。
デフォだとvi系UIがでるので注意。
ESC => :wqで保存です。

ArduinoIDE環境で"multiple definition of ..."とか出ていたら、ライブラリを多重に読み込んでいる可能性

Arduino用スケッチにて"multiple definition of ..."とか出ていたら……ライブラリを多重に読み込んでいる可能性があります。
お手製ライブラリを組み込んだアプリを受け取った際に起こりがちです。
依存関係を消して、再度ライブラリを導入すると何とか成るかも。

実際のところ

上記の事がおこると、こんなエラーがでてきます。

/Users/shuzo_kino/Documents/Arduino/libraries/hoge/fuga:26: multiple definition of fuga::piyo(int)'

もしかすると、こんなエラーも同時に出てるかも

sketch/fuga.cpp.o:sketch/fuga.cpp:51: first defined here

これは自前ライブラリが競合をおこしてる事が原因と考えられます。
特に、以下のように同一ディレクトリ階層にライブラリの本体が存在した状態で
zip形式のライブラリを読んでしまうと発生してしまう様子。

$ ls 
main.ino
fuga.cpp
fuga.h
...

対策としては、一旦ZIPを抹殺した後、同階層の各ファイルも削除、その状態でZIP形式ライブラリを再読込……とするとうまくいくようです。

追記:M5stack に関して

M5stackの場合、ブッキングしていると言っておきながらカッコの閉じ忘れやタイポを直したらコンパイラが黙ることがありました。
ライブラリ解決順の問題なのかも。
であれば、他のeps32系も同様の問題をもってるかもしれません。
shuzo-kino.hateblo.jp

gulp-html2jadeを使って既存のHTMLファイルをjade/pugに転換する

既存のHTMLをjade/pugに変換する方法です。
このgulpとか言うコ、弊社のコワイ人たちが使ってるツールという激しい偏見があったので極力避けてました。
でもシカタナイネ。
いつまでもWEBブラウザ版使うわけにもいかんし……。

実際のところ

pugは新しい事もあってか、日本語……というか2バイト文字が使えません。
https://github.com/izolate/html2pug
仕方がないので、後方互換なhtml2jadeで代用します。
素のHTMLならpugの記法つかいませんしネ……。

$ npm install --save-dev html2jade
$ npm install --save-dev gulp-html2jade

で、問題のgulpファイルです。
gulpfile.jsという名前にします。

const html2pug = require('gulp-html2pug');
const gulp = require('gulp');
const html2jade = require('gulp-html2jade');
const options = {nspaces:2};

gulp.task('jade', function(){
  return gulp.src('index.html')
    .pipe(html2jade(options))
    .pipe(gulp.dest('.'));
});

これで以下のコマンドを叩けばindex.htmlがindex.jadeになって吐き出されます。

$ gulp jade

idex.jadeを入れる場合、pug-cliをぶっ込んだ状態で、
以下のコマンドを叩いて上げれば同一ディレクトリ上にindex.htmlとして展開されます。

$ pug index.jade

jadeはpugという名前になり、少し記法が変わりました

すっかり前線から離れて忘れまくっているのでメモ。

nodeJsフレンドリーなHTMLエンジンjadeはpugという名前になっています。
ソレに加え、2016年8月からpug v2として一部記法がよりスマートになりました。
また、ドキュメント化されてないメソッドやイケてない部分の削除も行われたようです。

メモ書き

導入方法と個人的によく使っていた部分について

導入

cliツールは別々に。

$ npm install -g pug
$ npm install -g pig-cli

MixInがより簡潔に

//- 旧版
mixin foo('whatever')

//- 新版
+foo('whatever')

繰り返し処理に"-"が不要に

eachやforといった繰り返し処理に"-"を付けなくともよくなりました

//- 旧
- each a in b
  = a

//- 新
each a in b
  = a

node製アプリに*NIXコマンドをぶっ込むshelljs

shelljsはnode製アプリで*NIXコマンドを利用可能な便利ライブラリです。
FirebugやYaomenといった有名ドコロで使われていると。
個人的にはSalesforce Mobile SDKでわけも分からず入れるものでしたが……調べてみると便利そうです。

実際のところ

現在いるディレクトリのファイルを一個表示刷る場合は、こんな感じ。

var shell = require('shelljs');

shell.ls()[1];
#>> '04.html'

pwdやmkdir、chmodといったコマンドが一通り実装されています。
execもあるので、実装されてないコマンドも強引に実行可能……!?

参考もと

github.com

cordovaで現在利用可能なiOSプラットフォームのリストを表示させる

cordovaは便利なので一々XCodeみたいな糞重いGUIツールを起動せずともビルドして
iOSエミュレータを起動してくれます。

$cordova emulate ios

デフォだと最新プラットフォームで起動します。
が、古い機種だとどうなるかチェックしたいときもあるでしょう。
今回はそんな時の対策です。

実際のところ

emulateコマンドの末尾に--listと付けてあげるだけ。

$ cordova emulate ios --list

...
Available iOS Simulators:
	iPhone-5, 10.0
	iPhone-5s, 10.0
	iPhone-6, 10.0
	iPhone-6-Plus, 10.0
	iPhone-6s, 10.0
	iPhone-6s-Plus, 10.0
	iPhone-7, 10.0
	iPhone-7-Plus, 10.0
	iPhone-SE, 10.0
	iPad-Retina, 10.0
	iPad-Air, 10.0
	iPad-Air-2, 10.0
	Apple-TV-1080p, tvOS 10.0
	Apple-Watch-38mm, watchOS 3.0
	Apple-Watch-42mm, watchOS 3.0
	Apple-Watch-Series-2-38mm, watchOS 3.0
	Apple-Watch-Series-2-42mm, watchOS 3.0

この結果から、コマンドをおこしてあげればいいです

$ cordova emulate ios --target="iPhone-6s, 10.0"