2016年11月21日月曜日

Majestouch MINILAを輪ゴムで静音化

H/Wの話。
Majestouch MINILAの赤軸を購入しましたが、カチャカチャ音が気になったので静音化を。

結論から言うと、
・静音化出来た→キーの底打ちするときの音が解消
・しかし、ゴムの感触でメカニカル感が台無し→メンブレンキーボードの感触
という、キータッチを犠牲にしても静音したい方向け。

Cherry MX軸向けの静音化リング等あるようですが、今回使用したのはコレ。

オモチャの輪ゴム。off houseで50円という。

キートップの軸受け部分に


輪ゴムをねじってこんな感じに引っ掛ければ完了。


軸の部分は細工なし。


この単純作業を全てのキートップに対してやるのみ。。。
EnterとかSpaceキーはスタビライザー(軸以外のジョイント部分)があるので部品を無くさないように要注意!


2016年4月12日火曜日

ClosedXml その1

久々に投稿。
最近頻繁に使用することになったので、ClosedXMLについてのメモ。
使い方はググればすぐ出てくるので要点だけ。

ClosedXML

概要

  • http://closedxml.codeplex.com/
  • C#でExcelファイルを操作するライブラリ。
  • Excelファイルは2007以降(.xlsx)の形式に限る(.xlsmも使えたはず)
  • Excel(Office)のインストール不要。内部ではOpenXMLがExcelを操作している。
  • MITライセンス
  • 開発スピードはちょーゆっくり。フォーラムに質問投げても返信無し。。。

使い方

ググると色々出るから調べてね(はぁと
見つからない場合は公式ドキュメント
を見てみましょう。

使い方の注意点

これが本題。

メモリリークを起こすことがある

クラス:XLWorkbook, XLWorksheet, XLRangeのDisposeを忘れるとメモリリークすることあります。必ずusingしましょう。

上記以外にも該当するクラスがあるはずなので、何かしらクラスを使う際はIDisposableを継承しているかどうか確認しましょう。

セル結合すると隠れた値が保持される

結合されるセル(左上以外のセル)に値があると、値を保持したままセル結合されます。
ClosedXMLのCell.GetValue()で値が読めるけれども、Excel上で結合セルを見ても何も表示していない状態になります。
そしてExcel上でセル結合を解除すると隠された値が現れます。
また、セル結合内の罫線についても同様の動作をします。

各セルの値・罫線を空にしてから結合しましょう。

この問題、フォーラムに投げても返答なし。。。

まだなんかあったはず。。。見つけ次第随時追加します。












2014年1月26日日曜日

Trac(kanon)のインストール@CentOS6

CentOS6.5にインストール。

準備1:CentOS6のインストール

詳細はググってください。。。
また、インストール後は必ずアップデートを行って下さい。でないとTrac(Kanon)のインストールに失敗します。

準備2:ファイル取得

hg cloneしてインストーラ一式を入手します。
mercurialが入っていなければ
# yum install mercurial
で、ファイル取得
# mkdir /opt/setup
# cd /opt/setup
# hg clone http://kanon.ultimania.org/hg/KanonConductor/ 

インストール

以下、コマンドの先頭にsudoをつけるか、管理者権限があるユーザーで実行すること。

取得先に移動
# cd KanonConductor
上記フォルダ内にあるkanon-setupを編集します。kanon-setup内にリンク切れURLがあるので
  • ./kanon-setup を実行→実行中にDLに失敗する→kanon-setup内の失敗したURLを編集する
または
  • kanon-setup内のURLがリンク切れでないかを確認する→リンク切れなら修正する
という泥臭い作業を行います。
その後
#./kanon-setup
でインストール。
途中、y/nの入力を促されますが、そこは必要に応じて。
しばらくしてから「インストール完了しました。」が出てコマンドプロンプトに戻ればインストール成功。
kanon-create-project コマンドでプロジェクトを作成しましょう。

##
しかし何でインストール確認の文言(しかも先頭2〜3行だけ)がこういう口調なんだろうか。
このコマンドはKanonをインストールするよ。
既にkanonインストールされている場合は、上書きされて消えちゃうの。
  

補足情報

インストール後、メニューで 管理 > GanttCalender - 休日の設定 を選択し、休日を追加しようとすると、以下のようなエラーが出ます。
[エラーメッセージ]TypeError: cannot concatenate 'str' and 'NoneType' objects 
どうやらデータベースに問題がある模様なのでtrac.dbを修正して直します。
SQL使うのめんどかったので、SQLite Database Browserで直接編集。

  • テーブルを追加

  • インデックスを追加


  • レコードを追加

こんな感じでレコードを一通り追加していけばOKです。
(trac.db修正内容の参考元 - http://blue21.ddo.jp/web/osgyo/trac/trac5.html)


2013年12月7日土曜日

Kanon(Trac Lightning)のプロジェクト移行手順

ちょっと試してみたのでメモ。
サーバーのPCを変更する等で、Kanon(Trac Lightning)のプロジェクトを他のPCのKanonに移行する手順です。
KanonとかTrac Lightningについての詳細はググって調べてみてください。
以下、Linux(CentOS6)上で動作させています。
※以下の手順は一例です。やり方は色々あるはず。
※Kanonのインストールについてはまた別途。。。

移行データの準備

以下、移行元PCで実行します。

各プロジェクトの移行データ

各プロジェクトのTrac,SVNのデータを移行用ファイルに出力します。
以下のように、trac-adminとsvnadminのhotcopyまたはdumpを実行します。
これを各プロジェクト名について実行します。
trac-admin /var/opt/kanon/trac/(プロジェクト名) hotcopy (プロジェクト名)_trac
svnadmin dump /var/opt/kanon/svn/(プロジェクト名) > (プロジェクト名)_svn.dmp
#trac-adminはパスが通ってなかったので/usr/bin/trac-adminとして実行したはず。。。

ユーザー情報

Kanonが管理しているユーザー情報は上記のファイルには存在しません。
/etc/opt/kanonのkanon_users.htdigestとsvnauthzが必要になりますので、どこかにコピーしておきます。

移行データを反映

以下、移行先PCで実行します。

各プロジェクト

まずSVN側を。
svnadmin create /var/opt/kanon/svn/(プロジェクト名)
svnadmin load /var/opt/kanon/svn/(プロジェクト名) < (プロジェクト名)_svn.dmp
次にTrac側を。
cp -Rf (プロジェクト名)_trac /var/opt/kanon/trac/(プロジェクト名)
コピー後、/var/opt/kanon/trac/(プロジェクト名)/conf/trac.iniの中身を確認し、移行前のIPアドレスや存在しないパスがあれば修正します。

Tracの更新(Tracのバージョンが最新であれば実行不要と思います)。
trac-admin /var/opt/kanon/trac/(プロジェクト名) upgrade
trac-admin /var/opt/kanon/trac/(プロジェクト名) wiki upgrade
 SVNと同期。ちなみに「trac-admin /var/opt/kanon/trac/(プロジェクト名) resyncではエラーが出て実行できません。
trac-admin /var/opt/kanon/trac/(プロジェクト名) repository resync ""

ユーザー情報

コピーした移行前のkanon_users.htdigestとsvnauthzを/etc/opt/kanon配下にコピー。

移行データのアクセス権設定

以下の通り実行。
chwon -R apache:apache /var/opt/kanon/trac/(プロジェクト名)
chwon -R apache:apache /var/opt/kanon/svn/(プロジェクト名)


反映完了

apache再起動。
/etc/init.d/httpd restart

2013年12月2日月曜日

TinyPG(a Tiny Parser Generator) その2

ちょっと間が空きました。TinyPGの続きを。

構文解析ツールの中でもTinyPGが良いと思うところは、定義した構文解析の処理をC#またはVBのソースコードで生成してくれることです。アプリ開発で構文解析機能を作る場合、専用のライブラリを用意する必要は無く、TinyPGで生成したソースコードを組み込めば実現できるわけです。

ソースコードの生成

前回の続きになります。
前回で構文解析したときに(メニューでBuildを実行したら)、実はソースコードが生成されています。
構文解析定義の@TinyPGの行に定義してある設定に従い生成されています。



Languageには"C#"か、"VB"が指定できます。生成するソースコードの言語の種別です。
OutputPathにはソースコードの生成パスを指定します。ちなみに、末尾に¥を付加しないと最後の¥から末尾までをファイル名として生成します。つまり上記の画像の設定ではC:¥配下にwork***.csのようなファイルを生成します。

さて、OutputPathで指定したパスにソースコードが4ファイル生成されているはずです。
それぞれ以下の機能を持ちます(LanguageがC#の場合)。

Parser.cs、Scanner.cs、ParseTree.cs
解析対象の文字列を読み込み・解析・分解・生成(コンパイル)します。

TextHighlighter.cs
解析対象の文字列を解析し、構文解析定義に定義した配色設定に従った情報を生成します。TinyPGで構文解析すると、Expression Evaluatiorにある文字列が構文解析定義の記述に従い配色されますが、その仕組みをC#ソースにしたものです。
RichTextBoxで使用可能な配色情報を用意します。

アプリケーションへの組み込み

実際にアプリケーションに組み込みます。
上記のソースコードをC#プロジェクトに組み込んだ後、以下の記述を実行したい箇所に記述します(以降、必要なusingは省略しています)。
// 解析したい文字列
string input = "... your expression here ...";
// 解析
// 結果はParseTreeに格納される
Parser parser = new Parser(new Scanner());
ParseTree tree = parser.Parse(input);
これで任意の文字列を解析できます。
TextHighlighter.csについては以下のような記述を行います。
// 解析したい文字列
string input = "... your expression here ...";
// 解析処理のインスタンス生成
Scanner scanner = new Scanner();
Parser parser = new Parser(scanner);
// 表示させたいrichTextbox、各インスタンスを指定する
TextHighlighter highlighter = new TextHighlighter(richTextbox, scanner, parser);
解析したい文字列への配色が不要ならば、上記は記述しなくとも解析自体は可能です。

解析結果

解析結果はParseTreeクラスに設定されます。PaeseTreeクラスは木構造に従い再帰的に子を持ちます。TinyPGのOutputにあるParse Tree表示と同様のデータ構造です。
詳しくはまた次回。。。

ソレデハ。 

2013年11月2日土曜日

TinyPG(a Tiny Parser Generator)

やっと一発目。TinyPGを。

TinyPG(a Tiny Parser Generator)とは、Herre Kuijpers氏が作成したC#(またはVB)パーサージェネレーターです。
LL(1)に基づく構文解析を行うソースを生成します。
※LL(1)とか構文解析とかの意味は各自ググってください。

実行ファイル入手


tinyPGの公開サイトからファイルをダウンロードします。
とりあえず動かすだけならサイトの「Download TinyPG v1.3 binaries - 88.9 KB」をクリックしてダウンロード&任意のフォルダに解凍しましょう。
※ダウンロードするにはCODEPROJECTのアカウントが必要です。

実行


解凍したフォルダの中のTinyPG.exeを実行します。

画面が表示されるので、メニューのView - Outputを選択します。同様に、View - Expression evaluatorを選択します。
画面が三分割されます。それぞれ、
左上 :構文解析定義
左下 :解析したい構文
右半分:解析結果
を表示します。

構文解析してみる


実際に構文解析してみます。手っ取り早くサンプルを使ってみます。
メニューのHelp - Examplesを選択すると構文解析定義のサンプルがいくつかあります。今回はSimple Expression calculator(簡単な計算式の構文解析)を選択します。

選択すると構文解析定義がメモ帳(とか)で表示されるので、TinyPGの画面左上にコピペします。
ついでに、画面左下に
(1-2)+(3*4)
と入力しておきます。

ここまでできたらF5キーを押下するか、メニューのBuild - Generate & Runを選択します。途中、構文解析定義を保存するためのダイアログが表示されますが、適当なパスに保存して問題なしです。

構文解析結果


上記を行うとOutputに解析結果が出力されます。


一番下の行に
Evaluating...
Result: 11
と表示されますが、これが(1-2)+(3*4)の構文解析した結果になります。
また、Parse Treeには字句をどうやって分解したか、構文木を表示します。

構文解析定義をどうやって記述するかとかは後ほど。。。
ソレデハ。 

2013年10月26日土曜日

ブログ始めました

ブログ始めました。ソフトウェア開発の技術情報について色々と書いていきます。特にマニアックなの(他の人が書いていなさそうなもの)を中心に。