カテゴリー別アーカイブ: 備忘録

RedmineのMarkdownで画像サイズを指定できるようにした

こんにちは、Sayahamittです。

研究室のwikiとしてRedmineを使い始めたはいいものの、wikiでMarkdown記法を使うようにすると、記事中に掲載する画像サイズを指定できないという問題に行き当たりました。
wikiに掲載する画像をいちいち画像編集ソフトでリサイズするのは億劫なので、Redmineのソースコードに手を加えて対応しました。

以下の手順でRedmineのwikiでMarkdown記法でも画像サイズを指定できるようになります。

1. Redimineのルートディレクトリを調べる(私の環境では”/var/lib/redmine/lib/redmine/”)

2. redmine/lib/redmine/wiki_formatting/markdown/formatter.rb 内、HTMLクラス内、imageメソッドを以下のように編集する。

    def image(link, title, alt_text)
      return unless uri_with_safe_scheme?(link)
      if link =~ /^(.+?)\s*=+(\d+)(?:px|)$/
        # e.g. ![alt](url.png =100px)
        # e.g. ![alt](url.png =100)
        %(<img src="#{$1}" style="max-width: #{$2}px" alt="#{alt_text}">)
      elsif link =~ /^(.+?)\s*=+(\d+)(?:px|)x(\d+)(?:px|)$/
        # e.g. ![alt](url.png =30x50)
        %(<img src="#{$1}" style="max-width: #{$2}px; max-height: #{$3}px;" alt="#{alt_text}">)
      else
        %(<img src="#{link}" title="#{title}" alt="#{alt_text}">)
      end
    end

3.redmine/tmp に restart.txt を作成し、ブラウザでRedmineにアクセス (Redmine再起動)

 

以上の手順を実行すると、以下のMarkdown記法で画像サイズを指定できます

!(タイトル)[画像ファイル名(uri) =横幅]
!(タイトル)[画像ファイル名(uri) =横幅px]
!(タイトル)[画像ファイル名(uri) =横幅x縦幅]
!(タイトル)[画像ファイル名(uri) =横幅pxx縦幅px]

上記のrubyコードは以下に示すredcarpetのGithubに建てられているissueスレッドを参照しました。適用先となるRedmineの当該ファイルのGithubページも列挙しておきます。
redcarpet issue 487 “Image resizing”
Redmine “lib/redmine/wiki_formatting/markdown/formatter.rb”

 

C++で拡張ユークリッド互除法

こんにちは、Sayahamittです。

 

だいぶご無沙汰してしまいましたが久々のブログ更新です。

 

2つの整数の最大公約数を高速に求められるユークリッド互除法をなんとなく実装してみました。

意味は…ないです…w

もしかしたらそのうち簡単なRSA暗号とかもやってみるかも。

 

テクニカルなコーディングはできないので、教科書に書いてあったアルゴリズムをそのままクラスとして実装しました。

続きを読む

Java 標準入力待ちでスレッドをブロックさせない方法

こんにちはSayahamittです。

 

Javaでマルチスレッドなコードを書いている時に、あるスレッドでユーザーから標準入力待ちをする必要がありました。さらに、そのスレッドは他のスレッドと連動していて、他方のスレッドが終了したらそのスレッドも即座にかつ自動的に終了しなければなりません。

 

ご多分に漏れず僕はソッコーで躓きました。二日間も。

 

問題になったのはSystem.inを読むBufferdReaderでreadline()を行うと標準入力待ちになり、ユーザーがEnterキーを押してくれるまでそのスレッドの終了はおろか、interrupt()も出来ないことです。

しかし、僕が想像もしなかったスマートな解決策がありました。

続きを読む

UTF8なstring入れたらShiftJISなstring出てくる関数作った

こんにちは、Sayahamittです。

 

Macで書いていたC++コードをWindows VC++に持ってきたら文字コードでハマったのでメモしておきます。

 

今回は引数にUTF8エンコードのstd::string型文字列を取り、ShiftJISエンコードのstd::string文字列を返す関数と、その逆をやる関数を作りました。

バリバリのWindows API依存コードです。ごめんなさいm(__)m

 

Windowsでは内部的な処理にはUnicodeが使われているにも関わらず、コンソールにおける入出力を始めAPIなど、ユーザーとのインターフェースには未だにShift-JISが使われているようで、UTF8など多バイト文字を直接利用出来ません。

WindowsAPIなんて殆ど触ったことがない自分も、もれなくこの問題に引っかかりました。

Win API を利用する場合にはMultiByteToWideCharメソッドとWideCharToMultiByteメソッドを用いてUTF8とShiftJISの相互変換が実現できるようです。

続きを読む

C言語で逆ポーランド記法電卓を作った

こんにちはSayahamittです。

さて今回はC言語で逆ポーランド記法(スペース区切り)電卓を作ってみました。

文字列の動的確保とか、リストでスタックを実装したりとかしたので備忘録として残しておこうと思います。

(…Twitterクライアント?…(やってますよ…OOPとC++難しい…))

 

仕様っぽいもの

今回作った電卓では、四則演算が逆ポーランド記法(スペース区切り)によって書かれた数式を文字列入力として受け取り、スタックを利用して計算することにしました。和差積商以外の演算や関数はエラーを返すこととします。

また、入力桁数に制限があるとつまらないので、mallocを使って文字配列を動的確保し、

それに伴いスタックも双方向リストを用いて動的に伸縮できるように実装することとしました。

動的確保のアルゴリズムは、文字列を伸ばす場合には容量が増えた後の全体を格納するのに必要なメモリを丸々全部確保し直すものとしました。

続きを読む

Xcodeで黒背景を使う場合にカーソルを目立たせる方法

こんにちはSayahamittです。

今回もつまらない備忘録…

 

私はXcodeのエディタを黒背景にするため”midnight”テーマを使っているのですが、これだとマウスカーソルが極端に見えづらくなっていまいます。

しかし、ググったら、それを一発で解決する方法を知ることが出来ました。

私が行き着いたのはこのページ Better Xcode ibeam cursor

名前そのまんまですねw

続きを読む

WiresharkのInterface ListにNICが表示されない場合

UbuntuにWiresharkをインストールしたはいいものの、root以外ではネットワークインターフェイスを参照してくれませんでした。これはLinuxのパーミッションの挙動として正常であるようですが、Wiresharkを起動するのにわざわざ端末からsudoするのはメンドクサイ…(´・ω・`)

 

調べてみると、パケットキャプチャの為にネットワークインターフェイスを利用するプログラムの本体は/usr/bin/dumpcapで、こいつにネットワーク系のケーパビリティを与えれば上手く行くそうです。

 

忘れそうなのでメモメモ…φ(..)

続きを読む

UbuntuのUnity-Launcherのショートカットから任意のコマンドを実行

最近はちまちまとコードを書くことが多いので、基本的にUbuntu環境を使っているのですが、時としてWindowsのようにデスクトップに置いたショートカットから引数を与えてプログラムを起動したくなることもあります。

 

「コマンドに引数を入力するのが面倒ならエイリアスを定義すればいいじゃない」という指摘は御もっともなのですが、端末エミュレータを引数付きで起動したいときはそれでは困るというわけで…

僕は端末エミュレータとしてTerminatorを好んで使っているのですが、こいつ、画面を水平、垂直に区切って、レイアウトを作ることができて、そのレイアウトを保存し、更に起動コマンドに保存したレイアウトの名前を引数として与えると最初からそのレイアウトのまま起動してくれるという便利な奴なんです。

 

でも…「コマンドに引数を与えるって事は、一度は別の端末を立ち上げないといけないよね…?」

続きを読む

Makefileって難しい

アホみたいなことで一日くらい潰したので備忘録。

C++でCUIのツイッタークライアントを作るべくここ最近ずっと無駄な苦労を重ねているSayahamittです。

 

作業しているフォルダにソースファイルが増えてきて、そろそろGitで管理すると面白いかな? なんて思ったのですが、作業フォルダにはヘッダファイルとボディファイルがディレクトリに別れず直に散らばっていて、しかもそのディレクトリでコンパイルするものだからオブジェクトファイルと実行ファイルも散乱しているし、挙句の果てには実験的なコードとその実行ファイルまで同じディレクトリに同居しているという始末…

 

さすがにこれではGitで管理しようにも監視下に置くファイルとそうでないファイルが同じディレクトリに混在してしまって面倒な事になりそう…

 

ということで、ソースファイルとコンパイル中間ファイルをディレクトリに分けて、Makeでコンパイルすることにしました。そうすればMakefileにcleanも書けるのでディレクトリに溜まったゴミファイルの削除も楽になって一石二鳥!!…と、簡単には行きませんでした。(;´д`)トホホ…

続きを読む

Linux環境でCapsLockをCtrlにする【メモ】

自分は常用の環境をLinux(Ubuntu)にしてまだ日が浅いですが、某Eエディタを使っている所為もあってかAキーの隣にCapsLockではなくてCtrlが欲しい気分が高まってきました^^;

ググってその通りにやっただけですが、忘れた時に調べ直すのも面倒なので記事にします。

続きを読む