Yuki Nakata's Blog

天才 中ちゃん♪

2015年10月


伊丹市の荒牧薔薇園に行ってきました。野球場ぐらいの広さがあります。
バラの咲き具合はこんな感じです。

まだちょっと時期が早いですが、カメラを持った観光客がちらほらいます。










薔薇というのは春、夏、秋、冬と咲かせることができるようです。

剪定して短く刈り取ったあと、50日後くらいに開花するんですね。
こうして秋バラを咲かせることができます。

伊丹市荒牧薔薇園の場所









36
xcode7で実機テストをすると上の-fembed-bitcode is not supported on versions
エラーが出るようになりました。

bitcodeとはプログラムのパフォーマンスを向上させるための中間コードです。

xcode7からデフォルトでbitcodeが有効になっていて、ライブラリーが対応していない場合、
上記のエラーとなります。

bitcodeを無効にすると解決します。

37

Build Settingsの箇所でbitcodeで検索

その項目をNoにしてください。エラーが出なくなります。
 

04
xcode7からiphoneやipadの実機テストが無料になりました。

今までは開発者登録をする必要がありまして、年間1万円と有料だったんですね。

それが実機テストだけなら開発者登録が不要になりました。

最新の開発環境にするとApple IDがあれば無料でデバッグできるようになります。

USBでデバイスを接続すると写真一番上のDeviceにスマホやタブレットが表示されるようになります。

これでアプリやゲーム開発のハードルが下がりました。

xcodeのダウンロードは下のリンクからできます。
xcode ダウンロード

OSX EL Capitan
最新のMac OSX EL Capitanにアップデートしましたよ。

2015年10月21日の最新版EL Capitan10.11.1です。

本当はしたくなかったんです。スルーしていました。

だって不具合の報告が多かったですから。

ところが最新版にする必要に迫られまして。

Macでiphoneアプリを開発しています。その開発ソフトはxcodeを使っています。

この最新版のxcode7にアップデートするために最新版のOSXにアップデートが必要、
iphone iosもアップデートが必要、というアップデートの連鎖地獄です。

osxのアップデートだけで3時間以上かかりました。6GBファイルのダウンロードですからね。

一応最新のMacBook Proなので不具合も少なめであろう、と祈って使い始めています。

EL Capitanでは日本語入力をすると勝手に漢字変換されます。

便利なような不便なような。慣れていないので微妙です。

目玉機能のsplit viewもやってみました。

ウィンドウの最大化ボタンを長押しすると左側半分のサイズになります。

もう一つのウィンドウを選択するとsplit viewです。

もう一つの方法はF3キーを押してmission controlを表示させます。

上のサムネイルのところで、フルスクーンのアプリ同士を重ねます。

カッコイイといえばカッコイイし、便利かもしれません。

何かトラブルでもあればここに書いていきます。

これからさらにxcode7のアップデートに6時間もかかりました。

1日潰れました。マンドクセ。


 

モンベル クリマプラス200
モンベルのフリース、クリマプラス200 ライニングジャケット 1106457を購入しました。

173cmでサイズはMでぴったり。色はオレンジ。

モンベルはSaleをしません。価格は下がらないので売り切れる前に早く買いました。

極度の寒がりなんで、既に家で着ています。

素晴らしいの一言。

温かい、肌触りが良い、動きやすい。

クリマプラス100 も試着してみましたが生地がペラペラです。100を買うくらいならユニクロのフリースの方が良いと思いました。

1万円オーバーのクリマウール ジャケットというのがありますが、今度は生地が厚すぎる。窮屈になりそうです。

クリマプラス200はそのちょうど中間です。

アマゾンでもこのクラスが一番売れているようです。

関係ないですが、かつてフーリエという天才数学者がおりまして、

真夏で猛烈な厚さの中、部屋を閉め切って体中に包帯をまいて、数学を考えていたそうです。

その影響からかできるだけ暖かい格好を好むようになりました。

そんな天才数学者さんにもモンベルのクリマプラス200おススメです。




コーヒー辞めました。

コーヒーを飲むと具合が悪くなります。

コーヒー自体が悪いのではありません。

コーヒーに含まれるカフェインが悪いのです。

カフェインを摂ると脳が暴走します。

カフェインには脳血管収縮作用があり、脳を興奮させます。

私の場合、敏感なのか頭の調子が1日おかしくなります。

脳がピキピキします。この感じわかりますでしょうか。


インスタンスコーヒーだとカフェインの量が少ないのでまだましです。

喫茶店で飲む焙煎されたコーヒー、要するに凝ったコーヒーが危険です。

脳に悪影響を及ぼします。



カフェインには中毒作用もあります。

マクドナルドの100円コーヒーはやばい、スタバはさらに酷い。

あれは有難がって飲むものではありません。中毒にするのが目的です。

俳優の高倉健さんは一日50杯コーヒーを飲むこともあったそうです。

 
喫茶店ではカフェイン抜きのコーヒーを提供してくれるところもあるでしょうが、
手間暇がかかります。お店の人がめんどくなりますので、注文するのを遠慮してしまいます。

だからコーヒーは家でカフェインレスのを飲んでいます。 

ジョコビッチ
ジョコビッチの生まれ変わる食事を読んでいたら、カフェインは摂らないとありました。

カフェインを含むコーヒー全般、飲んでいないのでしょう。

テニス世界ランキング1位のジョコビッチが言っているのです。

コーヒーは止めましょう。


 

OpenMP 並列プログラミング2の続きです。

実際にOpenMPを使いこなしていきましょう。

グレゴリー・ライプニッツ級数でπを求めます。

π / 4 = arctan1 
 = (1 / 1) - (1 / 3) + (1 / 5) - (1 / 7) + (1 /9) - (1 / 11) ...無限に続く
 
グレゴリー・ライプニッツ級数は収束が遅いので実際にπを求める際には使われていません。

式がシンプルなforループで記述できるので並列プログラミング向きなのです。

並列化なし pi-leibniz.c
#include <stdio.h>
#include <time.h>

#define MAX 1000000000

int main()
{
int i;
double is = 1, a = 0;

clock_t start,end;
  start = clock();
for (i = 0; i < MAX; i++) {
if ((i % 2) == 0) {
is = 1;
} else {
is = -1;
}
a += is / (2 * i + 1); 
}
printf("%.15f\n", 4 *a);
end = clock();
  printf(" time [sec.] = %f \n", (double)(end - start) / CLOCKS_PER_SEC);
return 0;
}

$ gcc pi-leibniz.c -o pi-leibniz
$ ./pi-leibniz
3.141592652588050
 time [sec.] = 6.853473 
6.8秒かかりました。

OpenMPで並列化 pi-leibniz2.c
#include <stdio.h>
#include <time.h>
#include <omp.h>

#define MAX 1000000000

int main()
{
int i;
double is = 1, a = 0;

double start,end;
  start = omp_get_wtime();

#pragma omp parallel for private(is) reduction(+:a)
for (i = 0; i < MAX; i++) {
if ((i % 2) == 0) {
is = 1;
} else {
is = -1;
}
a += is / (2 * i + 1); 
}
printf("%.15f\n", 4 *a);
end = omp_get_wtime();
  printf(" time [sec.] = %lf \n", end - start);

return 0;
}

$ gcc pi-leibniz2.c -o pi-leibniz2 -fopenmp
$ ./pi-leibniz2
3.141592652589210
 time [sec.] = 1.899626 
 
並列化をすると1.8秒。 すごい効果が出ています。コア4つなので、早く終わります。

ところがpiの結果が異なります。

並列なし  3.141592652588050
並列あり  3.141592652589210

微妙に異なります。MAX 10にして調べました。

並列なし ループ毎に加算しています。
0 : 1.000000000000000
1 : 0.666666666666667
2 : 0.866666666666667
3 : 0.723809523809524
4 : 0.834920634920635
5 : 0.744011544011544
6 : 0.820934620934621
7 : 0.754267954267954
8 : 0.813091483679719
9 : 0.760459904732351
3.041839618929403

並列化あり 
6 : 0.076923076923077
7 : -0.073777203188968
8 : 0.135746606334842
9 : -0.126408782136336
3 : -0.007110536522301
4 : -0.015297671025225
5 : -0.106206761934316
0 : 0.893793238065684
1 : 0.560459904732351
2 : 0.760459904732351
3.041839618929402
スレッド毎に加算して最後にまとめ上げています。
当たり前といえば当たり前か。そういう仕組みだからしょうがないのか。

その辺りに誤差の原因がありそうですね。

誤差のレベルなので無視してもいいのかもしれませんが、わかりません。

並列なしと並列ありで突き合せて、確かめた方がいいですね。注意が必要です。

↑このページのトップヘ