線形計画法の次は動的計画法かー。まぁ、やれといわれりゃ、とっととプログラムを作りますけどね。
今日のワン切り。
なんか、明日の昼に市の商業振興課の人が来て、学内ベンチャーについての取材がある。ディレクターとか総勢5人が来るそうな。
んで、自分が代表でインタビューを受けると。
・・・。
髪切らなきゃよかった;;
実家の中学生の弟が中間試験だっつーのにネットで遊んでいたので、兄貴が物理的手段を行使。がっ、ルータと弟のマシンのLANケーブルを抜けばいいものを何を血迷ったかモデムとルータ間のケーブルを抜いてしまい、再接続しても家全体がネットに繋がらないからどうにかしてくれと朝一で電話。
症状を聞く限りダイヤルアップ接続が作成されて、それがデフォルト設定になっていた模様。ケーブルを抜いた時にマシンを起動して出てきたダイアログを次へ次へとクリックして設定が上書きされたのかな。
どうにかこうにかして電話越しに色々やってもらい復旧。8月に実家に帰ったときに色々メンテナンスしないとなぁ。
JSP+JDBCの続き。今日は数人がServletまで進む。一方で未だに一番最初のクラスすら作ってない学生もいたり…。
案内がきて、名札にキャッチコピーをのせるので事前に知らせてくださいとか書いてある。
「バカエロ見習い」とか「借金まみれ」とかこんなのしか思い浮かばねー。そもそも、ひねくれ人生なのでヒトをキャッチできそうな言葉なんて何もないし。
今年の夏休みは北海道を出て東北のほうへ旅行に行こうと思っていたが、彼女の仕事が8・9月に忙しくなるようでお盆ですら金土日の3日しか休めないので、北海道から出るのは断念。
どこに行こうかと話し合ったところ、旅行日数が少ないから温泉でだらだらと過ごすことにした。で、普段はISIZEじゃらんで予約をしているけど、彼女が5489NET.comという北海道と沖縄に特化したホテル予約サイトを探してきた。ここだとじゃらんよりも一泊1000円近く安い。
早速、部屋の確保!と会員登録をしようとするとOracle DatabaseのSQLエラーがでてきたり、宿を選んでプラン詳細を見ようとすると
Microsoft VBScript 実行時エラー エラー '800a000d' 型が一致しません。: 'Cint'
とか表示されたりとシステム的にかなり不安定。流石にこんなシステムを使うのは不安になったので、多少高額でもじゃらんで予約をした。
最近また増えてきたみたいなので、ツッコミの中に含められるURIの数を2つから1つに減らして、使用不可能キーワードにいくつか追加。
iTMSのランキングに見慣れない歌手名の曲が登場していたので、視聴してみたらどストライク。すぐさまポチっと購入。この曲に坂本美雨とかそんな感じの曲を加えたプレイリストでひたすら書け流して読書とか。
読書は例のRails本の続き。ぼちぼち読み終えちゃ無いと月末からの本ラッシュに対応できねー。読書に飽きたらマリオをプレイして隠しステージを進めたり何だり。
って聞かれた時に、2週間程度さわった感じだと
って答えているんだけど、他に何か特筆すべき点って何だろ。マシンスペックも含めてあらゆる意味で富豪的とか、GUI設計と内部処理をつなげやすいから「オレってばスゲー感」を簡単に味わえるとか?
ゼルダの伝説 夢幻の砂時計 が発売する前に何とか Wii の方のゼルダはクリアしてしまおうと、今日も今日とてダンジョン探索。
ここまで進めて力尽きるの巻。んー、24日までは無理っぽいな…。
この前の日曜に家の観葉植物の鉢替えをしようと思って、鉢を買ってきたのにいざ始めようと思ったら買い置きしていた土が無くなっていた罠。もう一度、買いに行くのもダルイので Amazon で売ってないかなと探してみたら、そのものずばり「観葉植物の土」が売ってたのでポチっとなしてしまった。
Amazon はホントに何でもあんなー。これから園芸用品は全部 Amazon で揃えるとしよう。
トイレの電球が切れたついでに、部屋中の白熱電球を電球型蛍光灯に変えてしまったんだけど、これって賃貸マンション/アパートだとなんだか複雑だよねえ。自腹で高い費用を払って、寿命が長い品を賃貸の一部に組み込むってセコイ話だけど損した気分。
退去時にこれ全部持って行ってもいいんだろうか。
前から直そうと思っていたんだけど Publish::NiftyClip が豪快に文字化け
http://clip.nifty.com/users/hsbt
どうみてもただの SPAM サイトです。本当に(ry
さすがにアレなので調べてみたら Publish::NiftyClip の title が encode しすぎなだけで、外したら簡単に直った。
今日はちょっと某所で ursm と交代で Live coding しながら gdgd していたんだけど、いい加減 model/view/controller を楽に切り替えたくなってきたので、emacs をそれっぽく設定してみた。
最初は emacs-rails を入れようかと思っていたけど、最近は rinari と言うのが良いみたい。とりあえず、ido-mode と rinari-mode を有効にして、「C-c ; f m」とかで移動できるようになったのでだいぶ満足。もうちょい使い込んでみる。
今までは svn で開発を続けていたので、tdiary-svn に流すのは当然 svn のコミットログだった。
しかし、この前に git で push したものを git-svn でミラーリングするやり方だと merge コミットばかりで何が何だかわからんというご意見を頂戴したので、github の service-hook にある Email notify を tdiary-svn に流すようにしてみた。
diff はつかないので気になる変更点があったら、コミットメールに記載されている github の permalink をクリックして見るようにして下さい。1click の手間をかけてしまいますがよろしくお願いします。
先週はばたばたしていた中でDLだけ済ませておいた P4G をやっとプレイし始めた。
これ容量が 4G 弱あって、ダウンロードするのに発売開始してから8時間くらいかかったんだけど、DL購入が店頭で買うよりも手に入るのが遅いっておかしな話なので PS3 で進められているような事前ダウンロードの仕組みを早く導入して欲しい。
ゲーム内容の方は単なるリメイクではなく、アニメ版の映像をまんべんなく使っていたり、P4にあったような不毛な継承リセットが無くなって任意のスキルを継承できるようになっていたり、ストーリーやコミュも大幅に見直しされていたりとだいぶ楽しめそうな雰囲気。当面は買うゲームがないから、じっくりプレイできそうだなー。
npm と bower と grunt を使って javascripts のテストに必要なライブラリをインストールするようにした by hsbt · Pull Request #414 · tdiary/tdiary-core で導入した npm, grunt, bower の組み合わせで javascript/css をかなり良い感じに organize するという仕組みを production の rails に投入した。
準備としてはまず nodejs を使えるようにするところから開始。これは cli さえ満足に動けばいいので xbuild を使ってビルドしたものを /opt/node-x.y.z とか /usr/local/node-x.y.z に置いて /usr/local/node として symlink 貼って、bin を PATH 通すということにした。もっと良い方法があったら教えてください。
これで node と npm が使えるようになったので、下のような package.json を作成。
{
"name": "rails project",
"repository": {
"type": "git",
"url": "git@github.com:rails_project/rails_application.git"
},
"devDependencies": {
"bower": "*",
"grunt": "*",
"grunt-cli": "*",
"grunt-bower-task": "*"
}
}
こいつらは dev 環境でしか動かさないやつなので、強気に '*'
指定にした。作成後に npm i を実行して node_modules にインストール。gitignore にも追加した。
続いて bower で扱いたい javascript などを書く bower.json を作成する。こんな感じ。
{
"name": "rails project",
"dependencies": {
"spin.js": "*",
"backbone": "*",
"underscore": "*",
"handlebars": "*"
},
"exportsOverride": {
"spin.js": {
".": "*.js"
}
}
}
ポイントは exportsOverride で、こう書くことで spin.js に含まれている jquery.spin.js も扱えるようにしている。書かない場合は spin.js の本体だけが bower の処理対象となる。
ここまできたら下のような Gruntfile を用意する
module.exports = (grunt) ->
"use strict"
grunt.initConfig
dir:
src: "src"
dest: "dist"
pkg: grunt.file.readJSON("package.json")
bower:
install:
options:
targetDir: "./vendor/assets/bower_components"
layout: "byComponent"
install: true
verbose: false
cleanTargetDir: true
cleanBowerDir: true
grunt.loadNpmTasks "grunt-bower-task"
grunt.registerTask "default", ["bower:install"]
return
突然の coffeescript. cleanBowerDir は true にするか悩んだけど、false だと試験的に入れてみた js が残り続けてそれらも展開されてしまうので、今のところ全消しするようにしている。ここまで来てからおもむろに grunt コマンドを実行すると
% grunt
Running "bower:install" (bower) task
>> Cleaned target dir /Users/hsbt/work/rails_project/vendor/assets/bower_components
>> Installed bower packages
>> Copied packages to /Users/hsbt/work/rails_project/vendor/assets/bower_components
>> Cleaned bower dir /Users/hsbt/work/rails_project/bower_components
Done, without errors.
という感じに、Rails.root の bower_components フォルダに bower が取得してきたファイル群、vendor/assets/bower_components に assets:precompile の対象となるファイル群が配置される。
最後に config/initializers/assets.rb に上記のファイル群を rails から見えるようにする設定を追加する。
Rails.application.config.assets.precompile << Proc.new do |path|
if path =~ /\.(css|js)\z/
full_path = Rails.application.assets.resolve(path).to_path
app_assets_paths = [
Rails.root.join('app', 'assets').to_path,
Rails.root.join('vendor', 'assets').to_path
]
app_assets_paths.any?{|app_assets_path| full_path.starts_with? app_assets_path }
else
false
end
end
Rails.application.config.assets.paths << Rails.root.join('vendor', 'assets', 'bower_components')
とある rails application では、まだ application.js に全ての js を統合するというところまではたどり着いてないので、Rails の AssetsHelper から見えたものは追加するという workaround を入れている。
実際に使う時は
<%= javascript_include_tag 'spin.js/spin' %>
というように vendor/assets/bower_components 直下のファイルパスを指定する。
これで deploy 時の assets:precompile タスクの手前で grunt を実行することで外部 js/css を bower によって取得してから precompile が実行出来るようになった。超絶便利。
なんでこれが良いかというと、ライフサイクルが異なるものを単一の方法で管理するのをやめるという所にある。よくある例としては、全て yum で管理しているので ruby の新しいバージョンが〜とか、全部 bundler でやるようにすると rails-backbone のバージョンアップで assets も予期せぬ更新が〜というのがある。部分部分で依存関係をバラバラにして、適切なツールで更新頻度を管理しつつ、必要なものを適時更新ていくのが技術負債をため込まないポイントと思う。
ご活用ください。
bower で参照可能なライブラリとして公開しないなら bower.json の ignroe はいらないみたいなので消した
開発者会議で $SAFE=2 と 3 は無効(無かったこと)にすべしという感じで話がまとまったので、まずは 3 から消してみた
https://github.com/ruby/ruby/commit/bbf440c90b036c733729b1a5c996978ac2adaa9d
盛大に壊れている、ということも今のところなさそうなので、引き続き 2 を無効にしていく。
今年も台東区から提供される無料の定期歯科検診を受けてきた。
結果としては歯石が発生しているものの虫歯はなしということでまずまず良好な結果で終わり。健康不良は歯からって感じなのでこの辺のメンテナンスは引き続き。
妻の両親が数日前から家を見に来ていて、今日帰るということなので羽田空港まで見送ってから浜松町と大門の近くにある MUNCH'S BURGER SHACK というハンバーガーショップで昼ご飯を食べてきた。
今まであちこちでこの手のグルメバーガーを食べたけど、パティは一番おいしかったかも。おすすめ。
インフルで寝込んでから、しばらく外に出かけるということをやってなかったので、リハビリついでに上野公園を散歩してきた。
最初、上野のやぶそばで昼食を、と思ったら予想を超えた行列でこりゃ無理だなという感じになったので、MUJI cafe に行ってプレートを食べるなどした。惣菜を3-4品選んで食べるという方式で、思っていたより美味しくて良かった。3品のプレートにすれば昼食か夕食をここで、という感じにはちょうど良さそう。
昼食の後は、上野公園に移動して東京都立美術館へ。企画展のプーシキン美術館展は休日にしては空いてたかなあ。月末にパリに行くので、フランスの風景画展はちょうどよかった。
企画展を見た後は、美術館で開催している他の展示をぶらぶら見てから徒歩で帰宅。上野公園はフィリピンのイベントがだいぶ盛り上がっていてカオスな感じだった。フィリピンの屋台が出てるのはわかるけど、沖縄やその他日本の地方であるとか、牛串とかが出てるのはとにかく謎。
いやー、面白かった。クリア時間は 30h ってところでした。一週目だとまだまだって感じで二週目からサブイベントも含めて遊ぶよねという流れらしいけど、いったんお休みで。
和風ゼルダって感じのシステムとアイテム(筆)の構成なので、その辺が好きな人ならこの値段以上には楽しめると思う。
仕事で使っている notion のアカウントは仕事で導入する前から個人のアカウントで使っていて、アカウントの切り替えが面倒なので個人のアドレスをそのまま仕事用のチームで使っていたけど、重い腰を上げてちゃんと会社用のアカウントにデータを移動した。
最初は Markdown に export してから import しようかと思って試行錯誤してたけど、notion の強みであるテキスト以外のデータ構造がすべて失われてしまうのであきらめた。別の方法をさがしたところ以下の方法でいけるっぽい。
これで、notion のデータ構造を維持したまま、新しいアカウントに移動できる。すべて移動した後に移行前のアカウントで workspace からの leave を選択すると完了。
notion 従来のサービスと、アカウントやデータに対するメンタルモデルが結構異なるので理解するのも頑張らないとなあ。
heroku で Docker image を使ってデプロイする機能があるのは知ってたけど、one-shot のジョブ以外にまともに使ったことがなかったので、Web アプリケーション、というか Rails アプリケーションをデプロイするにはどうすればいいんだ、ってのを時間をとって調べてみた。
結論としては以下の通り。まずは事前準備としてログインなどをする。
heroku login # heroku にログイン
heroku git:remote -a app-name # 最初の一回のみ実行
heroku container:login # registry にログイン
container:login
を別にやらないとダメなのがややダルではある。で、実際にイメージをデプロイするのは以下のような感じ。
docker build . -t app-name/base:latest # 最初の一回のみ実行、変更した場合は再度ビルドを行う
heroku container:push --recursive # Dockerfile.* を全てビルドして push
heroku container:release web # この例だと Dockerfile.web を公開、今後 job などが増えたらその都度置き換える
Dockerfile.*
が規約として role に勝手に変換してくれるのはよくできている。個人的な感想としては heroku-buildpack-* で動かしているプロジェクトも将来を見据えると全て Docker 準拠のイメージに変更した上でこのやり方に寄せて行ったほうがアプリケーションのポータビリティも向上するしいいように感じる。
k8s もこれくらい楽にアプリケーションをデプロイできればいいのになあ。それを作るのが技術基盤部門の仕事ではあるけど...。
1Password/1password-teams-open-source: Get a free 1Password Teams membership for your open source project というものがあり、Ruby のコミッタで使えると便利そうと思いシュッと申し込んだ。
https://github.com/1Password/1password-teams-open-source/pull/550
1日で accept されて team アカウントが使えるようになったので Ruby コミッタをポチポチと invite した。この辺、1password team は仕事でも使っていて、admin 業務として何をやればいいのかは知ってるので楽だった。
RubyGems や NPM のように、OSS 開発であっても、MFA が強制となったりと「これを個人が時間や金を払ってやんのか...」ということが増えているので、各々の勤務先・所属先によらなくても継続的に開発をするための支援が行われることは本当に尊い。1password えらい。
前回が 2023-04-15 なのでほぼ2ヶ月。予約してやってるので一定周期になっているのは当たり前なのだが、髪を切ってもらっている時間はぼーっと考え事をしたり、週のふりかえりとか来週のことを思案するのにとてもいい時間な気がする。割と疲れている時などにリフレッシュできるのがよい。
散髪のあとはいつもの高島屋の画廊をはしごしてから地下で夕食やデザートを購入、その後に丸善に行って新刊のチェック。棚の大部分が ChatGPT を使いこなす!みたいなできる Windows 本で埋まっていて面白かった。入門じゃなくて専門書籍の棚で Google を使いこなす!みたいなノリでこの先大丈夫なんかね。
この日は妻もでかけていて昼食は各自で、となったので八重洲の地下にあったラーメンを食べてみた。鳥チャーシューは大変美味しかったものの、麺がうどんみたいで自分好みではなかった。うーん。
6/22 に発売する FF16 の体験版は導入部がそのままとセーブデータも引き継げるということで、それならばとダウンロードしてプレイしてみた。
事前の情報だけだと、ほぼアクションゲームになってしまったようで、FF15 のように「これはやってしまったか」という気持ちで不安だった(それでも FF15 はそれはそれでそういうゲームという理解なら高評価)のだけど、体験版をプレイしてみたら勝利のファンファーレなど従来の FF 的なアセットは引き継ぎつつも、重厚なストーリーラインとアクション下手にもテンポ良いバトル体験を提供していてかなり高評価だった。
ストリーはダークファンタジーということで、テイストとしてはウィッチャー3が好きな人なら楽しめそうな気がする。製品版でどうなるかはわからないけど、パリィやドッジの時に入力アシストがでるのがとても良くてアクションが苦手な自分でもそれなりにスタイリッシュに戦えた気がする。6/22 の発売日が楽しみだな〜。
6/12 に Ruby 3.3.3 がリリースされた少し後に net-protocol gets removed with ruby 3.3.3 · Issue #26 · ruby/net-pop として net-pop の依存として存在する net-protocol が gemspec から消えているという報告があったので調べていた。
この辺は rbinstall.rb
かそこに関連する変更が影響しているというのが定番なので、ruby_3_3
ブランチのコミットログを眺めたら bundled gems でテストを実行するために default gems であるライブラリを更にインストールしないように gemspec を書き換えているやつが怪しいというというところまでを金曜に眺めたけど、この日は帰国直後で無理!って感じだったので土日を挟んでしまった。
https://github.com/ruby/ruby/commit/0a0338b06fcc3690346d5a3bec60bbcee85ec7ce
で、月曜にあらためて再現させる環境を作った上で、解決できるであろう rbinstall.rb への変更コミットをいくつか pick したら解決できた。
https://bugs.ruby-lang.org/issues/20581#note-2
この辺、nobu と自分だけがだいたい把握してるみたいな感じなので複雑なんだけど、もうちょい簡単にできないかなあ。簡単にしたつもりが気がついたら nobu が魔改造を加えてわからなくなる、というのを繰り返している。
上の bugs や net-pop の GitHub に書いたけど、ruby-build を使っている人はひとまず以下のようなパッチインストールで現象は解決できます。
$ rbenv install --patch 3.3.3 < <(curl -sSL https://patch-diff.githubusercontent.com/raw/ruby/ruby/pull/11006.patch)
k0kubun くんはリリースサイクルを早くするというのを頑張っているので、3.3.4 は近いうちに出る、と思います。
引き続き積んでいる地球の歩き方シリーズ。今回は Euruko 2024 が開催されるサラエボの隣のクロアチアとスロヴェニア。
Euruko 2024 は今年はスキップかな、という感じではあるもののボスニア付近には興味はあるので、ざっと読んだけど高速鉄道やバスなどを使っても、サラエボからドゥブロヴニクやスプリットまで7時間以上と、まあまあの時間がかかるくらいで中々に厳しいな、となった。
この辺、単独で旅行に行けばいいだけなんだけど、どうせ行くならとハシゴしたくなって結局行かない、となりがち。
A34 地球の歩き方 クロアチア スロヴェニア 2019~2020 (地球の歩き方 A 34)
ダイヤモンド・ビッグ社
¥492
Before...
# Koyo [同じことで困っています。 お手数でなければ、詳しいやり方を教えていただけると嬉しいです。]
# Kobayashi [It's very helpful. Thank you for sharing.]
# tec [悩んでいたことが解決できました。 ありがとうございました。]
# ok [大変助かりました。ありがとうございました!]
# yuzinet [Teamプランで作ってしまったアカウントで制限を超えたので個人アカウントに移そうとして 困っています。 Freeのプ..]