2013年7月19日金曜日

clang 3.3 Ubuntu12.10へインストール

前回の日記
clangのインストール
で中断したclangのインストールをまたやってみました。

日本の諺に「急がば回れ」というのがありますが、今回は正攻法にソースをダウンロードしてビルドするという方法で行いました。パッケージのインストールはどこかの誰かがビルドしてくれたものをインストールする訳なのですが、微妙に違っただけでも出来ないことがあるので、やはりこの方法がいいのかなと思いました。

参考にしたのはこのブログです。
[C++11対応記念] clang/LLVMのインストールとGMPを使って円周率ベンチ。

ダウンロードしてきたのはこの3つです。
llvm-3.3.src.tar.gz LLVM source code
cfe-3.3.src.tar.gz Clang source code
compiler-rt-3.3.src.tar.gz Compiler RT source code

適当にllvmというディレクトリを作ってその中にllvm-3.3.src.tar.gzを展開します。
その展開したディレクトリ中のllvm/toolsにcfe-3.3.src.tar.gzを展開します。
このとき
mv cfe-3.3.src clang
とディレクトリ名を変えてやりました。

同じようにprojectsの下にcompiler-rt-3.3.src.tar.gzを展開します。
また
mv compiler-rt-3.3.src compiler-rt
と名前を変えてやりました。

llvm
tools
clang
projects
compiler-rt

という感じです。


以上の準備をしてから次のコマンドを順番にやりました。
./configure --enable-optimized --enable-jit
make
make check
make install
と言っても初心者なので何度か失敗しました。

gccより体感でインストール作業が半分か3分の1の時間で終わった感じです。
gccのコンパイル時には大量のワーニングが出たのですが、clangはそうでもなかったです。

これからgccとclangでコンパイルして比べてみたいと思います。

追記
ビルドに使ったディレクトリのものとインストールされたものでサイズ、時間が何故か違います。

62121304  7月 19 14:00 ~/llvm/llvm-3.3.src/Release+Asserts/bin/clang
51831756  7月 19 15:10 /usr/local/bin/clang

2013年7月17日水曜日

clangのインストール

Ubuntu12.10が手元の環境なんですが、これがLTSでない影響があるみたいです。
clangをインストールしようとしたいのですが、ソースからコンパイルするのはあまりにも時間がかかるし出来たら避けたいです。

UbuntuにCLANGをインストールする

これが一番簡単な方法なのでしょうが、これインストール出来るclangはバージョンがやや古い様です。

%sudo apt-get install clang
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libgc1c2 linux-headers-3.5.0-17 linux-headers-3.5.0-17-generic
これを削除するには 'apt-get autoremove' を利用してください。
以下の特別パッケージがインストールされます:
  binfmt-support cpp-4.6 g++-4.6 gcc-4.6 gcc-4.6-base libclang-common-dev libffi-dev libllvm3.0
  libstdc++6-4.6-dev llvm-3.0 llvm-3.0-dev llvm-3.0-runtime
提案パッケージ:
  gcc-4.6-locales g++-4.6-multilib gcc-4.6-doc libstdc++6-4.6-dbg gcc-4.6-multilib
  libmudflap0-4.6-dev libgcc1-dbg libgomp1-dbg libquadmath0-dbg libmudflap0-dbg binutils-gold
  libstdc++6-4.6-doc llvm-3.0-doc
以下のパッケージが新たにインストールされます:
  binfmt-support clang cpp-4.6 g++-4.6 gcc-4.6 gcc-4.6-base libclang-common-dev libffi-dev
  libllvm3.0 libstdc++6-4.6-dev llvm-3.0 llvm-3.0-dev llvm-3.0-runtime
アップグレード: 0 個、新規インストール: 13 個、 削除: 0 個、保留: 407 個。
48.0 MB のアーカイブを取得する必要があります。
この操作後に追加で 134 MB のディスク容量が消費されます。
続行しますか [Y/n]? n
中断しました。

gcc4.8.1がはいった環境にいまさらgcc4.6とclang3.0を入れるのもどうかと思い、インストールを中断しました。

Ubuntu 12.04LTSに clang 3.3インストール

sudo apt-get install clang-3.3 clang-3.3-doc libclang
-common-dev libclang-dev libclang1 libclang1-dbg libllvm-3.3-ocaml-dev libllvm3.3 libllvm3.3-dbg lld
b-3.3 llvm-3.3 llvm-3.3-dev llvm-3.3-doc llvm-3.3-examples llvm-3.3-runtime
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
 clang-3.3 : 依存: libclang-common-dev (= 1:3.3~svn181304-1~exp1) しかし、1:3.4~svn182727-1~exp1 は インストールされようとしています
 libclang-common-dev : 依存: libllvm3.4 (= 1:3.4~svn182727-1~exp1) しかし、1:3.4~svn186465-1~exp1 はインストールされようとしています
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。


やはりclang3.3を入れたいところなのですが、Ubuntu12.10と12.04の違いなのかエラーとなり入れられませんでした。

12.04を作り直すのもものすごく手間がかかるし、今回はインストールは中断しました。
はやく簡単にインストール出来るようにならないかなー。

2013年7月13日土曜日

ホリエモンとGoogle日本語入力

この記事をみて興味を持ったのでちょっと調べてみました。

第9回 クラウド時代の日本語入力システム - ホリエモンのコレいいかも!

 これ、使ってみるとわかるがすごく便利。グーグルでよく検索される文字などをクラウド上の辞書データでアップデートしており、最近出てきた新しい言葉でも変換候補として表示されるなど、思った以上に使い勝手がいいのである。
~中略~
 スマホの操作に常日頃から慣れてしまい、予測変換やクラウド辞書などの利便性がないと生きていけなくなっている自分に気付いた。こういうのが当たり前になってくると、クラウドにつながっていないのに日本語入力させるガジェットはクソだなーとまで思ってしまうねぇ……
このコミックに書いてある内容によると、

・Google日本語入力の辞書データは検索エンジンそのものにバイナリデータとして入っている。
・Google日本語入力の動作はWebサーバにアクセスせずにローカルで完結している。
・Google日本語入力の辞書データはGoogle検索で得られたindexから作成されている。
・Google日本語入力は自動的に検索エンジンのアップデートを行なっている。

ということが読み取れました。


別のページに

・クラウド手書き入力は Google のサーバと連携して手書き文字を認識します。

と記述はありますが、クラウド上の辞書データ~という記述は少々誤解を与えてしまう記述じゃないかなと思いました。この日記がホリエモン本人が書いているのかはわかりませんが。

なお、わたしはGoogleの回し者でもなんでもないので、この解釈に誤解があるかもしれません。この日記の他のページを見ていただくと分かる通り、特にGoogle賛美した日記を書いている訳でもありませんので。

2013年7月7日日曜日

どのUNIXシェルを使ってますか?

今日も出かけないといけないので、ごく短い記事を書きます。
皆さん、Unix LikeのOSを使っている時にどのシェルを使ってますか?
私はずっとcshを使ってましたが、最近tcshに置き換えました。
でもtcshってスクリプトには向いていなくて、処理が遅いそうです。
まあスクリプト内ではkshとかを指定されてるので問題ないですけどね。

とあるサーバ上でwコマンドでどのシェルを使っているかを見たところ、

bash  17人
ksh    18人
ksh93 1人
tcsh   5人
zsh    4人

bashが人気の様ですね。でもkshが18人もいたことにも少し驚きました。
また帰宅したら記事を追加したいと思います。
それでは。

私個人としてはもともとcshから使い始めたので、設定ファイル等がcsh用の物があり、わざわざほかのシェルに乗り換えるほどのことはないかなと思っています。もともとシェルスクリプトは使わないほうですし、cshが遅いと言っても最近のコンピュータでストレスを感じるほどではないと思います。

でもbashは試しに使ってみると、ヒストリ機能はtcshと同じような使い勝手だし、それほど不便は感じませんでした。zshはなんか最初にメニューが出た来た時点でやめました。ksh系はスプリプトが得意なシェルですので、やっぱりできる人は使っているみたいなイメージはあります。上の例であげたのでもtcshだけcsh系ですしそういう意味ではマイナーなのかな。




2013年7月3日水曜日

gcc4.8.1

先週の事になるのですが、手元のVmware上のUbuntu12.10にgcc4.8.1を入れてみました。
まずUbuntuソフトウエアセンターでgccがあるか確認しました。


現在インストール済み(4.7.2)という表示です。
このUbuntuをVM上にインストールしたときに入れたままです。

次にソフトウェアパッケージはないか検索してみました。
4.7はある様ですが、4.8.1はまだ無い様ですね。

しょうがないのでgccをダウンロードしてコンパイルすることにします。
Googleで"gcc4.8.1 Linux"とかで検索してみると以下のブログ記事が参考になりました。

さくら VPS 上に gcc4.8 をインストールする方法

ほぼこの記事どおりの手順で進めたのですが、いくつかインストールされていないものがありました。
sudo apt-get install bash
sudo apt-get install autogen
sudo apt-get install runtest
sudo apt-get install dejagnu

もしかすると他にも入れたかもしれませんが、コマンド履歴が残ってなくて、
わかっているのでは上のインストールをしました。
VM上でわたしのホストマシンもそんなにスペック良くないので丸1日くらい時間かかったと思います。

最後に確認のため適当なサンプルをコンパイルしてみました。

#include <iostream>
#include <string>
#include <vector>

using Words = std::vector<std::string>;

std::ostream& operator<<(std::ostream& os, const Words & words)
{
    for (const auto & word : words)
    {
        os << word << " ";
    }
    return os;
}

int main()
{
    Words words = { "Hello", "from", "GCC", __VERSION__, "!" };  
    std::cout << words << std::endl;
}

g++ hello.cc -o hello -std=c++11
 ./hello
Hello from GCC 4.8.1 !

うまくインストール出来た様です。

2013年6月28日金曜日

新しいgooglemaps(続々編)

・45゜表示がなくなった。
 古いマップでは対応していたのに新しいGooglemapsでは表示できない。
古いマップで45゜で表示した例

新しいgooglemapsではまだ45゜で表示出来ない。

もっともこれは私のPCがライトモードで表示しているせいかもしれませんが、古いGooglemapsでは出来たことを新しいGooglemapsで出ないのは不便です。

・短縮URLのボタンが見当たらない
 上の古いGoogleMapsで赤い□で囲んだ短縮URLのボタンが新しいGooglemapsでは見当たりません。この機能は便利だったので早めに対応して欲しいです。

(新旧Googlemaps共通)
 小学校の名前の表示がおかしい。
Googlemapsの新旧どちらでも確認したのですが、小学校等の表示がその小学校を管轄している教育委員会の表示になっている場合があります。地図の縮尺を変えると◯◯教育委員会◯◯小学校等となっています。この地図の情報はZENRINが提供している様ですが、同じようにZENRINが提供している他のオンライン地図ではこの様な表示にはなっていません。これはわたしの勝手な想像なのですが、ZENRINから受け取った地図データをGooglemaps上のデータして加工する過程で何らかの手違いがあってこうなったのではないかと思われます。

新しいgooglemapsで小学校の表示がおかしい例

おなじZENRINからデータ提供を受けているgooの地図では普通の表示になっています。

Googlemaps使いやすいマップだと思いますが、まだまだ完成度が低いと言わざるをえないとおもいます。
なお投稿時に素人である私がわかる限りで書いていますので、解決策等あるかもしれませんが、それについては一切責任を追わない事を最後に書いておきます。

2013年6月21日金曜日

新しいgooglemaps(続編)

前回、いろいろ注文をつけた新しいgooglemapsですが、諦めずに使ってみました。

インドアmapに新しいgooglemapsは現時点では対応していないようです。


以前のgooglemapsに切り替えると表示されます。


前回も指摘したヘルプについてですが、どうも不親切な感じがします。

「ヘルプとフィードバック」はマップ画面の時に表示され、「問題の報告」はストリートビューの時に表示されます。その事がどこにも説明されていないからです。ヘルプ自身についてのフィードバックは画面コピーを取れないので送信出来ません。

経路検索は色々工夫のされてる様です。

日本の大都市圏ではこの例のように複数の鉄道会社が同じ区間を、価格、経路、スピードで競争している場所があります。前のgooglemapsでは様々な経路を検索出来たのですが、今回のはいまいちまだ慣れません。慣れがまだ足りないのか、もう少し検証してみる必要があると思います。
例に示したのは大阪、神戸間の大まかには3つの鉄道会社が競合している区間です。


また時間が出来れば試してみたいと思います。

2013年6月18日火曜日

新しいgooglemapsを使ってみました。

新しいgooglemapsを使ってみました。

ごく普通の日本人のユーザの感想を言わせてもらいます。
これは個人の感想であり、この感想によって生じたいかなる損害、不利益についても責任を追わないことを踏まえた上で御覧ください。

結論:まだ完成度が低いです。改善されるまでもう少しまったほうがいいと思います。

・パフォーマンスが悪いです。
 普段使っているコンピュータではそうでもなかったのですが、私のよりいいCPUとGPUのマシンを 借りて使ってみた時に遅さを感じました。

・操作性が私には使いづらいと感じました。
 特に不便だと感じたのはストリートビューの画面の操作性です。従来のストリートビューで出来たカーソルボタンでの操作が出来なくなっています。そのため画面の端に表示される小さなコンパス表示をクリックして方向を変えないといけなくなり大変不便です。カーソルボタンでの操作をすると写真とストリートビューが入り混じった画面の切り替えになっていて、どっちの方向を向いてるのかが直感的じゃなくなっています。
もしかしたら、最近のタッチパネルの端末ではそうでないのかもしれませんが・・・。

・バグが残っています。
 画面右上の
「ヘルプ/ご要望」-「ヘルプ」-「新しい Google マップについて」
を選択した場合のヘルプ画面の表示で不自然な空白が表示されます。

しかもフィードバックの送信でこの画面についてのフィードバックを送ることが出来ません。
地図本体のスクリーンショットは取れても上の画面のスクリーンショットは取れないからです。
もしかするとこの問題は日本語表示の場合だけの問題かもしれませんが、他の言語の場合を確認するつもりはありません。なぜなら私は日本語を母国語とする日本人だからです。
同様に
 「ヘルプ/ご要望」-「ヘルプ」-「ルート検索」
                                         「地図のカスタマイズ」
                                         「画像とストリートビューの概要」
を選択した場合でも、不自然な空白が表示されます。

2013年6月13日木曜日

1から1000

最近stackoverflowというサイトを知りました。
その中であった質問の一つにこういうのがありました。

Task: Print numbers from 1 to 1000 without using any loop or conditional statements. Don't just write the printf() or cout statement 1000 times.
How would you do that using C or C++?
printing-1-to-1000-without-loop-or-conditionals

簡単な日本語に訳すと
「1から1000までの数字をループや条件分岐を使わずに表示しなさい。ただしprintf()やcoutを1000回書くのは無しね。CかC++を使ってあなたならどうする?」
といったところでしょうか。

ループを書けば一瞬で終わる処理もこれらがないと普通じゃないやり方になるようです。
一番投票が多かった回答は、

#include <iostream>
template<int N>
struct NumberGeneration{
  static void out(std::ostream& os)
  {
    NumberGeneration<N-1>::out(os);
    os << N << std::endl;
  }
};
template<>
struct NumberGeneration<1>{
  static void out(std::ostream& os)
  {
    os << 1 << std::endl;
  }
};
int main(){
   NumberGeneration<1000>::out(std::cout);
}

というものでした。
テンプレート関数を使ってひたすら関数を展開していく方法でした。
このプログラムを手元の環境でコンパイルすると

$clang++ 1000.cc -o 1000 
175890 Jun 12 18:55 1000*
     339 Jun 11 03:32 1000.cc

実行形のサイズがかなり大きいですね。

私が気に入ったのは以下の様なサンプルです。(自分で書きなおしたものです。)

#include <iostream>

static int n=1;

class out
{
public:
    out()
    {
        std::cout << n++ << std::endl;
    }
};
int main()
{
    out o[1000];
}

コンストラクターに出力を書いてます。
これなら

$clang++ my1000.cc -o my1000 
6064 Jun 11 08:00 my1000*
  136 Jun 11 07:59 my1000.cc

実行形のサイズも小さくてすみますね。
もちろん、パフォーマンスはこの問題には関係ないとは思いますが・・・。




2013年6月9日日曜日

ハスラー2

普段テレビをあまりみない生活なんですが、今日ふとテレビをつけたら懐かしい映画がやってました。途中から観たのですが、「ハスラー2」という映画でした。ポール・ニューマン、トム・クルーズが主なキャストです。あらすじはなんとなく知ってましたが、いま見てもいいですねー。ポール・ニューマンがとにかく渋いです。

ちょうど撮影された時期のポール・ニューマンは60歳前後だと思うのですが、私の周りにこんな素敵な大人はいませんね。もちろん映画だからというのはあると思いますが・・・。私の周りにいる大人は自分の事しか考えてなく、視野が狭く、思慮も浅い人間ばかりの様に見えます。人生の先輩として尊敬できる大人は残念ながらいませんね。