Make Healthy Life

最近はSQLばっかり書いてるWebエンジニアの日記です。

CentOSにgcc4.7.0をyumでインストールした

アルゴリズムの勉強のため、C++をやってる。

Macでやってたんだけど、Marvericsにアップデートしたらコンパイル出来なくなった。。。(こっちはAppleのサポートに問合せ中)

仕方なくVM上のCentOSでやることにする。が、コンパイルエラーがでる!

error: expected initializer before ‘:’ token

 

ググってみると、gccのバージョンが古いらしく(僕の環境では4.4.7だった)、-std=c++0xが使用できないらしい。

ソースからビルドする方法もあるらしいけど、ちょっと時間がかかるので嫌だった。

 

以下記事を参考に楽にインストールできた。

http://unix.stackexchange.com/questions/63587/how-to-install-g-4-7-2-c11-on-centos-5-x

 

yumリポジトリ内でdevtoolsなるものをwgetする。

cd /etc/yum.repos.d
wget http://people.centos.org/tru/devtools/devtools.repo 
yum --enablerepo=testing-devtools-6 install devtoolset-1.0

 

あとはPATHを通すだけ。

export PATH=/opt/centos/devtoolset-1.0/root/usr/bin/:$PATH

WiMAX 2+を申し込んだ

2年前にインターネット回線よりも安くなるから、という理由で申し込んだWiMAX

引越前は快適だったのに新しい家に来たらちょっと物足りない速度だった。

家の中の置き場所を変えたりして、なんとか3本アンテナを立たせたけど、まだ不安定な感じ。

 

UQお問い合わせ窓口に相談したら、結構丁寧に説明してくれた。

僕の場合、長く使っていたのでWiMAXの解約手数料はかからないこと。

新規端末の料金2800円がかかること。

UQ Flat2年コースなら、今と大して料金が変わらないこと。

おトクな料金プラン!|UQ WiMAX|超高速モバイルインターネットWiMAX2+

懸念としては、今使ってる端末の方が、WiMAXを使う場合は性能がいいらしいというところ。

WiMAX 2+が使えないエリアだと、WiMAXの速度が遅くなるかもしれないとのこと。でも基本的に家だけだし、大丈夫だろう。

 

結局2800円で速度があがるんなら変えるしかない!ってことで申し込んだ。

楽しみだな〜!

How to Change the World チェンジ・マネジメント 3.0を読んだ。

How to Change the World  〜チェンジ・マネジメント3.0〜
Jurgen Appelo, 前川哲次(翻訳), 川口恭伸(翻訳), 吉羽龍太郎(翻訳)
達人出版会
発行日: 2012-07-13
対応フォーマット: EPUB, PDF

アルゴリズム勉強してる

自分は大学で情報工学を学んでない。(一応理系だし応用情報技術者も取ってるけど)

ちゃんと技術者っぽくアルゴリズムをマスターしておきたい。そして年齢的に今更だけどコンテストに参加したい。

 まずは情報収集。以下記事を参考に本を選んだ。

http://d.hatena.ne.jp/nowokay/20110922

 

 まずはコレ。 

アルゴリズムクイックリファレンス

アルゴリズムクイックリファレンス

 

   1章あたりの、アルゴリズムをどう実務で使うか?みたいな話がとてもイメージしやすくてモチベーションが湧いた。

そのあとのアルゴリズムの実装部分は流し読み。とりあえず全体像を把握しないとね。

 

次はコレ。 

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

 

 実は1年前に中級偏まで読んだことあった。でも実装までしてなかったので良くわかってなかった。

改めて読んでみると、ちょっと難しい。いきなり深さ優先探索の実装コードを見せられても、どうしてそうなるの??って感じだった。

 

ちょっと挫折して、こっちの本にいってみた。

 今はこの本の5章を実装してる。

正直にいってこちらのほうが説明が丁寧でとてもわかりやすい。深さ優先探索はイメージで説明してくれていて、理論と実装の境目をなくしてくれた。

 

ちなみにプログラミングコンテストチャレンジブックは通称「アリ本」と呼ばれているらしい。最強最速アルゴリズマーのほうは「プーマ本」になるのか?

 このプーマ本終わったらアリ本挑戦しよう。

CakePHPでMemcacheを使う時にdurationを変更したかったけど、はまった

CakePHPでMemcacheを使っていて、durationを変更したいと思った。
以下記事を参考に、Cache::set()を使ってやってみる。
http://cake.eizoku.com/blog/2009/10/07/how-to-control-a-cakephp-cache-duration/
(日本語の記事があったはずなんだけど、みつからない。。。)

defaultでengineにFileを指定している場合はうまくいくんだけど、Memcacheの場合はうまくいかない。
Memcacheのログを見ると、キャッシュを保存するところまではやっているが、Sendingしてくれていない。

原因は分かっていないが、以下方法で対処できそう。
①defaultとは別のCache::config()をcore.phpに定義。
②Cache::read()とCache::write()で引数に①で定義したconfig名を渡す。

Fileでできて、Memcacheでできないのはなぜなんだろう?

SIerからWeb業界へ転職して思ったこと

去年の終わりに転職して、SIerのインフラエンジニアからベンチャー企業のWebエンジニアになった。

今の会社に就職して半年くらいたったので、感じたことをまとめておく。

SIerとの違い
今SIからWeb系へ転職する人が多いと転職サイトで読んだことがある。参考程度に自分も書いておこうかな。
SIと違うのは、やはりユーザーにとって良い物を作っていかないと淘汰されるという意識が一番最初に来るところだと思う。
SIだとお客さんの部長とか、課長みたいな人が決めたことが絶対、みたいなところがあり、ユーザー(実際に使う人)よりは、「○○さんが言ったから・・・」みたいな理由で話が決定してた。
Web系でも発言権みたいのはあるけれど、最終的にはユーザーがどう思うかを最大限尊重して意思決定できる。
ユーザーにとって本当に良い形を追求していけるのは、エンジニアにとってもとても嬉しい環境だと思う。

・大手企業との違い
僕の転職した会社はベンチャー企業とはいえ、すでに20人くらい人がいる規模だったので、ある程度役割分担があった。
イメージしてた本当に何でもやる!!みたいなステージは5、6人くらいのベンチャーなのだと思う。
とはいっても、大手企業にいた頃とは比べ物にならないくらいの裁量と責任が与えられていると感じる。というよりも一人で何個も職種を兼務しないと遣って行けないと言った方が正確かもしれない。
大企業は1つの職種がカバーする範囲がとても小さい。それだけ品質が高いのかもしれないが、ぶっちゃけ無駄な作業も多い(調整、調整、調整。。。)

大企業批判みたいになってしまったけど、一つ一つの仕事自体は、そこまで大企業と変わらないと思う。ただ1人が担当することのできる範囲が広いため、飽きにくい。無駄な調整もない。

スキルアップは自分次第
これは大企業でも同じかもしれないが、自分で課題を見つけてスキルアップを図っていかないといけない。自分がどんなスキルを身につけて、どういった人生を生きたいのか、考える必要があるな〜と感じる。
僕自身は起業という目標があるので、それに向けて社内の仕組みだったり、自分のスキルを磨いている。


いろいろ書いてたらまとまりがなくなってきた。
最後にベンチャーに就職しようとしている人へ、会社選びは真剣にしてください!とメッセージを送りたい。
社員と話して、オフィスを見て、社長と話して、1つでも違和感があったらやめたほうがいいっ!
特に社長はよ〜く見てほしい。ベンチャー企業=社長っていってもいいくらいだから。

AlarmManagerの状況確認方法

目覚ましアプリを作ったけど、なぜかセットしていない時間にアラームが起動する。
しかも決まった時間に。

自分の端末だけかなと思ったら、他人の端末でも同じ事象が発生している。
なんとかしないと、ということでAlarmManagerの状況をダンプする方法を調べた。

adbのシェルコマンドを使えばいいらしい。
adb shell dumpsys alarm > dump.txt

下のような表示が約20個あった。パッケージ名(jp.co.kazusan85.alarm)があるからこれかな、と当たりをつけてみる。同じパッケージ名のものが8個あるぞ??

RTC_WAKEUP #21: Alarm{40906650 type 0 jp.co.kazusan85.alarm}
type=0 when=+23h41m58s982ms repeatInterval=86400000 count=1
operation=PendingIntent{408e83d8: PendingIntentRecord{408ea0e0 jp.co.kazusan85.alarm broadcastIntent}}


アラームONの状態の時とアラームOFFの状態のときを比べてみると、たしかに1個数が減っている。
でもアラームOFFにしても7個残ってる。なんで?

試しにアンインストールしてダンプしてみたら、7個残ってる!!
何なんだこれは!

この時点で、おそらくActivity実装時のロジックミスではなく、permission関連のバグなのかと思い始める。
そういえばBroadcastReceiver関連のpermissionをいじったなぁ。

こんな感じ。

        <receiver android:name=".SampleBroadcast">
          <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
 	  <action android:name="android.intent.action.DATE_CHANGED"/>
 	    <action android:name="android.intent.action.TIMEZONE_CHANGED"/>
 	    <action android:name="android.intent.action.TIME_SET"/>
          </intent-filter>
        </receiver>

BOOT_COMPLETED, DATE_CHANGED, TIMEZONE_CHANGED, TIME_SETを削除したら、ちゃんと1個だけセットされていました。
これで大丈夫かな。

BOOT_COMPLETEDが悪さをしているような気がする。