あれ?ブログまた変わった??

と思われた方は正解です. ドメインは一緒ですが,テンプレートを一新し,ブログのビルドエンジンもHugo→Jekyllに変更しました.

Hugoは,Go言語ベースの静的サイト生成ツールですが,Jekyll(ジキル)は,Rubyベースとなっており,比較的利用者の多いツールです.(参考:StaticGen)

もちろん導入にいたっては,東工大の某氏たちはじめ,多数のロボットやプログラムに携わる人が使っていたことも決め手になっています.

なんでJekyll??

Hugoでも良かったんですよ.Markdownという記法で手軽に記事が書けるし,Gitベースのクライアントで更新できるので,ローカルでデータ更新してプッシュするだけだし,問題はなかったんですが…

あるとき,プラグインでグラフやツリーを描写できることを知り,いろいろ調べていくうちに,現行で比較的プラグインが豊富なのがJekyllだったので,最終的にJekyllにすることになりました.(また変わるかも知れませんが(^_^;)

ブロック線図を書くには?

現状のツール

Jekyll向けプラグインとして,システムの流れを再現可能なツールは,MermaidGraphvizblockdiagなんかがあります.パッケージの上下関係がわからないので,細かい点は省略.

しかし,これらのツールは,ノードtoノードが基本となっており,頑張ってブロック線図を書こうとしても,

blockdiag blockdiag { u -> F -> y,G ; G -> F [folded] ; } u F y G

こんな感じになってしまう…

Tikz(Texパッケージ)

やっぱり,制御やってる人は,

とまあこんな感じでいきたいですよね.

こんなときはTikz(「てぃくす」と読むらしい).Texのパッケージとして使えて,ブロック線図も上の通り.Jekyllならプラグインもあるので,そこまで難しくなく扱えます.もちろん,Texがコンパイルできるパソコン前提での話ですよ.内部でTexコンパイルして,生成したsvgファイルを自動リンクしてくれるのでかなり便利です.

企み

「おいおい,Tex使うってことは,いまのCIツールじゃ難しいってことじゃないか.Gitプッシュからビルドサーバだけで完結できねえのか.」と思い,Dockerに環境を構築してみました.とビルドは出来たのですが,NetlifyにプッシュするためにSSHキーを保存せねばならず,外部のビルドサーバ経由で行うのは断念.現在サーバ検討中なので,近いうちには自前のビルドサーバで,プッシュからデプロイまで自動化しているかもしれません?

環境構築

私はMacユーザーなので,Windowsでは検証していません(が,入れるパッケージはそこまで変わらないと思います).自宅ビルド用にUbuntuでも環境を再構築したので,載せておきます.

  • Mac
    1. Texが動く環境を構築(MacTexなど)
    2. Tikzのサンプルなどを動作させる
    3. brew install pdf2svgなどして,pdf2svgをインストール
    4. (怪しい感じの)Jekyll-tikzを入手し,Jekyll用ディレクトリ内の_pluginにコピペ.
  • Ubuntu
    sudo apt-add-repository ppa:texlive-backports/ppa
    sudo apt-get install texlive texlive-lang-cjk ruby ruby ruby-dev make gcc nodejs wget
    sudo gem install jekyll bundle
    jekyll new tikz-test-site
    cd tikz-test-site
    sudo bundle install
    wget https://gist.githubusercontent.com/hack-ghost/6139753/raw/fb37dd05a5e0a4e8daf36d002c8f8dcd8072f0ca/jekyll-tikz.rb
    mv jekyll-tikz.rb _plugins/jekyll-tikz.rb
    
    • Graphvizとblockdiag使いたい人は,
      sudo apt-get python python-pip graphviz
      sudo pip install actdiag blockdiag nwdiag seqdiag
      gem install jekyll-diagrams
      
    • さらに,_config.yml内のgemにjekyll-diagramsと書き,Gemfile内に以下を書いて下さい.
      group :jekyll_plugins do
       gem "jekyll-diagrams"
      end
      


今回はここまで.ぽいちゃ


%3 S S A A S->A a B B S->B b D D A->D c B->D d C C
blockdiag blockdiag { A -> B -> C -> D; A -> E -> F -> G; } A B E C D F G

memo


このブログを作って

もう運用開始からおよそ3週間.いまだに大々的に広めていないのは,過去ブログからのデータをどう移行するか悩んでいるため. MovavleTypeなので,imageのリンクは後で変えるにしても,スクリプトでも書いてMarkdownファイル(md)にしてしまえば問題ないとは思うが...

ここのサイトは将来的な目標も見据えて,bitbucket→netlify(コンパイルサーバ)で公開しており,サイトはHugoで生成している. なぜかmd形式だと最初の挨拶とか最後のコメントを忘れがち. 最近は論文ばかり書いていたので,あまりにも淡々としすぎている. ですます調でブログを書くことが多少信念でもあったのだが...

Dato-CMS

本ブログは,先も述べたとおりHugoで生成された静的webサイトである. つまりstaticなので,時々刻々とかわる情報(ツイッターとかサイトカウンタ)には対応していない. いや頑張れば反映できないこともないが,まだjavascriptがよく扱えないのと,意外とこのシンプルな見た目を気に入っている.

しかし記事内容は,個々のmdで管理せねばならず,いちいちbitbucketを開いてコミットするのもどこかばかばかしい. Dato-CMSは,こうした静的webサイトに公開される記事内容を管理してくれるサービスで,なかなか使いやすそうである. とはいえまだまだユーザーが少ないのか,日本語サイトが上がらない.

私はといえば,使用方法がなんとなくわかったが,テキストにエクスポート出来ない点を嫌って,Dato-CMSで書くのはやめることにした.

つれづれ

最近は,Pythonをいじりはじめ,JavaScriptを学び,もとい回路などを作ってプログラムなどをして生きています. fc2より広告は出ないし,サイトも見やすくなったので,しばらくはこっちで書いていきます. Markdownならオフラインでもサイト記事のストックがしやすいので,意外とこのスタイルはあっているかも. ではまた


なんかADCの様子が・・・

STM32F031でADCをしていた. RegularModeでいいだろと,DMAを使わないでマルチチャンネル取得を試したいたのだが・・・

ADCにはEOC/EOSというフラグがあって, ADCコンバート終了時の割り込み時にこのフラグを同時に確認すると, 今読み出してるデータの種類がわかる. ちなみに,EOC(End of conversion),EOS(End of sequence)である.

hadc.Init.EOCSelection = ADC_EOC_SEQ_CONV;として, main.c内ADC終了時のコールバック関数を以下のように記述するも

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
	if (__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOC))
		{
		adcval[adc_chcount] = HAL_ADC_GetValue(hadc);
		adc_chcount++;
		//adc_convflag=1;
		}

	if(__HAL_ADC_GET_FLAG(hadc, ADC_FLAG_EOS))
		{
		adc_convflag=0;
		adc_chcount=0;
		}
}

サンプルのほぼパクリだがダメー!!

素直にDMAしよう?ね?

最初からこうしとけって話,無駄に2日費やした. 開発に大事なのはペースなのだよ.

ところでDMAの動きを確認したら脳筋だった. ADC側,DMA側の連続変換モードをともにONにして, HAL_ADC_Start_DMA(&hadc, (uint32_t*)adcval, sizeof(adcval)); と記述して本日の試合終了

ADC_DMA_Check

めでたしめでたし


STMデバッグ時にやることリスト

(環境:SW4STM32+ST-LinkV2.1)

  1. マイコンに別電源を供給した上でST-Linkと接続(LEDがカラフルになる).ここでだめそうならST-Link Utilityで接続だけ確認してみる.

  2. SW4STM32を開く→CubeMXデータをインポート

  3. indexerの設定を切る.(project » Properties » C/C++ General » Indexer) 出典は海外フォーラムより.

  4. Expressionの設定をする.(Window » Show view » Expression) この辺の便利機能はガレスタ大先生がやってくれてる.

現在追記中

Linuxにうつつを抜かしていたためマイコンデバッグですっかり足をすくわれてしまったトホホ