vite_ruby全体的にはとてもよい。けどちょっと注意も必要かも。

を見かけたので Vite 1 beta の頃に独自に Helper 書いて導入したものをリプレイスして v2 にしちゃおう作戦。

Home | Vite Ruby

前提

  • Vite を独自に導入済み。Webpack → Vite の migration で感動した!みたいな話はなし
  • Vite 1 beta を vite_ruby x Vite 2 に migrate.
  • Vite 1 beta を Ruby から利用してた際は Helper を独自実装していた

導入したのは vite_ruby 1.2.11

Vite 1 beta 利用時の課題

  • Vite の dev は Ruby 側の development で使う分にはいいが Ruby 側の test で使うと初回のいろいろな解決が走って重い、build を使ったら使ったで実際に build が走ってやはり重い
  • entry point が複数になる場合に vite.config.js を複数用意する必要があり、非常にダルい、というか現実のアプリだと entry point は複数になるでしょ

導入して良い点

  • vite_ruby の導入は Vite の抱えていた entry point 周りの課題をきれいに解決してくれて助かる
    • vite.config.js からの rollup の設定へどんどん深みにハマっていく必要がない
  • autoBuild を利用すると上記の重さはかなり改善される

導入するなら考えた方が良い点

  • Webpacker 同様 Helper を通して Ruby 側で asset 周りの reverse proxy を実現しているが、このおかげでもう WEBrick での開発は現実的でなくなる
    • ES Modules は Webpack と違ってブラウザ上で直接 import が動いて HTTP connection が爆発する
  • 同じく asset へのアクセスが大量に発生するので logger に工夫が必要かも
  • Webpacker 同様 Helper に新しい名前空間を用意し、そっちの利用を強制してくるのでちゃんと従おう

特に HTTP connection が増えて WEBrick では耐えられなくなる点は大きくて、恐らく Puma を使うのが素直な解決策1だが、Rails のようにライブラリが充実している環境でない、例えば Sinatra や Hanami を利用する場合、 Puma を development 環境で使うのはちょっと扱いにくいので注意が必要。

余談:Ruby外のasset bundlerとRubyを組み合わせる方法と注意点と自分の考えていること

ここからは完全に脱線なので、一つの考え方として参考になるかも。ならないかも。

個人的には Ruby バックエンドや静的サイトジェネレータと Webpack などの asset bundler の組み合わせはそこそこ試してて、

  1. Ruby 側の Asset Helper の実装
  2. Ruby で reverse proxy の実装
  3. Node.js で reverse proxy の実装

を何通りかやっている。2

そのうえで上で書いた Vite 1 beta 利用時の独自 Helper ではあえて reverse proxy を使わない Helper を書いていた3んだけど、vite_ruby は Webpacker を模倣してしまったので Ruby 側の負荷が爆発する形になってしまっている。

Webpack は bundle 済みの asset を serve するので reverse proxy が Ruby 側にあってもよいかもしれないけど、ES Modules は bundle せずに HTTP に丸投げになるので、かなり動作が違う。ここは真似する必要なかったのではないか。

まぁ reverse proxy を Ruby 側に持たせることが一概に悪いこととは言えないんだけど、シンプルな、「Rails を使うほどではないよなぁという開発」の場合に Rails のエコシステムを前提にした「なんでも揃ってる感覚」でやるといろいろハマりが多いので、できればそれほど Ruby の得意なわけではない大量の HTTP の処理が Ruby に回ってくる設計にはしない方がいいんじゃないかと個人的には考えている。

もちろん「デキアイのツールをただ組み合わせて実現できる」ものでやる方がいろいろ端折れて早いのも事実なので、鉄板構成を見つけて鉄板構成だけで押すという姿勢も大事なんだけど、それぞれの得意なこと不得意なことは知っておくといいよ、とも思った。

  1. thread ベースとか event ベースであればなんでもよい 

  2. 結局やるのは Node.js のサーバの URI の解決と manifest.json の解決だけなので、一度やってしまえば別に難しい課題じゃない。面倒なだけ。 

  3. HTML は Ruby へ、Asset は Vite Server へそれぞれ request する形 

reSTからOOo Writer形式のドキュメント(.odt)を作る

なんとなくできるんじゃないかと思ったけどほんとにできた。

準備

必要なものは

  • Python
  • docutils

実際に試したのは Python 2.6 + docutils 0.6 の組み合わせ。

背景 - OOo が重すぎる

というのも機械が非力(PPC G4)だからなんだけど。最近は妙に Office 仕事が多くて、この前時代マシンには荷が重すぎることがよくある。

ずーーっと前の自分ならこういう場合はテキストから変換する方法を考えていたように思うけど、最近はもう気力がないので一時的に私物の Intel マシンを投入したりとか、そりゃどうかなぁと思いながらやりくりしてたんだけど、急に思いついた。

Python の docutils に変換機能あった気がする

そうそう。最近まともに Python を動かせる(≠使える)ようになってるから、一応ね。あと、OOo を利用したドキュメント変換ツールにも Python バージョンがあったのを覚えていたから。普段からぼけっとパッケージマネージャの検索結果とか眺めておくといいよ(違

準備

$ sudo easy_install-2.6 docutils

※ easy_install のコマンドファイル名は適宜読み替えてちょ。

確認

MacPorts で入れた Python で確認。

/opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin $ ls rst*
rst2html.py*		rst2odt.py*		rst2xml.py*
rst2latex.py*		rst2odt_prepstyles.py*	rstpep2html.py*
rst2man.py*		rst2pseudoxml.py*
rst2newlatex.py*	rst2s5.py*

お。rst2odt.py なんてのがあんじゃん1

自分の環境では

/opt/local/bin

に PATH が通っているので

/opt/local/bin/rst2odt.py

に symbolic link を用意して使うことにした。

使い方

サンプルの reST データをこんな風に用意。

見出し
======

simple table


小見出し
--------

official な table ってどう書くんだっけな

==========  ==========
テーブルは  こうだっけ
----------  ----------
どうだった  かな
==========  ==========

 * 箇条書き
 * bullet

もしかして
==========

見出しでセクションが分かれる仕様か?  --no-sections でイケた。

で、変換はこう。

$ rst2odt.py --no-sections sample.rst sample.odt

デフォルトだと見出しごとにセクションが切られてしまうので、それを避けたい場合は上のようなオプションを使う。

で、OSX だと

$ open sample.odt

とするとほんとに OOo のファイルじゃん!て感じでとても簡単に使える。

参考

残った課題

実は変換して生成したいのは odt ( Writer ) ではなく ods ( Calc ) なんだけど、とりあえずこれはこれで使ってみようと思う。ただし

そうなると見た目が気になる

ただの表ならいいんだけど、文書になるとやっぱり見出しとか地の文とか気になる。全部欧文のフォントが指定されていても美しくない。日本語のテンプレートを作れるようにはなっていた方がいいかなとは思っているんだけど、そこはまだ全然未開拓のまま残っている。

関連エントリ

  1. HTML や LaTex に変換する機能があることは知っていた。 

Array#map {}.compact と Enumerable#select

なんかずっと混乱していた。

一文で言うと map は加工済みの結果を返せるけど、select のブロックの中身はあくまで一つ一つの要素そのものをふるいに掛けるためのものでしかなく、加工済みのデータを返すことはできない。

map の例

irb(main):001:0> (1..5).map { |e|
                   ( e % 2 > 0 ) ? 'e' + e.to_s : nil
                 }.compact
=> ["e1", "e3", "e5"]

select の例

irb(main):002:0> (1..5).select { |e|
                   ( e % 2 > 0 ) ? 'e' + e.to_s : nil
                 }
=> [1, 3, 5]

これは以下とまったく一緒

irb(main):003:0> (1..5).select { |e|
                   e % 2 > 0
                 }
=> [1, 3, 5]

分かってしまえば当たり前なんだけど、いざ書いてみると不慣れなときは何が起きているのかよく分からない。なんか久しぶりにこの感覚味わった。

キーボードとキーバインドの設定

Q. コンソールでキーボードの Ctrl キーと Caps Lock キーを交換して使いたい。その他、任意のキーの意味を交換したい。 (FreeBSD QandA 365)

FreeBSD で日本語キーボードを使いつつ A の左を ctrl キーとして使いたい場合、

keymap=jp.106x

にすればよいらしい。こんなものがあったとは。本体のキーボードはほとんど使わないし、FreeBSD をクライアントで使うこともまずないので知らなかった。kbdcontrol とか、どうもこの辺の基本的なところがすっぽり抜け落ちてるな。

vi ユーザなので、vi のキーバインドで使いたい (または、emacs のキーバインドで使いたい) (zshのある暮らし - FAQ@zshスレ)

※ フラグメントID は変わっちゃう可能性おおいにあり。

遅い機械なので環境変数 EDITOR には vi を設定しておきたいが zsh での操作には emacs バインドを使いたいという場合は

bindkey -e
export EDITOR=vi

にすればいいのか。bindkey -e なしの状態で C-a とか C-e とか効かずにちょっとパニクってしまった。

知り合いに子どもが生まれたというので

※ 28日の話なんだけど、28日がもういっぱいなのでずらして書いてます。

お祝いを探しにトイザらスに行ったのにほしいものが見つからず、間違ってルービックキューブを買ってしまった。

というのも店頭で を見つけてビックリしてしまい、なんじゃこれとしばし夢中で取り組み、なんとか1面合わせることができた時点でものすごく楽しくなってしまったのだ。

ところで今ってルービックキューブの何回目のブーム? 確か3回目くらいだよね? 10年くらい前にも一度流行ったような気がするんだけど…。ま、とにかく自分にとっては20年ぶりのルービックキューブ。出た当時はまぐれの3面までしか合わせられなかったが、今ならイケるかもとか思い、思わずお買い上げ。

最近、以前よりテレビを見る

あるある2 肩こりネタ

またあるあるかと。いやねぇ、この時間帯ってなんかどうもまったりしててねぇ。テレビを見ちゃうんだな。でも法律相談所はなんかイメージ挽回のための小ネタ披露番組になってて、前より明らかに間延びしてるのですよ。とまぁそれは置いといても、長いおつきあいの肩こりネタだったので見たわけですが。

肩こりの原因を

  • 背中

の3つに分け、これらの原因に対して効果の高い運動を提示するというスタイル。最終的に全部志村けんのネタに統合されているのは作りとしてはうまいなぁとは思うんだけど、それやるといかにもうさんくさくなっちゃうような。つまり、ネタ先攻で番組作ったような感じがしちゃう。

まーあるあるにマジツッコミしても始まらないのかもしれないけど、自分は上のどれについてもそれほどひどい症状ではなかったのに、肩こりの自覚症状はひどいぞ。まぁ骨格のゆがみとかそういうレベルだと短時間の運動では解消されませんよということなのかもしんない。

どうでしょうクラシック

2ヶ月ほど前から「水曜どうでしょうクラシック」を見ている。金沢では今放送されているのですよ。水曜の深夜に。深夜なので録画で見てるんだけど。

最初薦められたときは DVD が発売になったり話題になっているのは知っていたけど、だから何?という感じだった。しかし MPEG2 素材の取得とムービーのエンコードなどの練習のためと称して見始めたらおもしれーじゃねーか、この野郎。なんだよ、もっと早く教えてくれよ。というか途中で気づいたけど、確かマレーシアに連行されたスペシャル番組か何かを昔見たことがあった。やることもなく食って飲んで移動してをくり返して、ホテルで企画発表。大泉また騙されるってやつ。これかぁ、と。そうかあれがどうでしょうかと。なんだよ知ってたら最初から見たぞ、この野郎。1

大泉洋は何が面白いって、ネタそのものじゃなくて、あの浮き沈みの激しさ。同じ B型として彼のノリの変化にとても親近感が湧く。あのヘコミっぷり。さいこー。あと、地方の番組にしては CG部隊とか編集が頑張ってる気がする。正直、タレントの差をさっぴいてもあのレベルのローカル番組は金沢にはないんじゃないかな? さすが大都市札幌。中核都市とは違います。やっぱこう、商売的にも生活的にも文化的にも、100万〜200万くらいのレベルの都市ってのは面白いのかもなぁ。

というか番組予算がローカル番組にしてはでかい気がするんだけど、それはギャラが安いからなのかな。全国レベルのタレント連れてきちゃうとギャラが予算圧迫するから、タレントありきの番組じゃあんな企画は絶対できないよな。

  1. これが藤村Dの口調でしょうか? 

Ruby ツール二題

  • lily
    • blosxom 系の blog ツール
  • qwik.jp
    • 要するに Wiki と blog とメールを組み合わせたようなもの?

lily の中身はまだ見てないけど、blosxom, PHPosxom は泣きそうなコードだったけど、これは中身が楽しみ。(日本語が変だ。)知ってはいたんだけど、動かしてなかったので今度試してみよう。

うーん? なんか文字コード変換されてないぞ? Windows でライブラリが正しく読み込めてないのかと思って FreeBSD に入れてみたがやっぱダメ。やってることはそんな難しそうじゃないのに、なんでだ?

企業が blog に注目?

「HPより手軽」ブログ急増、企業も注目 (asahi.com)

ついに asahi.com にこんなネタがきましたか。しかなぁ。blog と HP の違いって何よ? 簡単に言葉の説明が載っているが、本質的な違いを意識せずに blog だなんだと言うのは滑稽以外のなにものでもないんだがな。

tracker また謎解決

  • 変数名に - が使えないっぽい

こういう基本的なドキュメントがないのが痛い。

ちなみにこれを調べるために動かそうと思っていたデバッガは結局うまく動かないうちに解決したので放置。

モナ−海を渡る

http://www.zdnet.co.jp/news/0305/28/cjad_horikoshi.html

正直、かなり面白かった。

blog の話として読んでも面白かったし、2ch のキャラが海の向こうでも受けている点も、それに対して個人の Flash 作りが流行ったことが貢献している点も。ま、背徳的な笑いってどこの世界にもあるし、それが blog 文化の中で決してばかにできない勢力を持っているってのも忘れちゃならんな、と思った次第。

でも何よりこの記事を書いた人が好きかも。blog 関係の真面目な記事で、こういうスタンスで書かれているものって初めて読みました。不勉強なだけかもしらんですが。なんだか、すがすがしい気持ちですばい。

スラドで ID 体験2日目

昨日、ID 取った。ライトモード使ってみた。正直、見にくい。うーん、これなら w3m で通常のものを見た方が。。。Netscape 4 で CSS デザインのサイトを見てるようなそんな感じ。

でも sf.jp の新着チェックがやりやすくなった。これは嬉しい。

うっかりしてると ID のまま AC のような乱暴な言葉で返信してしまいそうになる。キャラの使い分けというつもりはないけど、やはり ID を晒す場合は内容に責任が発生するような感じがして、今までのようには気軽に書き込む気にはなれない。

まぁ、そろそろあちこちに書き込むのも飽きてきてたのでちょうどいい機会かもしんない。

しばらく様子を見てみよう。

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm