コミケ告知

サークル活動の詳細は circle タグの記事へ。
ラベル 環境設定 の投稿を表示しています。 すべての投稿を表示
ラベル 環境設定 の投稿を表示しています。 すべての投稿を表示
2015年2月26日木曜日

MacType使用時の環境変数不具合

Windowsで綺麗なフォントを使うためのフリーソフトのひとつに、MacTypeがあります。
オープンソースっぽいところに置かれていてライセンスも記載されているものの、ソースは公開されていないという若干怪しいソフトです。セキュリティ系の怪しい挙動はまだ報告されてはいないようですが、どうも環境変数周りでバグを抱えている模様。

Windowsにはシステム環境変数とユーザー環境変数があります。

参考:.Windowsのシステム環境変数とユーザ環境変数

そしてPATHは本来ユーザー側で指定したところにも通るはずですが、なぜかMacTypeがそれを壊してしまうようです。ユーザー環境変数で指定したところにあるプログラムが起動できず、あちこちで不具合を起こすことがあります。起きる環境と起きない環境がありますが。

もし発生した場合、MacTypeの常駐プログラム(MacTray)の設定にある「Windows開始時に起動」を外すことで、これを回避できています。

なぜかユーザー側の環境変数PATHが消されて、システム環境変数PATHが「元々指定していたシステムPATH:MacTypeのバイナリへのパス」に置き換わっているので、MacTypeが勝手にPATHをいじる過程で何かが起きているのではないかと思われます。
2013年4月29日月曜日

F#のUnit Test、FsUnitの設定(VS2012)

問題点

F#でもテストを書こうと、NuGet経由でFsUnitをインストールしてみたものの、当初は動作させようとするとFileNotFoundExceptionが出て動きませんでした。"FSharp.Core, Version=4.0.0.0"というアセンブリを探していますが、手元のFSharp.Coreは4.3.0.0なのです。

解決方法

FsUnit公式のVisual Studio 11 Supportのところを読むと、Add-BindingRedirect projectnameを使えと書いてあります。
Powershellのコマンドのようですが、普通にPowershellを起動してもだめで、VisualStudioのメニューから起動する必要がありました。ツール→ライブラリ パッケージ マネージャ→パッケージ マネージャ コンソールです。


ここで Add-BindingRedirect コマンドを使えば、App.configが更新されて、無事FSharp.Coreを読み込めるようになりました。こんなつまらんことで、1時間以上はまりましたorz Microsoft(.NET)慣れした人なら、こんなことは無いのですかねえ。

FsUnitというよりNuGet自体のバッドノウハウでしょうか。なんだか微妙なパッケージ管理ですね…

FsUnitの設定

F# Library Projectは直接実行できないので、隣にF# Console Appのプロジェクトを作って、そちらでテストを書いています。普通にmain関数でテストを順々に呼んでいるのですが、このやり方は正しいのでしょうかね…?
Console Appについては昨日の記事参照。新規作成後、いらんファイル消して、NuGetでFsUnit入れて。さらにテストプロジェクトのReferencesを右クリックして、参照の追加→ソリューションからテスト対象のプロジェクトを追加しています。
2013年4月28日日曜日

F#アプリケーションを新規作成するためのテンプレート集

Visual StudioでF#を扱う場合、プロジェクトとして選択できるのは「F# Library」と「F# Tutorial」だけです。

以前、F#談話室(2)において、はじめてのF#入門コースとしてWindows Formを使ったアプリケーションを作る際には、Tutorialを改造して作り始める、ということをしていました。(記事→F#談話室(2) に参加してきた)

Microsoftのテンプレートギャラリーにある、F# Applications Windowsという拡張を入れると、新規作成でアプリケーションを作りやすくなるテンプレートがいくつかインストールされます。おそらくMicrosoft公式のものではないけれども、作者の所属がMicrosoft UKらしいので、どこぞの学生が適当に作ったレベルでもなさそうです。


F#Windows App (WinForms)

昔ながらのWindows Formを使うアプリのテンプレートです。
こんな感じの最低限のフォームが出ます。ラベルが1つある以外は何も機能はありません。
フォーム定義はMainFormfsにまとまっていて、ClientSize等のプロパティへの値代入と、ハンドラの定義のサンプルが多少書かれています。

F#Windows App (WPF)


Windows Formと似たような構成のWPF版。クリックすると文字が変わります。つまり、中央のコントロールのTextプロパティ変更と、ハンドラ追加のサンプルが最低限書いてあります。

F# Console App

コンソールアプリです。ただこれは、個人的にはあまり好きではありません。Argumentsという引数処理用の、おそらくテンプレート作者が書いた独自仕様のmodule(Argument.fs)が組み込まれていて、プロジェクトのテンプレートとしてはやや冗長です。
しかも、初期状態ではプロジェクトから「開始」を押してもちゃんと走らない。ソースコード中で「Required」と指定している第一引数がないのですぐ死んでいるのですが、ここはコンソールの窓に普通にHello Worldでも出して欲しかった。

雑感

入門向け勉強会やハッカソン、あるいは自分用の単純なGUIを作る際のベースとしては、良い感じではないでしょうか。

2013年4月15日月曜日

Cygwin+SBTでEnterキーが効かない場合の対処

現象

Cygwin上でsbtを起動は出来るが、Enterキーが効かないので何もできない。


原因

ターミナルの設定とSBT側の処理が合っていないのが原因。sbt-launch.jarを実行するときに、-Djline.terminal=jline.UnixTerminal を引数に渡せばよい。

Windows用のsbt…すなわち、msiでセットアップされるsbtや、アーカイブ中のwin-sbtには、$TERMがxtermのときだけ前述のオプションを渡すという中途半端な処理が書いてあるのだが、少しでも違うとそちらの分岐に行かない。(たとえばminttyのxterm-256color)


対処

  • sbt.batをいじって、必ず引数が渡るようにする
    •  if [ "_$TERM" = "_xterm" ]; の判定文をいじるとか
    • "$JAVA_CMD"のあとに直接書いちゃうとか (cmd.exeから呼んだときに大丈夫かどうか知らないが)
  • あるいは、環境変数 $JAVA_OPTS に指定する

2013年2月20日水曜日

rvmのfirewall対策 (gitのプロトコル変更)

Ruby言語は自分では書かないし使うこともあまりないのですが、バージョンが依存があってめんどくさいので、複数のバージョンをひとつの環境内に共存させるのが割と定番みたいです。 そういった環境管理ツールのひとつがrvmなのですが、内部でgitを呼び出すときに、HTTPではない(ファイアウォールで閉じられていることの多々ある)ポート番号を使おうとする上にエラー処理が適当なので困ります。

debian# rvm install 1.9.3-head
Installing Ruby from source to: /usr/local/rvm/rubies/ruby-1.9.3-head, this may take a while depending on your cpu(s)...
Cloning from git://github.com/ruby/ruby.git, this may take a while depending on your connection...

タイムアウト処理が一切ないようで、接続できなければ永遠に待ちます。gitのプロトコルが使えないのに待っていても成功することはないので、どうにかします。 rvmの中をgit://という文字列で検索をかけたところ、rvmのディレクトリ/config/dbに設定があり、こいつの中身を置換すればいいようです。

git:/をhttps:/に一括置換したところ、うまくいきました。
2013年2月16日土曜日

F#談話室(2) に参加してきた

今年も何か新しい言語に触ってみたいと思っていたところに、ちょうど入門コースのある勉強会があったので、参加してきました。
みんなで一斉に進めていきましょう形式ではなく、各自好きなことをやる集まりです。時間も夕方のLT以外は特に予定なく。

自分はF#の最初の一歩から始めたかったため、主催の七誌さんがビギナー向けとして用意してくださっていた資料を見ながら進めました。到着が17時、場所を閉めるのが20時、その間約3時間の参加でした。

環境のセットアップ (VS2012 ExpressでF# + Windowsフォームが遊べるまで)

無料のExpressでは、F#を使うまでに追加の作業が必要でした。F#を推進する気なら、最初から使えるようにしておけばいいのに…
  • Visual Studio 2012 for Webをインストール
  • Web Platform Installerを使って、追加コンポーネントとしてF#をインストール
    • 検索窓にF#と入れると、それっぽいものが出てくる
環境としてはここまで。チュートリアルでは、C#の入門編でやっているようにWindowsフォームを表示させて遊びたいのですが、Visual F#のプロジェクトはライブラリとチュートリアルしか選択肢がありません。実用的には、ライブラリの利用のみが提示されている状態。
そこで、「F#のチュートリアルプロジェクトを作成し、元から書いてあるコードを抹消する」という方法により、F#でWindowsフォームの使えるプロジェクト構成を安直に入手することが出来る、と教わりました。

はじめての えふしゃーぷ

リバーシ(オセロ)のサンプルをいじって、ネット上の文法のリファレンスを見ながら、途中パワーユーザーの方のLTを挟んで、実質90分ほどかけて、なんとか自分で関数が書ける程度にまで進みました。(いきなりリファクタリングっぽいところから入る性分もどうかと思いますが…)
以下がそのコードです…と丸ごと貼るには少々長かったのでリンクのみ。
→https://gist.github.com/moccos/4967078

  • 自作の関数を書いた
    • 関数の引数に型が指定した
  • enumっぽいもの(?)を使った
  • if式、match式を覚えた
  • for構文を使った
  • 配列を使い始めた  (まだよくわかっていない気がする)
こんな状態です。石をひっくり返すロジックがないので、まだリバーシではなく石置きですね。

間違えたところ

  • 関数の引数に型指定するとき、カッコをけちって失敗
  • 関数呼び出すときに、引数足りなくて失敗
後者、C言語やJavaならば「そんな関数/メソッドないよ」というコンパイルエラーが出るところですが、F#は部分適用が効くので、違った形でエラーが現れます。boolを返す関数 myfunc x y を用いて if (myfunc 1) then ... と書くと、「boolじゃなくてint->boolがあるので型がおかしいよ」と言われるわけです。
ここでmyfuncの返り値を真っ先に疑ってしまいました。関数型言語そこそこに使っているのに、これは恥ずかしい…(゚Д゚)

雑感

わりと無難な感じでF#の第一歩を踏み出せたような気がします。F#でいきなり何か作るのは難しくても、C#のプロジェクトの一部にF#のライブラリを混ぜ込むような感じで、徐々に浸食していけるように頑張ります。

言語自体については…mutableな変数が簡単に定義でき、クラスの概念があるので、Scalaと似たような立ち位置になるのでしょうか。JVMに対する.NET、Javaに対するC#、Scalaに対するF#、と。
ML系の言語が初めてなので、不慣れな文法や演算子にびっくりしながら進めてました。Erlangのときも、文法にはなかなか馴染めなかったので、新しい流儀に入るときはこんなものでしょうかね。全く抵抗を感じさせなかったScalaのすごさを改めて感じました。