出力を入力へ

プログラミングに関する自分が考えた事を中心にまとめます

参加記録 AGC022

とりあえずAを解くことを目標にして,実際にAを解けたのでとりあえずは満足.

526th 851 -> 947

Bを解けるようになることも課題だけど, Aをもっと早く解けるようになることが優先かな.

A - Diverse Word

サンプルを見て,単語長で処理が違うことに気付く.

与えられた単語長が26未満であれば,未使用の文字のうち最小のものを最後に追記すればよい. 単語長が26であれば,後ろから見て辞書順で次の単語になるように文字を置き換えるかチェックすればよい.

より早く解けるようになるためには, 入力例4を参考にさっさと手元でシミュレーションして実装方法を検証すればよかった. String/charの変換処理とか,substringの使い方とか, 実装方法の確認に時間を掛けないようにするべきだった.

B - GCD Sequence

なんとなく解けそうで方針が立たなかった.

gcd(a, S-a) = gcd(a, S) であることはすぐに気付くも,そこから先が進まず. 要素を素数にする?みたいなアイデアを出すもそこから進まず.

Sを6の倍数とする案はまったく出てこなかった. 手元のシミュレーション不足だろうか. Nが小さいときを別扱いすることも思いつかなかった.

C - Remainder Game

まったくどうすればいいかわからず,早々にギブアップ.

Redmine4(Rails5)プラグイン開発ハンズオン無料セミナーに参加しました

Redmine4(Rails5)プラグイン開発ハンズオン無料セミナーに参加しました

Redmine4を見据えた,プラグイン開発ハンズオンに参加しました.

主催のアジャイルウェアさん,会場提供のテクマトリックスさん ありがとうございました.

agileware.connpass.com

参加者

ほとんどの人がPlugin開発経験なし, Ruby(Rails)も普段バリバリ書いている人はいない という感じでした.

自分も2-3個のRailsアプリを書いたことがあるだけでほとんど知見なし, Rails5についても情報収集はあまり行っていない (開発経験もない)というスキルでの参加です.

ハンズオンの流れ

connpassにアップロードされた資料の通りです. Cloud9上でRedmineの最新版(trunk)を動作させ, サンプルのプラグインとして チケットに「いいね」ができる いいねプラグイン を写経しました. また,途中途中で講師の方から注意点や 実際のプラグイン開発の知見を説明してもらいました.

ハンズオン内容・ポイント

プラグインチュートリアル

redmine公式wikiにもプラグイン開発のチュートリアル掲載されています. しかし最終更新が2014年で,Redmine 2系を対象としており, メンテされていません. 自分も以前プラグイン作成を検討した際に 情報の古さから断念しました.

加えて,チュートリアル中では rails generate redmine_plugin コマンドにてプラグインの雛形を生成して 作成するように支持がありますが, このツールのメンテがあまり行われておらず アジャイルウェアさんでもこのツールは利用していないとのこと.

このためプラグイン開発は手作業でファイルやディレクトリを作成して進めました. しかし,Rails開発に慣れていないこともあって 多くの参加者でミス・不具合が発生(自分も何度かミスしました). 正直なところ,このツールは必要だと思ったのですが 慣れてくるとどうでもよくなるのでしょうか.

プラグインHook

Redmineにはプラグイン向けに 処理を差し込めるポイントが準備されています. Hookリストはこちら.

ただし,このHookは数が十分ではなく, 大抵のプラグイン開発で必要なHookが足りない状況におちいるとのこと. このため,ベースとなるHookポイントにテンプレートの元となる記述を書き込み, 後からJavaScriptで書き換えるのがよいそうです.

プラグイン開発パターン

issue_patch

既存のクラスに機能を追加する(モンキーパッチを当てる)仕組み. ここではIssueに対するパッチで,iine_countersテーブルへの 参照を追加しています. 他にも本プラグインではuser_patchを利用しています.

query column

Issue一覧のカラムを追加する方法です. available_columnsに追加することで実現できます.

Rail5対応に必要な変更

ActiveSupport::Reloader

Rails4ではActionDispatch::Reloaderとして実装されていましたが Rails5でActiveSupport::Reloaderとクラスが変更になっています.

Module:prepend

Rails4ではalias_method_chainを利用していましたが, Rails5からは非推奨となり,prependを利用する必要があるそうです.

その他

redminerailsの再読み込みの相性があまりよくないらしく, 開発中においてプラグインを書き換えても自動で反映されず サーバ再起動が必要になったり,ならなかったりすることがあるそうです.

hatena-blog-modeのテスト

手軽にブログを投稿できるようにするために emacsで作成・ポストできる環境を構築する. hatena-blog-mode はまさにこれを実現するためのelispなのでこれを利用する.

追加でやりたいこと

ファイルの保存場所の指定

デフォルトではHOMEに作成され, 投稿が完了すると(投稿しなくても) 編集後にファイルを削除する. hatena-blog-backup-dir を指定することで 編集後にファイルを保存してくれる.

現在はローカルファイルの管理にhowmを利用しており, これは home-dir/YYYY/mm/ にファイルを作成する. これと統合して同一ディレクトリに作成するようにしたい.

またはhowmでファイルを管理してもいい(こちらの方がいい?).

ファイル名の指定

デフォルトでは hatena-new-entry.md となりこれをカスタマイズすることはできない. バックアップファイルは YYYY-mm-dd-HH-MM-SS フォーマット. これをhowmと同一の YYYY-mm-dd-HHMMSS フォーマットに変更(統一)したい.

ただし,現状ではローカルにて作成途中のファイルを管理することを想定していない様子.

記事名やカテゴリの自動設定

デフォルトでは投稿時( hatena-blog-post 実行時)に タイトルやカテゴリ,ドラフト等を指定できる. これをfront matterのように ファイル内で指定できるとさらに便利.

el-getレシピ化

とりあえず作成してみたけど上手くいかない. 先に自分の.emacsの整理が必要かも.

関連

minikubeのvm-driver noneでk8sを構築したときに外部ホストからアクセスを許可する

minikubeでkubernetesを構築するとき,
デフォルトではVirtualBoxVMを作成してその上で構築する.

一方で,この挙動はvm-driverオプションで変更することができ,
オプションに'none'を指定すると,minikubeコマンドを実行したホスト上に
kubernetesを構築することができる.

$sudo minikube start --vm-driver none
Starting local Kubernetes v1.8.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.

しかし,この方法では外部ホストからのアクセスを許可できず,
例えばダッシュボード画面を外部ホストから表示できない.

$ minikube dashboard --url
http://127.0.0.1:30000

VirtualBox上に構築した場合は
外部からアクセスできるようになっている.

(VirtualBox上に構築した場合)
$ minikube dashboard --url
http://192.168.99.100:30000

これに対処する方法として,
プロキシにより外部からアクセス可能な経路を作成する方法がある.

$ kubectl proxy --address=0.0.0.0 --accept-hosts='.*'
Starting to serve on [::]:8001

あとはminikubeを実行したホストに
ブラウザでアクセスすれば おなじみにダッシュボード画面にアクセスできるようになる.
(例: IPが192.168.1.61の場合 http://192.168.1.61:8001/ui など)

f:id:thaim:20171209122143p:plain

Redmineのサブプロジェクトを表形式で表示するView Customize pluginスクリプト

Redmineの各プロジェクトの概要ページにて,サブプロジェクトはコンマ区切りで表示される. これはサブプロジェクトが2-3個であれば気にならないが, 多くなるほどに見辛くなることが気になっていた.

これを解決するために,View Customize pluginを利用して サブプロジェクトの表示方法を変更する.

---追記ここから---

作成したサブプロジェクトが作成順に表示され, サブプロジェクト名ではソートされていないなかったので ソートするように修正しました.

thaim.hatenablog.jp

---追記ここまで---

続きを読む