ぶろぐめんどくさい

技術系の記事と漫画レビューが入り混じった混沌

自己分析の例文の現実感の薄さについて

就活の時期ですね。 スーツを着て歩き回るあの。 正月が明け、就活に向けて自己分析をしています。

自己分析。 過去の自分を振り返り自分について掘り下げる課題。 就活生の90割がやっています。

これがなかなか難題。 指が動かない。 なにせなにをしたらいいのかわかんない。

だから俺、しらべた。 いろいろしらべたよ。 で、みつけた。こんな記事。

careerpark.jp

読んだ。まー? ためになったよ。ためにね。 でもさ、でもさ、ちょっとさ、言っちゃなんだけど、言いたくないんだけどさ。 就活生の例文おかしくない?

引用するよ。

『 【中学・高校時代】 ・得意科目: 国語、社会、英語 ・不得意科目: 数学 ・習い事: 珠算(中学まで)、塾 ・取得した資格:珠算4段、英検準2級 ・熱中していた物:ソフトテニス(中学のみ、高校時代は辞める) ・印象に残っている事柄:弁論大会優勝(中学)、部活動(中学)、文化祭(高校) ・努力していたこと:部活動(中学)、生徒会活動(中学)、勉学(高校)、委員長(高校) ・将来の夢:アナウンサー、国際公務員 ・アルバイト:なし ・その他:中学から英語が話すようになりたく、留学するという夢を持つ。

【大学時代】 ・得意科目:財務管理学、経営学、国際経営学 ・不得意科目:文学系 ・習い事:なし ・取得した資格:アーチェリー指導員資格、TOFEL iBT 101 ・熱中していた物:映画鑑賞、文化交流 ・印象に残っている事柄:留学、奨学金獲得、1学期全学科でA獲得、旅行、寮生活 ・将来の夢:英語を生かせる仕事に就く、国際人を育てたい(教育) ・アルバイト:カフェ店員・副寮長・チューター ・その他:異文化・宗教理解、英語習得 』

弁論大会優勝ってすごいね。すごい人を例に出したんだね。 優勝って文字だけで凄さがわかるよ。 アーチェリー指導員資格? すごい! 弦を引くだけじゃなくて弦を引かせることもできるんだね!

まあいいよ。これくらいは。 まあそういう人を例に出したんだなって。

でも、もっとひどいと思ったよ。思ったことがあるよ。それがこれ。

『 【小学校】 小学校1年生の時、野球教室に入った。2年生の5月に初めて試合に出場、7月に初ヒットを打った。3年生の夏休み、夏の甲子園野球を見に行った。小学校4年の時、英語教室に入会。○○先生にマンツーマンで発音を教えてもらい、英語が好きになった。6年生になった頃にはメジャーリーグの実況を英語で聞き取れるようになり、他のスポーツの解説も英語で聞くのが楽しくなった。

【中高】 中学入学のタイミングで中国地方から関東に引っ越し、毎週のようにプロ野球を見に行くようになった。高校入学のタイミングで学業に専念するため野球をしなくなるが、観戦は続いた。現役・OB問わず、知っている選手が増えたため、前よりも見るのが楽しくなった。野球の話をすると、友達も興味ありげに聞いてくれた。スポーツについて詳しいというキャラクターが定着して、自分でももっとスポーツ全般を知りたいと思うようになった。

【大学】 大学はスポーツ心理学を専攻し、ラクロス部のマネージャーをしながら野球サークルも立ち上げた。マネージャーは楽しく取り組めた。練習メニューのきつさが分からなかったので、主将にお願いして、月1でフィジカルトレーニングに参加。2年生時は、メニュー考案と部員へのフィードバックを対応した。 』

小中高充実した学生生活エンジョイしてたのはいいよ。 そういう人が大部分だろうよ認めるよ。

でもさ、でもさ。小6で英語が聞き取れるって? サークルを立ち上げたって? 主将ってのは王将でだべってたの間違いじゃないの?

みんなこうなの? みんな生徒会に入ってたの? みんな部活で全国大会に行ったの? みんなサークル立ち上げるの?

俺の価値観が間違ってなければさ、 みんなこうだとしたらさ、みんな嘘つきなんじゃないかな。

年納め

おはようございます。

それでは早速、今年度の総決算。

数学ガールの著者様にリツイートをもらう。 パリヤさんの記事が意外とヒット。 そこそこアクセス増えて満足です。

でも、急にバズるとビビりますよね。 不幸にもそれほどの肝っ玉は持ち合わせていませんので、 そこそこ見てもらえるくらいで十分だなと思っております。

ですので、来年度もひっそりやっていくつもりでございます。 どうぞ宜しくお願いします。

それでは良いお年を。

線形探索を高速化する単純なアイデア

線形探索というアルゴリズムがあります。 これは、プログラムを勉強する上では避けて通れない基本的なアルゴリズムです。

線形探索とはなにかというと、 ある配列があったとき、その中身を先頭から最後尾にかけて順番に走査していこうという考え方のことです。 線形探索はこのように単純でわかりやすいので実装が簡単ですが、配列の要素数が大きくなるとそれだけ時間がかかるようになってしまいます。 これを解消するようなアルゴリズムとして2分探索がありますがその話はまた後日しますん。

今回はこの線形探索をどうしたら高速化できるかを思いついたので、実装して検証してみましょうという企画です。

さっそく本題に入りましょう。 今回、思いついたアイデアというのは線形探索のスレッド化です。

説明のために図を用意しました。(褒めて)

f:id:be116:20161213191652p:plain:w500

通常の線形探索では図のようにそれぞれの配列を一つずつ探索していきます。 それと比較して、スレッドを使用した線形探索では複数の要素を複数のスレッドにより一気に探索することができます。

線形探索はメモリ効率が最適です。 メモリ効率とは次に探索する要素がどれだけ近くにあるかを示す指標です。 メモリ効率がいい、すなわち、次に探索する要素が近くにあれば、探索の時間は短縮されます。 もし、次に探索する要素が遠くにあった場合には、それだけ探索に時間がかかるようになります。 線形探索では、常に隣の要素を探索するためメモリ効率は最適と言っても過言では無いでしょう。(間違ってたら助けて) スレッドを使用した線形探索においても、常に近いところを探索し続けるため、メモリ効率は良いといえます。

次に実装の話に移りましょう。

スレッドは共有メモリを使用しています。 説明がめんどくさいので適当ですが、1つのプログラムで走っているよ、だからどのすれっどからも1つのメモリ空間にアクセスできるよみたいなものです。

線形探索にスレッドを適用する場合、この共有メモリの概念が重要になります。 スレッドには関数のように返り値を返すといった仕様がありません。 そこでグローバル変数を使用して、返り値の代わりをしてもらいます。

というところで飽きてきたのでプログラムはこうなります。

逐次処理

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 8192

int flg = 0;
int* array;

int main()
{
  int i;
  clock_t start, end;

  array = (int*)calloc(sizeof(int),SIZE);

  array[SIZE-1] = 1;

  start = clock();

  for (i=0; i<SIZE; i++) {
    if (array[i]) {
      flg = 1;
      break;
    }
  }

  end = clock();

  if (flg)
    printf("みつけたぞ\n");
  else
    printf("なんぞこれ\n");

  printf("%lf秒もかかったぞ\n", (double)(end - start) / CLOCKS_PER_SEC);

  free(array);

  return 0;
}

スレッドを使用

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#include <thread>
#include <vector>

#define SIZE 8192
#define THREAD_NUM 32

int flg = 0;
int* array;

void func(int i)
{
  if (array[i]) {
    flg = 1;
    return;
  }
  return;
}

int main()
{
  int i, j;
  clock_t start, end;

  array = (int*)calloc(sizeof(int),SIZE);

  array[SIZE-1] = 1;

  std::vector<std::thread> th_group;

  start = clock();

  for (i=0; i<SIZE; i+=THREAD_NUM) {
    for (j=0; j<THREAD_NUM; j++) {
      th_group.push_back(std::thread(func, i+j));
    }
    for (auto itr=th_group.begin(); itr!=th_group.end(); ++itr) {
      itr->join();
    }
    th_group.resize(0);
    if (flg) {
      break;
    }
  }

  end = clock();

  if (flg)
    printf("みつけたぞ\n");
  else
    printf("なんぞこれ\n");

  printf("%lf秒もかかったぞ\n", (double)(end - start) / CLOCKS_PER_SEC);

  free(array);

  return 0;
}

素数8192で比較。

逐次処理

みつけたぞ
0.000000秒もかかったぞ

スレッドを使用した場合

みつけたぞ
0.859375秒もかかったぞ

あれれー、おかしいぞー? スレッド化のメリットよりもスレッド生成のコストが上回ったっていうことなのかー? そーなのかー。

といった話でした。

まとめ。

なんでもかんでもスレッド使えばいいってもんじゃないね。 はぁ…。

c++のスレッドで返り値が欲しいのならば

返り値に代わる変数を渡せばいいじゃない。

#include <thread>
#include <stdio.h>

int th(int* ret)
{
  printf("1");
  ret = 1;

  return 1;
}

int main()
{
  int ret;

  std::thread th(th, &ret);
  th.join();

  return 0;
}

ね、簡単でしょ。

ラズベリーパイの固定IP覚え書き(ネットに繋がらない場合)

ラズパイを固定IPにするには以下の設定をする。

sudo nano /etc/network/interfaces

iface eth0 inet static
address 192.168.1.*
netmask 255.255.255.0
gateway 192.168.1.1

ラズパイを固定IPにしたらネットに繋がらなくなった。 (apt-getでエラーを吐く、Webページが表示されない)

原因は2つ。

まずひとつ目は、gatewayが正しく設定されていなかったから。 正しいgatewayはラズパイに直結しているルータのプライベートIPである。

二つ目は、DNSサーバの設定がうまくいっていないから。 DNSを設定するには/etc/resolv.confにIPアドレスを追加する。

sudo nano /etc/resolv.conf

nameserver *.*.*.*

resolv.confは再起動のときに追加した内容が削除されることがある。 解決するにはinterfacesにDNSIPアドレスを設定すればいい。

sudo nano /etc/network/interfaces

dns-nameserver *.*.*.*

ということで時間を潰すことのないようにしたいものです。

「乙嫁語り」のパリヤさんがにんまり不器用可愛い

乙嫁語り」8巻読みました 相変わらずの緻密な書き込みに圧倒されます。

8巻の主役は「まだあわてあわてあわわわわわ」と言い出しそうなこの女の子。 名前はパリヤさん。

f:id:be116:20161102214444p:plain:w300

8巻を読んで感動しました。 なにに感動したかって? パリヤさんの可愛さにですよ。

パリヤさんはね人付き合いが苦手なんです。 なかなか自分をうまく出せないのです。 赤面に沈黙を貫いた挙句、言っちゃいけないことも言っちゃう、良く言えば「本音」をぶつける、悪く言えば「面倒な」な女の子でした。 もっと明確に言えばツンデレな女の子でした。

乙嫁語り」の舞台では、年頃の女の子を「嫁入り」に出すのが風習です。 お年頃のパリヤさんも「嫁入り」の準備を進めていました。 しかし、この地方の殿方には「ツンデレ」の良さがわからなかったのか、 パリヤさんは「嫁入り」を断られ続けるのです。 そんなパリヤさんも「女は強気の方がいい」というわかってるな感を出す男の子とようやく巡り合うのですが、 主人公を巡って起こった民族間紛争(6巻参照)により嫁入り道具の大半が焼失してしまうという不幸に見舞われます。

長い年月をかけて準備してきた嫁入り道具。 もう一度準備が整うまで早くても2、3年は必要だそうで。 一度「自分は結婚できないんですよ、そういう星の下に」的な一悶着もありながら、パリヤさん一同は「嫁入り」の準備に取り掛かります。

パリヤさん達の民族は刺繍にこだわりがあり、皆さん刺繍の入った華やかな衣装を着ています。 嫁入りの際には刺繍を入れた布製品をたくさん用意する習わしがあるようで、その準備が大変だとか。

パリヤさんは刺繍が苦手。パン作りは得意だけど刺繍は苦手。 族長の指導のもと、嫁入り修行の始まりです。 「誰かを思って縫いなさい」 族長からの言葉を聞いて刺繍に取り組むパリヤさん。 誰を思って縫ったのか。 答えは聞くまでもありませんが、「あれれーまったく検討もつかないな―」という方のためにここで大ヒント。

f:id:be116:20161102222943p:plain:w300

恋する乙女の顔ですよ、こいつぁ…。

ついにあらわになったパリヤさんの女子力。 その後のパリヤさんはひと針ごとに「未来のお婿さん」のことを思い浮かべるのでした 。

f:id:be116:20161102223219p:plain:w300

にやにやがとまらないよパリヤさん!!!

f:id:be116:20161102223611p:plain:w300

笑顔が不器用すぎるよパリヤさん!!!

私、わかりました。 女の子の可愛さは笑顔にあったんですね。

乙嫁語りが面白かったし可愛かった(雑記)

乙嫁語り読んでたら悶絶したので今度記事にします。 パリヤさん可愛いほんとかわいい。 にやにやするパリヤさんを見てこっちがにやにやするんです。

今ちょうどゼミ用の進捗報告のスライド作ってるんですけどなんかあれ、駄目ですね。 一部のスライドを英語で書いてみて思ったんですが、満足感が全然違う。 適当なこと書いてても「はわぁすごい綺麗…」てなりますね。はわぁとかは言わないですけどね。

というわけで乙嫁語り9巻が待ち遠しいなーといった次第。