2015年3月4日水曜日

CASL II のコメントに関する仕様がだいぶきもい

CASLの仕様 
オペランドありの場合に 空白以下にコメントが書ける。

 すなわち ; は仕様上は要らない。

 でもこれってきもい。

 コメントはやっぱり ; の後に書くべきだ。

 何がきもいって r1, r2形式のオペランドだとあまり問題にならないのだけど
 r, adr, x 形式のオペランドだと相当に気持ち悪い。
[, x] 部分は省略可能のため


 LD GR0, LABEL ,GR1 はどう解釈するべきなのか全然わからない。
 LD GR0, LABEL ,GR0 はどうだろう。これはイリーガルなオペランドとして解釈されるべきなのか。 


自分としては オペランドの間に空白は置けないと定義してもらうかコメントはセミコロンの後に書くかどっちかじゃないと すごくいろいろ萎える。

 実装によっては オペランド間の 空白を許容しないで、空白以下はコメントとして解釈しているものもある。

 でも普通の英文は , の後には空白は置くはずで、オペランド間の空白を悪とみなすより セミコロンの無いコメントの方を邪悪とするほうが正当な気がする。

 空白登場前の, は後ろに続く空白を読み飛ばすという仕様でもいいかもしれない。
 自分としては仕様が気に入らないので、 ここはあえて仕様不守でオペランド間の空白は許容するが、 セミコロン前にコメントは書いてはいけないという独自仕様にしようかなと思う。
この変更で不幸になる人は居ないと思う。

 ていうかこの部分は誤植なのではないだろうかという疑惑もある。

 オペランドなしの場合空白以下コメントとみなしても全然かまわないので、本来の意図はそっちじゃないのかって気がしている。

 オペランドありの場合に空白以下にコメントが書ける仕様というのは混乱するだけでひとつもいいことないのではなかろうか。

とりあえず COMET II は書いた

動くかどうかはよくわからないけど、とりあえずはモノは書いたCOMET II のシミュレータ
プロパティとして memory と register をもっているcpu オブジェクトに execute メソッド書いて、
PRの位置の指すメモリを switch(op_code){} 的な挙動をするモノ。

500行位。

まだ文法チェックも済んでなくて。
全然デバッグする気がしないのは MEMORY に バイナリを書き込まないといけなくてそれを
ハンドアセンブルで用意するの面倒だなと。

というかテストが面倒なんだけど。

とりあえずもしかしたらデバッグが容易になるかもしれないので テストする前に

CASL IIの方の仕様を漁って全体像を考え中。

2015年3月3日火曜日

CASL II のPUSHの挙動

CASL II COMET II PUSHの挙動がすごく変態的。

実効アドレスをプッシュするという意味の分からない感じ。

GR1 ~ GR7を PUSH するのはそれでも
PUSH 0,GR1
とかでできるのだが…

GR0は…指標レジスタではないため実効アドレスに喰わす事は出来ない。

命令一つで退避できない PUSHってどうだろう。

CASL II COMET II ではふつうのマルチタスクの勉強をしようとすると、
どうしても2,3個は仕様を追加しないといけないと思う。
StackPointerを設定する方法と割り込み。

CASL IIIを作る予定があれば
LDSP r
みたいなスタックにロードできる命令の追加と、割り込み時の動作の明確化が欲しいかな。

まあ、たぶん一生情報処理系試験は受けないだろうけど。

COMET II シフト関係

COMET IIで遊んでるけど
シフト演算に関しては実効アドレス指定しかないのが可笑しいなあ。

今更、よく考えるとCOMET IIには即値を指定するという概念がないのだよね。

それににしても16しか最大シフトできないので、4ビットあれば、情報としては十分な中で、
16ビットのアドレスを2語命令で指定するヘンテコさが
何ともいえない。

条件分岐と配列アクセスのメモ

<html><head>
<meta charset="UTF-8">

</head>
<body>

<script>
var Registers = function(){
    this.gr = new Uint16Array(8);
    this.gr[0]=0;
    this.gr[1]=0;
    this.gr[2]=0;
    this.gr[3]=0;
    this.gr[4]=0;
    this.gr[5]=0;
    this.gr[6]=0;
    this.gr[7]=0;
}
var Cpu = function(){
 this.regs = new Registers(); 
 this._x = [[0],this.regs.gr,this.regs.gr,this.regs.gr,this.regs.gr,this.regs.gr,this.regs.gr,this.regs.gr];
}
var a;
var cpu = new Cpu();
var i,j;
var startTime = new Date();
for (i = 0; i< 1000000 ;i++){
  for (j = 0; j< 8; j++){
    a = cpu._x[j][j];
  }
}

console.log(new Date() - startTime +"msec");
startTime = new Date();
for (i = 0; i< 1000000 ;i++){
  for (j = 0; j< 8; j++){
    a = j ===0 ? 0: cpu.regs.gr[j];
  }
}

console.log(new Date() - startTime +"msec");
</script> 
</body>
</html>
3項演算子のコストが気になって、無理やり配列のアクセスに書き換えてみた結果、ちっとも速くならなかった。
timer.html:33 108msec
timer.html:41 76msec
3項演算子以外と速いみたい。


ちなみにswitch case 文に書き換えると さらに5%くらい早くなるみたい。
startTime = new Date();
for (i = 0; i< 1000000 ;i++){
  for (j = 0; j< 8; j++){
    switch(j){
      case 0:
        a= 0;
        break;
      default:
        a= cpu.regs.gr[j];
    }
  }
}

console.log(new Date() - startTime +"msec");
timer.html:33 120msec
timer.html:41 76msec
timer.html:56 72msec


switch が一番はやい。
意外だな。


2015年3月1日日曜日

Ntt X-Store で Superfish バックドア付き製品が激安だぞ


Lenovoが大コケしている。

どうもバックドアバンドル製品を出荷してしまっていたらしい。

しかし、そのおかげで、PCがめちゃくちゃ安い。
29,800円 (w
この製品はバックドアバンドル製品確定なわけですが、

インテル® Celeron® プロセッサー N2830 プロセッサー
動作周波数 2.16GHz(インテル® バースト・テクノロジー対応、バースト周波数:2.41GHz)

はよっぽどがんばらないと不満は感じないだろう
メモリも4GB あるし、DVD-Multi Driveもついてて29800円はありえない価格だろうと思う。
バックドアは必ず消さないといけなくて消し方がさっと理解できる人であればいいかもしれない。

バックドアバンドルしてないかもしれないlenovo 製品も概ね激安になっている Core i5 製品が4万円以下(w

でもなあ、こういう事をやる会社は何度だってやると思うし、たまたま今回は問題が表面化しただけで、表面化しなかった問題もきっとあると疑ってしまう。

そもそも、Lenovoの広報はあたかもお客様の為に入れたソフトウェアに不具合があって、自分たちも被害者みたいなツラをしているんだけど。全然こいつら羊じゃない。真っ黒な意図しか感じない。

本当のところはハードを売る以外に金を儲けたい→ブラウザに広告出して広告収入得たほうが儲かるんじゃね?

ってところがスタートなわけで、良心なんて入り込む余地すら無いと思ってるし、まともな会社は今後一切この会社の製品を買うべきじゃないと思うね。

自分もこれ欲しいけど、superfish を消したとしてもやっぱり気持ち悪いよね。
Windowsを再インストールすると、必要なバンドルソフトも消えちゃいそうだし。

愛情を持って所有できる製品ではないという点で終わってるわけだけど、もともとPCにもメーカーにも愛があまりない自分にはちょっと心揺らぐ製品ではある。っていうか人柱で買おうかなあ。

2015年2月26日木曜日

どうでもいいナンプレ書いた


ナンプレプログラム書いた
http://sudoku.btn.link

上のパズルは結果によると結構難しいようなのだけどどうなんだろう。

本当に重解がないのかどうなのか。保証しきれないのも。

んーむ。

2015年2月21日土曜日

SUGIZO さんのHPがみれない

SUGIZOさんのTopページ

どうもこれバグっていやしないかい?

二つ問題があって jquery のロードに失敗している。
ホストは https で指定して欲しい。

もうひとつはコンテンツをwrap している #background の
cssのdisplay 属性がnone に設定されている。

top.html #background {
...
display: none;
...
}

jQuery で何かをして見られるようになるページなのかもしれないけど、
そうだとすると
jQuery のロードに失敗したら何も無いページが表示されるオチらしい。

誰か直してあげてください。

2015年2月20日金曜日

ビットの数を数える方法

数字の集合を1ビットで表現していて、
ビットの数を数える必要があって、最大10やそこらくらいしかないので
ループを回せば必ず答えが出るのだけど、

なんかループがだるいなあと思って、検索したら出てきたアルゴリズム

ビットを数える・探すアルゴリズム[外部リンク]

これ面白すぎるなあ4番以降は完全に謎だ。


2015年2月17日火曜日

YUI Testを読む

休むつもりだったけどYUI Test を読み中。

ブラウザのデバッグ環境が思ったより素晴らしいんだけど、
やっぱりちゃんとテストかけた方がいいよねって事で。

http://yuilibrary.com/yui/docs/test/

まだ、プログラム書き足りないのだ。

やりきった感じが無い。

いやっていうほど書いてみたいのだ。

今日は電脳から外れる事にする

楽しいからやってるんだけどずーっとパソコンでやりたいことを一個ずつ終わらせていってるんだけど、今日は頭が痛すぎてダメだ。寝てても不意に変数やら関数やらがでてきてやばいので今日は一日オフにする。今はjavascriptに慣れるということをやっててトランプゲーム的なもの作ったりしていた。トランプゲームはもともとコレが表現したいとかいうものでもない。表現するためにjavascriptが要るし、やってみるとそれなりに楽しいと思ったからやってた。そろそろやりたい事にチャレンジしよう。







2015年2月13日金曜日

Javascript Linuxがあるそうな

javascript はとことん自由で面白い。
シバリがあんまりない。でも、よくよく考えると

while ((c = getchar())>=0){putchar();}

的なものってjavascript だとかなり表現が難しいように思う。  setIntervalも、処理が終わった時点でカウントしてるみたいだし。やっぱりやろうとするとCPUからエミュレートするしかないような。

Javascript で動く linux というものをどこかで聞いたのだけど
http://getnews.jp/archives/437194

やっぱりPCをエミュレートしているようなので、もうそうなっちゃうとJavascript?って感じもする。

でも面白いよね。

2015年2月8日日曜日

HTML5の本

なんかホームページとかで遊んでて思うのは、
HTML5関係の本って微妙だなあってことです。

確かにCanvas video とか新要素とかは大事だとおもうんだけど、
HTML5勉強した事もない私が言うことでもないんですが
svgサポート socket.io ローカルDBサポートの方もかなり大事で、
そこに対しての説明がないままにHTML5の本ですって、
「そりゃあ何か違うんじゃないか」って思うことないですか?

フロントエンドの中でも最上層に注目した本というか、
本質を見落としそうな気が。

↓まあこの中から立ち読みでちゃんとその辺り書いてある本を探してみようかなと。

HTML5でAmazonを検索

2015年2月5日木曜日

Javascript の継承が面倒だなあ

Javascript でやっぱり Ajax とか、視覚化 とかで遊んでる。
で、単純なツリー状のオブジェクトを作ってNetworkの視覚化をしてみて遊んでるんだけど、一番上の階層と真ん中の層と下の層でやる事が少しだけ変わるので オブジェクトを継承したりしたいなあと思ったんだけど、どうもJavascript の継承はつかいにくいったらない。


そして super を呼び出す方法が気持ちわるい 。結構な量コピペコードになってる。


CoffeeScriptの最大の利点は継承が綺麗に書けるという事なんだろうね。


$() のなかにちょろっとコード書くくらいだとメリットが見えないが、継承とかつかいたくなったら次回からCoffeeScript使おう。


あと ANS Forth のドキュメントを少しだけ読んだ。
a-adr c-adr の説明がどっかにないかなあ。

javascriptのreplaceの正規表現:複数行の先頭からマッチする部分までを消す方法(2)終了

ぶはあ。 解決。 っていうかドット改行マッチしないのか。
. 
(小数点) 改行文字以外のどの 1 文字にもマッチします。

例えば /.n/ は "nay, an apple is on the tree" の 'an' や 'on' にはマッチしますが、'nay' にはマッチしません。
まずは、改行をあらかじめリプレースするか、 []の中でドットとか\sとか使えたんだっけ? (.|\s)* とかするとマッチパターンが作成されるのか激しく遅いためこれは却下だろう。 (?:.|\s)*でも同じように文法上エラーはないけどどうしようもないスピードだ。 改行をリプレースするか、 あまり長いバッファを取り込まないように、multiline オプションを指定して、1行ずつ削除していく方がいいかもしれないなあ。

javascriptのreplaceの正規表現:複数行の先頭からマッチする部分までを消す方法(1)

HTMLで先頭からDOCTYPE まで削除しようとして、

html=html.replace(/^.*DOCTYPE/,"");

とかいてみたけど、複数行にわたる場合うまく消えてくれない。

なんだろう?
調査中。Chrome使用中

2015年2月4日水曜日

WeBrick と wget でブログカスタマイズ簡易Web環境構築の話 たった3行でウェブサーバ

ちょっとブログのカスタマイズで遊び中。

とはいっても、Blogger はキツイので、

seesaa だけど。

今遊んでるのは、seesaa blog上で自分の書いた記事をajax で取れるか実験している。

自分が自分を読み込むヘンテコな構造だが、ブログ上禁止事項ではないと思う。
他人の記事を読み込むだけのようなページは禁止だけど、それほど負荷を上げないように工夫すれば、そうすぐに追い出されることは無いかな。

追い出されたとしても大したデメリットも無いんだけど。

で、できる、できないでいうと、もちろんできるのだけど、ブラウザというやつは、違うドメインのページをAjaxで取る事は出来ないようにできているらしく、seesaaからseesaへの転送はできるのだけど、seesaaから自分のデスクトップへの転送ができないなあと。

そうなると、自分のPC上でデバッグすることができずにウーンと考えてしまった。

どうにか自分のPCでseesaaをエミュレートすることができればいいなあと。

こういうときもやっぱりlinux は便利ですね。

wget --recursive http://xn--6ck6cx95i206d.seesaa.net/

cd xn--6ck6cx95i206d.seesaa.net/

ruby -run -e httpd -- -p 8080 .

である程度デバッグできそう。

いい加減な説明をすると1行目で自分のサイトのミラー(だいたいですけどね)
を作って、2行目でディレクトリ変更で
3行目でhttpサーバを立ち上げている。

ブラウザからアクセスするときは
http://localhost:8080/
でアクセスできます。

あとはindex.html をいじればいいかなと。

ああなんでShiftJISなんだ…。


2015年2月1日日曜日

seesaa のブログブロック は結構でっかいカタマリで置換されるみたいで多言語用には向いてないといえる

<% content_main %>がごっそり記事に置き換わる感じ。

そうなってくると、もう日付の表記とかはseesaaが勝手につけてくるので

2015年02月01日みたいな表記を外国風にかっこよくしたいと思ってもDOMらないと無理ぽい

2015年1月31日土曜日

VIM ラインナンバー入れつつ、\1とかも見たい

いまSakura BlogのHTML編集で遊んでるけど
このHTML 何だか不思議な言語で書かれており


<% if %>
<% loop %>とか制御構造持っていて
<% /if %>
<% /loop %>とかで閉じる仕組み。


対応する /if がインデントされてなくてつらいので


<% if
<% loop


の前に


<!--{-->


を入れて


<% /if
<% /loop


の前に<!--}-->
を入れた。


こうすると{のところで%を押すと対応するIFに飛べて便利だ。


そこまではよかったのだけど
<!--のあとに Linenumber表示させたい。


%s/<!--\([{}]\)-->/\="<!--".\1.line(".")."-->"    


とかダメみたいなんだよね \1 が使えないみたい。

2015年1月29日木曜日

erb が古いのか バグ を踏んでるのかな?

JSON 出力のために erb で書いてたダミーデータに日本語書くと ASCIIから UTF-8に変換するのに失敗したみたいなメッセージでエラーになってしまう。

何でかよくわからないけどこの部分に関してはRuby でいいので erb やめぽ

p "あいうえお".encoding が ASCIIになる erb

ランダム日付生成 のついでに なんかすごいブログ発見


登工堂日記





という記事でたどりついたんだけど。

要求はコピペでいけそう大変ありがたい。

で、このページのレイアウトがすごい。

決して、教科書にはならないが、元はbloggerのはずなのに
もう全くと言っていいほど原型をとどめてないのが面白いよね。

サーバの安定度はbloggerという利点を活かしながらも
シバリから抜ける技術というか。
どこまでがBloggerの意図してた部分なんだろう。

  • 更新大変そうだけどどうやってんだろうか
  • Bloggerから怒られたりしないのか
  • Blogger側の出力フォーマットが変わることはないんだろうか
とか気になるなあ。

このあたりが元かなあ。

http://blog.yjl.im/2013/01/getting-rid-of-blogger-css-and.html#39a6-page

ただ、まあ自分としては少しは構成は変えたい要望はあるものの、
bloggerでホストしなくちゃいけないほどアクセスが集中することも無いし、150円/月でレンタルサバ借りれる現状を顧みるに、この辺に手を出すのは強力カスタマイズの面白さに気づいてからでいいかなあという気がしてる。



2015年1月28日水曜日

ダミーデータのJSONを書くときJSONをエラーなしで書くのは難しい時にerbを使ってみたらいいんだねたぶんって話

JSONで格納するダミーデータを作成するのに、直打ちで、エラーのないJSONを書くのは天才でも無理だろう。 

そしてJSON内にコメントかけない事は案外つらい。シングルクオーテーションもはじくしさ。
必要なフィールドが無いとかチェックする仕組みを作ろうと思っても
そんなチェックの仕組み作れるわけもないのだし。

 じゃあ、erbに出力させればいいんじゃねって話。あたり前なんだろうけど全く知らない世界だった。

dummy.json.erb

<% require 'json' 
h ={ :title => "モーモールルギャバンが復活するよ",
  :description=>"ユキちゃんインナーにエナジーが向かうとやばい",
  #...あとテキトー
}
%>

<%= JSON.generate(h) %>
<%= #コメントも書きたい放題やっほい。シングルクオーテーションでもおっけい! %>


で、とりあえず、ランダムエロ?テキストジェネレータを探している心の底から救いようのない俺。

あとCPUが遅すぎるためデスクトップ環境がないんだけど Virtualbox VM上で
コマンドラインからさっと middleman らのリターンを確認するには
wget を使うとまあ、エラーがないかどうかくらいは確認できる。
エラー出力は捨ててるけど、空だとNGでいっかな。

#!/usr/bin/sh

wget -O - 0.0.0.0:4567/$1 2>/dev/null

みたいなスクリプトを$HOME/bin に置いておくといいのではないか。
w3m を使う方法もあるけど。

おしっこ行きたい

html の タグをひたすら印刷する sed

sed おもしろいなあ、

とりあえずHTMLタグのスペースと属性を取り除いたものをホールドスペースにひたすら突っ込む
のを書いた。入力がなくなったらホールドスペースを印刷する仕組み

cat hoge.html |tr "
" " "|sed -f ckbt.sed

さすがに各行読みながら実行はめんどいので
みたいに最初に改行をスペースに変換する。

/^>/{
  b err
}
/^[^><]\+/{
  s/^[^><]\+/\n/
  D
}
/^$/{
  x
  #---(2)---
  q
}
/^<\/\?[^\/><[:space:]]\+\/\?>/{
  H
  x
  s/\n\(<\/\?[^\/><[:space:]]\+\/\?>\)[^\n]*$/\n\1/
  #---(1)---
  x
  s/^<\/\?[^\/><[:space:]]\+\/\?>/\n/
  D
}
  t clear_t
:clear_t
  #remove spaces in the tag
  #and I don't care attributes. remove them as well
  s/^\(<\/\?\)[[:space:]]*\([^\/><[:space:]]\+\)[[:space:]]*[^>]*\(\/\?>\)/\n\1\
2\3/
  t ok
  b err
:ok
  D
:err
  s/^/ERROR/
  p
  d
  q


このまま実行するとひたすら属性を抜いたTagをひたすら印刷する。

あとはHOLDスペースに突っ込んだ後で、スタックトップでオープンとクローズが対応しているタグを消していく s/ コマンドを書くこと #---(1)---部分

 #---(2)--- で検査結果を印刷するのを書けばでバランスが取れているかどうかは判別可能っぽい

sed はかなりパズルおもしろいけど、この辺でやめとく。

ところであたりまえではあるんだけど
sed のみで理論的には ある程度の計算はできると思うんです。
もちろん コマンドライン引数とかはなしですけど。

そういう事をひたすら追求するホームページとか作ってみたいな。

例えばさ 521 * 5 とか入力すると、
521個の'o'の連結 * 5個の o の連結に書き換える事は可能で
oooo......(略)....oooo*ooooo
みたいには書き換える事が可能でそれを
どうにかsコマンドを使って2605個のoに書き換える事って可能だと思う。
さらにそれを2605という数に置き換えて表示することってできると思うのね

2015年1月27日火曜日

sed は tフラグをなかなか忘れない。

sed は tフラグをなかなか忘れない。

sed でまた課題を考えた 完全に車輪を2度の話ですけど

課題:

前提~
今 ファイルの中に記事としてテキストを格納する。そのテキストは結合され将来HTMLページの一部を構成する可能性があるという。そういう場合そのテキスト中にタグを入れると囲われたHTMLの構成を破壊してしまう可能性が高い。

一番簡単なのは、タグに使用される<>を &lt; &gt;に全部変換してしまうのが安易でもっとも安全だが、一部の文字をハイライトしたり、ルビを振ったり、取り消し線で消したり、テーブルを含めたりといったことまでは制限したくないため一部のタグを許可したいと考えている。

問題~
そこで、タグがすべてバランスしているかチェックし、バランスされていない場合エラーメッセージを出すプログラムをsedで作成せよ。今回はIMGタグ INPUTなど クローズされていなくても問題がないタグについては考慮しない。


っていうのはどうだろう。おいらの頭脳ではもうこれは無理ってかすごく嫌ーなんでですけど、課題としてはおもしろいことはおもしろいと思いますよ。

めちゃ頭痛いですけど。

たぶん、プログラミング言語処理系に詳しくないふつうのレベルの大学生では解けないと思う。
申し訳ないがロザンの宇治原でも解けないと思う。

脳を微かにかすって消えた

プッシュダウンオートマトン。


あれ?俺農業大学なのでやったわけない。


俺は何も覚えちゃいない。


記事とはいったい何なのか

言うまでもなく記事はページを構成する要素だけど、


記事はPure な HTML でいいのかというとなんか違うなあと。


記事を Partial として作るのはちょっとダメかなあと思う。


記事はJSON的なオブジェクトとして用意して、
それを整形表示させるのを Partial の役割に任せるのが正しいかなあ。


なんでそう思うかというと、
記事には属性があってその一部の属性だけが欲しい事もあるからだ。
HTMLで持ってるともう、否が応でもその順番でしか出力できない。
たとえば、更新日が最近のものに New!というアイコンをつけちゃったとして、
古くなってしまうと一個一個New!アイコンを消して回るのは面倒だし(これはHAMLで対応できるけど)


更新履歴を作るのに更新日と更新メッセージ、記事カテゴリ、記事キーイメージだけ欲しいとか
部分的なニーズを満たすのには
HTMLは向かない。


逆にオブジェクトであれば、
記事.更新日
記事.作成日
記事.カテゴリ
記事.タイトル
記事.ボディー
記事.キーイメージ
記事.更新メッセージ
などとしてPartial に local{ほにゃららと書いて
整形してあげるようにすると
自由度がアップするかな。


Middleman ってやっぱりそういう思考をするようになるので、
静的ページを出力するツールでありながら、考え方はCMSに近くなっていくなあ


そしてそういう本来なら CMSで補う部分って案外 Middleman でできてしまう事もあることに
気づいちゃって面白いよね Middleman

2015年1月26日月曜日

テンポラリファイルを作りたくないなあ

for f in *.html.haml
do
  cat "$f" | awk 'NR==1 && /^;;;$/, NR>=2 && /^;;;$/' #この出力を連結したい。
done

なシェルスクリプト書こうかなとしてるんだけど、テンポラリファイルってどうしても作らないとできないのだろうか。

性格がケチなのか、どうにか中間ファイルを作成したくないなあ。



ぐぐろと。

cat <<EOF |sh | ここにパイプラインつなげる   
for f in *.html.haml
do
  cat \$f | awk 'NR==1 && /^;;;$/, NR>=2 && /^;;;$/'
done
EOF

というのはどうだろう?
 そこまでしてテンポラリファイルがなんで嫌なのかは自分もよくわかんないけど。

frontmatter 部分だけ取り出すのは AWKだと本当に簡単だった話

よく考えたら下だけの事だった。

JSON
cat hoge.txt|awk 'NR==1 && /^;;;$/, NR>=2 && /^;;;$/'

YAML
cat hoge.txt|awk 'NR==1 && /^---$/, NR>=2 && /^---$/'
あー上等なオツム欲しいなあ。

2015年1月25日日曜日

あれ? AWKの勉強してるはずがsed 書いてた

frontmatterだけを抽出する処理の続き

SED 教室

に再度たどり着いてしまい、今度は sed で遊び始める。

あ、ダメだ。

sed 面白いけど頭の具合が良くないおいらにはパズルが過ぎる。
頭が痛くなってきた。まあ、こんな感じでいっか

sed -n -f frontmatter.sed

1{
  h
  s/^.*$//
  d
}
2,${
:label
  G
  s/^\(.*\)\n\(---\|;;;\)$/\2\n\1/
  /^\(---\|;;;\).*\n\1$/{
    p
    q
  }
  s/^\(---\|;;;\)\n//
  N
  b label
}

find と awk のお勉強

middleman にグローバルナビ も全部自動出力させたいなあと思うと、
現在書かれているhtmlのfrontmatter 全部が必要になるなあと。

middleman は単一のHTMLに対する要求で駆動するので、全部のfrontmatter を あとから集めるのは無理かなあと。となるとあらかじめ集めるのがいいのか。

とりあえず作ってるページのfrontmatter を 結合して置いておくスクリプトを考え中。

frontmatter は
---<改行> …YAML形式
もしくは
;;;<改行>  …JSON形式
で始まり

---<改行> …YAML形式
もしくは
;;;<改行>  …JSON形式

で終わる
その パターンで囲まれた部分を印刷すればいい。

結合部分は リダイレクトで追記するなりやり方はいくらでもあるので、 ひとつのファイルからfrontmatter を取り出すフィルタを作る方法を考える。 awkでできそうだと思うけど、
いろいろまだわかんない事が。

というか awk 自体初体験だったり。

  シェルコマンドを使った処理の効率化は AWKの行(レコード)操作がカギをにぎる(1/2):CodeZine

をみて

cat index.html.haml |awk '/\;\;\;/, /\;\;\;/'

をやってみると

;;;
;;;

だけ出力される。あれ切ないヤツだ。間は何処に行った。。(;-; (--;

seq 1 1000 | awk '($0 % 5) == 0, /5$/' |head
5
10
11
12
13
14
15
20
21
22

なるほど これはとんだ思い違いをしていたカンマ前もカンマあとも両方評価されるんだなあ。

perl で $/ かなにかアンデフして 正規表現すれば一発ではなかったかともおもうのですが awk でもう少し考えたいのです。 perl の記憶もあやふやdeathし。

find なんかもちょっと面白いコマンドですよね。

man 読み中。 Awkつながりで I love music!

wrap_layout にも躓く

[ Middleman で超速プロトタイピング ] #01 Middleman の基礎を一気に学ぶ | Developers.IO

の記事すばらしい。

ただ、WrapしたLayout でなぜか空ページが表示されるので、不思議だなと

`wrap_layout` doesn&#39;t work with slim on ~&gt; 3.3.2 · Issue #1269 · middleman/middleman · GitHub

を見るとどうやら、
- が = に変更されているみたい。

ただ、ホントにそれが原因だったのかも私のスキルじゃよくわからんのヨネ。
- wrap_layout

となっているところを
= wrap_layout
に書き換えるとうまくいったような。

JSONはシングルクォーテションではダメらしい

もうね、仕様書読んでから書けよというレベルで
石ころにコトゴトク

JSON
シングルクォーテーションダメです。

20分ぐらいナゾでした。

でもね、読まないアルヨ!

2015年1月21日水曜日

Common Lisp でできた HAML があるらしい

CL-HAML

ちょっと古い記事だけど、おもしろいなあ。頑張るなあ。

"拡張性が低いっていうか、そもそもの機能に不足感が…"

なんだけど確かに haml 単体だと構造がシンプルに書きやすいというメリットしかない気がする。

フレームワークあってのhamlみたいな。

まず、haml 単体じゃカプセル化という概念すら無い気がするなあ。

何も定義できないし。

でも構造がシンプルに見えるだけで全然いいというのはあるけど。
HTML に戻りたいと思わないし。

あとは Ruby 様がいるしなあ。

Fixed の navbar があると、ページ内アンカーがずれる事態にいまさらはまる。

ページ内リンクが固定のナビバーがあるときにずれるのはよくある話で、よくあるTIPSでmargin-topにマイナスを指定する というのがある。

<div id="hoge" style="margin-top:-30px;
padding-top:30px;background-color=#eee;">
</div>

確かに効くのだけど、ただ、↑みたいなのだとバックグラウンドカラーがめっちゃカッコ悪くなるわけで、
仕方ないのでさらにラップしてそこにリンク張りなおした。

<div id="mage" style="margin-top:-30px;padding-top:30px;”>
  <div id="hoge" style="background-color=#eee;">
  </div>
</div>
見たいな感じで#hogeは使わないで#mageを使う。 #hogeはあくまでもバックグラウンドを綺麗に見せる為だけの存在。。。 面倒だなこれほんとに。なんかちゃんと治す方法は無いんだろうかおまじないレベルだし。 何はともあれ middleman はすごく便利だなあ。

2015年1月16日金曜日

Cygwin の gem install が UTF-8 でこけるのは haml だけでもないらしい middleman coffeescript とか

昨日やってたcygwin の gem install  がエラーでこけるのは今日middleman をインストールしようとして同じメッセージが出ているようなので、たぶん有名な話なんだろうなあ。

LANG=C.C gem install

でインストールすると何かよくないことが起きる可能性はあるものの使えないのはどうしても困るし仕方ない。


cygwin で gem install haml 失敗するメモ ruby 2.0.0p598 (2014-11-13) [i386-cygwin]

結局 m4 に遠回りするぐらいならふつうの html プリプロセッサを動かしたくなった模様。脳みそは相変わらず煮えきってる模様。
jade入れようとした→Node.jsが要るけど、cygwinで入れられるのかどうかが不明。めんどういー。→やっぱり haml しかない。

$ gem install haml -V
ERROR:  While executing gem ... (ArgumentError)
    invalid byte sequence in UTF-8

XXXXX@XXXXX-PC ~
$ LANG=C gem install haml
ERROR:  While executing gem ... (ArgumentError)
    invalid byte sequence in US-ASCII

はむれない;;
LANG=CでもダメならLANG=C.Cだよねっ☆?

XXXXX@XXXXX-PC ~
$ LANG=C.C gem install haml
Fetching: tilt-2.0.1.gem (100%)
Successfully installed tilt-2.0.1
Fetching: haml-4.0.6.gem (100%)

HEADS UP! Haml 4.0 has many improvements, but also has changes that may break
your application:

* Support for Ruby 1.8.6 dropped
* Support for Rails 2 dropped
* Sass filter now always outputs <style> tags
* Data attributes are now hyphenated, not underscored
* html2haml utility moved to the html2haml gem
* Textile and Maruku filters moved to the haml-contrib gem

For more info see:

http://rubydoc.info/github/haml/haml/file/CHANGELOG.md

Successfully installed haml-4.0.6
Parsing documentation for tilt-2.0.1
Installing ri documentation for tilt-2.0.1
Parsing documentation for haml-4.0.6
Installing ri documentation for haml-4.0.6
Done installing documentation for tilt, haml after 14 seconds
2 gems installed


ふぁっ???まさか効くとは。まったく不具合箇所を特定しようともせず、環境変数をC.Cにして逃げるというナゾの手段が効いてるような。 ???$HOME/binにインストールされてるような .bash_profileをいじったら動いているかもしれない。LANG=C.Cは昔slackware で日本語にすると落ちるアプリを起動する時に良くつけたりしてた様なイニシエの記憶。もう使う事ないかと思ってた。

でもhttp://fohte.net/wp/?p=66
に記載があるから、そのうち Setup.exe でバージョンアップできるようになって治ったりすると嬉しいかな。

2015年1月15日木曜日

m55 というプリプロセッサ

なんかとりあえず、bootstrap で遊んでるのですが、
FFFTPが嫌になって、ncftp を入れたくなって、cygwinをアップデートするのに時間がかかって悶絶している間に、m4というプリプロセッサについて調べていたら、m55というものを発見したという大迷走中であります。

http://ksmakoto.hatenadiary.com/entry/2014/12/03/002435

awkで500行ってあたりなんかすごいなあ。。

でも、今日はこれ以上脱線したらもう戻ってこれない気がする。

2015年1月13日火曜日

株が下がりすぎてやる気がおきない

kona linux をダウンロードした。
ホームページがなくてgoogleのファイル共有で公開するというのが面白いなあ。
むしろ合理的だなあと。

ちょっと違うんだけどxyzzyのホームページを思い出した。

たぶんすごいページなんだけど、すごいやる気ないの。
すごいソフトを公開しているのに、やる気ない。

googleもさ、すごいやる気ないページだけど検索するとランキングがかなり上位なんだよね。

SEOとか本いっぱい出てるけど、SEO的に言うと零点だと思うんだよね。

結局内容が突出していれば、SEOとか無意味なんだなあ。

ああ、株が下がりすぎだ。

2015年1月10日土曜日

ISOファイルを作成したいときのメモ

最近はCD-ROMドライブが無いPCも多くて、CD-ROMはすぐにISO ファイルに吸い上げてNAS上に置いておくという使い方をする人は多いんじゃないかなあ。そうしたら必要なときに仮想ドライブソフトでマウントすれば使えて便利ですし。

さてそういった使い方をしていると、CD-ROMから吸い出すソフトがいるわけだけど、Roxioがついていればそれを使うに越したことはない。簡単です。でもそれすら入っていない事がある。

普通は専用のソフトを入れるんだけど、あんまり正体不明のソフト入れたくないなあとおもって、ググっていたら

cygwin でCD-ROMを吸い出す.cygwin dd でCD-ROMイメージ化

というステキなTIPSを発見。
なんか cygwin ってスゴイネ。

2015年1月8日木曜日

箱庭環境構築 CMS とか

タダ系CMSを使ってみる実験で家庭内の raspberrypi に箱庭環境構築。

raspberrypi 便利だわ。

mysql がいらない baserCMS と onethird CMS を入れてみた。

もっとドキュメントが充実してくれれば嬉しいな。

onethird CMS が面白いなあと思うのは静的ページ出力機能。

onethird はぐぐってでてきたんだけど、どういうキーワードでぐぐったかというと"CMS ローカル"。意図はCMSってなんでサーバ上に構築するんだろう?ローカルでCMSしてFTPで上げればそれもCMSと言えるのではないか?と思って、ぐぐってたら出てきた。面白い事考える人が居るなあ。

どうでもいいけどCMS作者様が九州に多い気がするのは気のせいだろうか。

2015年1月6日火曜日

Wifi付きPHS PORTUS の電源が一瞬入らなくてあせった

なんでか3時間くらい電源が入らなくてあせった。

この機種超特殊な機種でPHSと3GのWifi ルータが一緒になった機種で、PHSなんだけどWifiがついてるガラケーよりガラパゴスというか。ガラケーなんて淡路島程度のガラパゴス具合に見えるほどのガラパゴス。PORTUS さえあれば Wifiつながる。安タブレットさえあれば、大半の用途でスマホ不要になる。しかも価格は電話とルータ持つより安い。しかもWifiとしてのバッテリのもちは微妙ながら、電話機としてのバッテリーの持続力は半端ではない。

こんな便利なPORTUSの弱点は後継機種が存在しないこと。プランもPORTUS専用のプランになっているので急に使えなくなった場合が不安だ。しかも現在もうPORTUS自体売り切った感じでY!mobile さえ取り扱っていないので壊れた場合難民化必至だ。3時間電源が入らなかった間めちゃくちゃ不安だった。

Y!mobile とか softbank のサイトで他のサービス検索したけどピンと来なかった。

めっちゃ愛着沸いてる。ほんとに後継機種欲しいんだけど
もうY! mobile はこの機種を棄てたみたいだ。
iiro がSNS使えるにもかかわらずPORTUS は SNS 互換性無いなんて悲しすぎるのよ。


2015年1月4日日曜日

amazon kindle デバイス数の限界がめんどい

Android デバイスに kindle をインストールしていて、
ダウンロードして読もうと思ったらデバイス数の限界とかで読めなくてがっかりした。


どうやら無限に入れられるわけじゃないらしい。
amazon から壊れたアンドロイドデバイスごっそり削除すると読めるようになったけど。。。
e-book ジャパンデバイス数縛りどうなんだろう。

最近読んだ本でよかったのは↓