見習い魔法使いの日常

果たして魔法が使える日は訪れるのか!?

タイトル変更しました

久しぶりにブログを開きました。

大学生はそろそろ夏休みなので僕も気持ちを一新してタイトル変えちゃいます。
MacWindowsの違いもわからないやつが奮闘するブログ」から「見習い魔法使いの日常」に変更しました。
ラノベのタイトルっぽい厨二タイトルですが、何卒何卒...。
今までの記事は綺麗にさっぱり削除してしまいたいところですが、忘れられた前時代の負の遺産として残しておきます。
そういう歴史もあったということで...ね。

今後の方針としては、項目を幾つかに分けて投稿していこうと思います。

1. 日常について
2. 積み本を読んだ感想について
3. 作ったモノについて

僕が学生時代にやった足跡を残していければと思います。

ハッカーズチャンプル2016に参加して

今回は感想です。

ハッカーズチャンプル2016の開発合宿、カンファレンス、懇親会での感想を書きます。

今回は開発合宿の方から参加させてもらいました。
私はOpenCVを触ったことがあったので、画像処理を使って自分の認識したいものを認識させるというのを目標に取り組みました。
1日目は拾ってきたコードを改造したのですが、微妙に期待どおりに改造できず断念。
2日目はもう一度画像処理の基礎を復習し、土台を作成。
最終日は、間に合わず成果を出すことは諦めて、画像処理の知識を学習して終わりました。

合宿が開発である以上、失敗でした。

なぜ失敗したのかというのを考えると、3つほど原因があったのではと思います。

1.画像処理を過小評価し、知識のないまま取り組んだこと
2.どのような手順でどういう日程でという計画がなかったこと
3.失敗しても安心できる環境があったこと

私自身の考える失敗の原因です。
開発合宿は自分の得意分野で挑むのが良かったと反省しています(そのような分野は存在しませんが...)。

カンファレンスの部では内地の方を及びして、いろいろなお話を聞きました。
一番前に座っていましたが、理解が追いつかない場面が多く、日頃の勉強不足を痛感することとなりました。

やはり、簡単には情弱という称号を返上できなさそうです...

最後の懇親会では、いろいろな方の話聞くことができました。
できたのですが、ある方を一箇所に止めてしまったり、自分の聞きたいことばかりを夢中に聞いてしまって、迷惑をかけたかも...。
すいませんm(__)m。

この合宿を通じて、大学で興味の薄い分野の課題は作り込まず適当に提出することが多かったのですが、どのような課題であれ自分のできうる限りは作りこんで考えてやろうと思いました。
それが最終的には幅広い知識の持つことになり、新しいことを関連付けて学ぶ・理解することができるのだと信じています。

ハッカーズチャンプルの運営並びに参加者の皆様、ありがとうございました。

Python3、OpenCVセットアップ

OpenCVを触ることになり、Python3で公式チュートリアルをやりました

その中で、突然エラーを吐かれてその対処に3時間苦労した箇所があったためメモ代わりに書いておきます

OpenCV-Pythonチュートリアル
OpenCV: OpenCV-Python Tutorials

OpenCVの導入はこちらのサイトを参考...というか言われたとおりにやりました
blog.amedama.jp
非常にわかりやすいサイトで個人的にこれくらいの記事を書きたいなと思うところです


順調に進み何事もなく終わると思いきや、特徴量の抽出の部分でエラーが!!
はじめはOpenCV3.0.0-Pythonチュートリアルを試していたのですが、

>>> import cv2
>>> sift = cv2.SIFT()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'cv2' has no attribute 'SIFT'

調べていくと、OpenCV3.1.0-Pythonチュートリアルがあり、同じ内容でコードが違うところを発見しました
よかった、これで終わるとと思いきや...

>>> import cv2
>>> sift = cv2.xfeatures2d.SIFT_create()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'cv2' has no attribute 'xfeatures2d'

アリャリャ??

そこで辿りついたのがこちらのサイト
danglingfarpointer.hatenablog.com

どうやらSIFTやSURFはOpenCV3から別のモジュールとして扱われてるみたい

brewでインストールする時に

brew install opencv3 --with-contrib --with-python3

としてあげればインポートできました

これだけに3時間も要してしまうなんて、私もまだまだ情弱のようです

私のTexの使い方

今日は私の普段Texの使い方について書きます。

大学生になると誰しもレポートに追われるのではないでしょうか。
私もつい先ほど、締め切り1時間を切った頃になんとか完成させて提出したばかりです。

思い返すと長い戦いだった...。
私の学部では専門科目はLatexでレポート作成が標準...というより強制されており、レポートにも苦戦しますがそれ以上にTexに苦渋を舐めさせられますね。

ただ、Texが嫌いというわけでもなく、基本的に専門でない授業もTexでレポートを書いています。

 さる冬、私の学科ではEl Capitanにアップグレードした時、ローカルのTexが動かないという事態が発生!!
追い詰められ、悲鳴を上げる学生はCloud LaTexに移行し生き延びることができました。

しかし、なぜか私の環境ではアップグレードしても何も起こらなかった(たぶん?)のでローカルでやっています。


基本的にホームディレクトリ直下に.binというディレクトリを作り、ちょっとでも便利なコマンドを作ろうとした時期がありました。
その時に作ったしょぼいものですが、意外と役立ってくれていて今回のレポートも助けられたので書きます。

はじめにホームディレククトリ直下に.binディレクトリ(他の名前でもOK)を作成し、.zshrcにパスを記述してあげます。

mkdir ~/.bin
echo 'PATH=$PATH:$HOME/.bin' >> ~/.zshrc


これで.binに実行ファイルを置いておくと、シェルがこのディレクトリを探しにきてくれます。
次にcmpl_texというファイル(これもなんでもよい)を作って、cmpl_texに以下のようなシェルを書きます。

vi ~/.bin/cmpl_tex

cmpl_texの中身。

#!/bin/sh

platex $1.tex
dvipdfmx $1.dvi
open $1.pdf

あとは実行権限を与えてあげて、.zshrcを読み込ませれば準備完了!!

chmod 700 ~/.bin/cmpl_tex
source ~/.zshrc

これで.texファイルをコンパイルしopenすることができます。

続いて、テンプレートの生成方法について書きます。

mkdir ~/.bin/file
vi ~/.bin/file/tex_temple
vi ~/.bin/create_tex
chmod 700 ~/.bin/create_tex
source ~/.zshrc

tex_templeとcreate_texの中身は以下のようになっています。

tex_temple

\documentclass[11pt,a4paper]{jsarticle}
%
\usepackage{amsmath,amssymb}
\usepackage{bm}
\usepackage{graphicx}
\usepackage{ascmac}
%
\setlength{\textwidth}{\fullwidth}
\setlength{\textheight}{40\baselineskip}
\addtolength{\textheight}{\topskip}
\setlength{\voffset}{-0.2in}
\setlength{\topmargin}{0pt}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}
%
\newcommand{\divergence}{\mathrm{div}\,}  %ダイバージェンス
\newcommand{\grad}{\mathrm{grad}\,}  %グラディエント
\newcommand{\rot}{\mathrm{rot}\,}  %ローテーション
%
\title{タイトル}
\author{作者}
\date{\today}
\begin{document}
\maketitle
%
%
\section{セクション}
...
...

%
%
\end{document}

create_tex

#!/bin/sh

cat ~/bin/file/tex_temple > $1.tex

これでおそらくcreate_texでテンプレートのtexファイルが生成されるのではないでしょうか。

create_tex main % main.texというファイルが作られる
cmpl_tex main   % main.texをコンパイルしオープンする

すごくしょぼいことしかやっておりませんが、これが意外に役立ちました。
友人にはTeXShopを勧められたりもしましたが、今はこれでレポートを書いております。

最後までご覧いただきありがとうございました。

Webアプリケーション作りに励む(Mojolicious)

GWの出来事

私「くそーDjangoできねーー」(3週間の戦いの末...)

友人A「Golangがいいよ!!」

友人K「Mojoliciousがおすすめかな」

知人A「Node.js...いい(ボソ)...」

私 -> Go -> JS -> Perl( パッパカパーン )

 

ということで、そんなこんなありましてMojoliciousでWebアプリケーション作ることになりました。

 

はじめに、私がここまでこれたのはMojoliciousを進めてくれ、かつ教えてくれた友人Kくんのおかげです。ありがとうございます。

 

GWに初めてPerlをやり始めましたが、クセがあって面白いですね。

 

制作中のソースをGitHubリポジトリ公開したのでURLを貼っておきます

github.com

とはいいましても、まだ手探りの状態でよくない部分であったり無駄な部分が多々あると思います。

 

自身を持って完成を間近に控えたときに、記事にしようと考えていますのでその時は目を通していただけると嬉しく思います。

 

やっとまともな記事が書け!!...............な予感

JavaScriptやってみた

生まれて初めてJavaScriptに触りました。

忘れもしない1年生の誕生日にサイ本を買ったあの日のこと...。

今まで手を出したことのない価格帯、そして分厚さに僕は興奮したんですよね。

結局1年以上たった今でも、現在進行形で本棚の肥やしとなってますが...。

 

今回は半額セールでこの本を購入してやりました。

確かな力が身につくJavaScript「超」入門 (確かな力が身につく「超」入門シリーズ) : 狩野 祐東 : 本 : Amazon.co.jp

サイ本と比較するとイラストとが多いかったので、まあ1日時間をかければ一通り終わるじゃろうとね。

最終的に3日かかりましたが、これでJavaScriptをとりあえず読むことはできるようになったと思います。

 

とりあえず、やったことはアウトプットしようと思って、カウントダウンをするページを作ってみました。

スタイルシートはいつかに作ったものを適当に反映させただけです。

 f:id:Nishisi:20160509212153p:plain

 

本を読んで試したりすると簡単なんですが、自分で作ろうと思うといろんなところで躓きました。

とりあえず、動きはしたのでひとまず第一段階かなというところ。

 

画面の隅にちょこんと表示させて、ちらっと確認したりと使ってみると以外と便利です。

ただ、今のままだとカウントダウンがマイナスまでいってしまうのと、例外処理を施していないのでNanになったりと、中途半端な状態です。

 

0になったら、音を出すなどの機能もつけてみたいと思っているので、スタイルシートも含め、ある程度できればGitHubに公開してみようかな(たぶん)。

 

ブラウザですぐに試せるのは、面白いと思いました。

時間を見つけてサイ本も読もうと思います。

 

目下、GitHubの勉強中(そういうものなのか疑問だが)なので、作ったものなどを公開していけたらいいと思ってます。

 

最後にちょっと、書いて終わります。

本の中にjqueryAjaxに触れる機会があったのですが、前にあった授業での流れを思い出しました。

< ネットワークの授業 >

先生「君たちの中でAjaxとか触ってことない人はいないとおもうけど...」

私「(なんじゃそりゃ、ググる)」 -> 調べるけどよくわからん

先生「Ajaxを知らないとかは、恥ずかしいので知っといてくださいね」

私「(僕に言ってるの?ねえ、僕に言ってるんですか、先生?)」

 

いやー。

何も知らなかったんですね私。

お恥ずかしい。

 

いつになったら技術的な記事が書けるのやら...。

先は長そうです。

 

それでは。

 

 

~ 先生との戦い ~ ボロクソに言われる...

先生「好きなもの作っていいよ。君、何が作りたいの?」

私「えっと、思いつきません...」

先生「それは一番ダメな答えだ。なかってもその場で考えて何か言わないとダメ」

私「i、iPhoneアプリ

先生「それはさっきダメって言ったじゃない」

私「え、っと」(ど、どうすれば)

 

今回は近況報告なので、そんなのいらないよという方はここでやめてもらうといいと思います。ただ、予感めいたものを感じるのですが、この ~ 先生との戦い ~ はシリーズになりそうです。

 

今年の受講科目に自分の作りたいもの(Webアプリケーション)を作るという内容のものがあります。ちょうどブログを始めた頃から、この科目と戦っているのですが、私にとってはかなりの曲者のようです。前期はこの先生・科目と戦っていくことになるのでしょう。これはその序章です。

 

忘れもしないあの日、戦いの火蓋が切って落とされた...

~ 第1回授業終わり ~

先生「ん〜、じゃあとりあえず、好きなWebフレームワークを選んでOauth認証できる状態のWebアプリケーションを作ってきて。あ、あとAnsibleで動かしてコードをプレゼンしてもらおうかな」

受講生「!!」

先生「ちょっと厳しいか?」

先輩(TA)「まあ、がんばれば1日でできるでしょう」

先生「そうだな。これが1週間でできない奴に、卒業して欲しくないな」

 

私はOSをFedora23、WebサーバをApache、そしてWebフレームワークにはDjangoを選択し1週間を過ごした...

しかし、私の能力は自身の予想を遥かに下回り、なすすべもなく撃沈した...

 

~ 第2回授業 ~

--- この日、受講生の半分がこの科目を取り消した ---

先生「じゃあ、進捗を聞こうか。何を作ってきたの?」

私「すいません、5日間格闘したのですが作れませんでした」

先生は、先輩(TA)と顔をあわせる。その顔は何故そんなこともできないのとでも言わんばかりだ。この瞬間、私は自身の能力が求められている段階に達していないことを悟った。

先生「そういうときは、先輩に聞くんだ。というより、君はもう聞かれる側のはずだ」

私「はい」

先生「まあ、いいよ。で、君は何をつくりたかったんだっけ?」

私「まだ、決まっていません。今回の課題がこなせなかったことから、能力不足で何が作れるのかを理解できていないんだと思います。Webの仕組みを理解するという意味でも、今回の課題を続けたいと思っています」

先生「ふーん、まあ、それもあるかもしれない。けど君はあれだね。車とか作る時センサーとかにこだわって、高性能センサーを作り込むんだけど結局車を作れないタイプの人だね。ま、頑張って」

私「...はい」

 

~ 第3回授業 ~

先生「じゃあ、進捗を聞こうか」

私「わかりました。前回の課題を引き続きやっていたのですが、Oauth認証の部分で詰まってしまい、解決できていない状態です」

先生「まだできてないの。先輩には聞いたの」

私「はい」

先生「誰に聞いたの?」

私「〇〇さんです」

先生「あれ、できなかったの?」

私「いえ、途中までは手伝ってくださって、あとはできるでしょと言われました。残りが簡単そうだったので、わかりましたと言ったんですけれど、そこから躓きました」

先生と先輩(TA)は前回同様顔をあわせる。その顔には息が抜けるような力のない英みが浮かべられていた。受講している同期に至っては、声を出して笑っている。いや、いっておいてなんだが我ながら間抜けだと思う。

先生「君みたいなの人は、逆に放っておきたいね。いいから、コードをちょっと映して」

そして、そのあとこってり絞られました...

.

..

...

 

文を読んだ限りだと私が何もしていないようですが、土日は一日中格闘してました。

ただ、結果が出せていないので何もしていないのと同じですが...

5.6時間Djangoさんと無計画に戦ってもいい結果が得られないことは、身をもって学んだので要点を絞って別の分野の知識を少しずつ補充していきたいと考えています。

 

 さて、次のブログはVimについて書こうと考えています。サーバーを立てたりしないので、エディタはGUISublime Textを使っています。ただ今回がサーバー上での操作となり、普段使わないVimで作業効率ががくっと落ちています。ちなみに、ここでもつっこまれました...

 

先生「563行目見せて」

私「はい」(必死にスクロールする -> 行き過ぎる -> 戻す)

先生「何やってるの?」

先輩「環境が違うので慣れていないんだと思いますよ」

先生「...」

 

その行に一発でジャンプできる機能があるんでしょうとも。とりあえず、このままだとCUIでの作業ができないプログラマーになってしまうので、Vimの使い方を短期集中で勉強してきます。

 

一番楽しく、やりがいのある講義でもあり、一番向かう足取りが重い講義でもあります。まだまだ序章なので、先生を乗り越えて成長したいと思います。