bz0のにっき

quick and dirty prototype

CSV読込して配列化 その2

CSV読み込むときに気を付けることをまとめてみました。

メモリを極力使わないようにする

ストリームを利用する

・大容量のCSVを読み込む際はストリームで「文字コード変換」を行う
 ストリームを利用すればメモリサイズを気にしなくてよくなる為

・ストリームフィルタを利用する際、iconvフィルタの利用は避ける
 iconvフィルタは不正なバイトが含まれていると全体を0バイトに変換してしまう
 http://d.hatena.ne.jp/hnw/20090317

CSVを一度に配列化してしまうと容量が大きい場合メモリを食いすぎる
 「 Stream_Filter_Mbstring」を使ってファイルを一行ずつ取得する
 http://nob-log.info/2012/04/17/stream_filter_mbstring/

エンコードの扱い

・文字エンコーディングの取り扱いはphpの各関数の実装に委ねられる

ロケールについて

・fgetcsv()はsetlocaleの影響を受ける
 ロケールhttps://wiki.archlinux.jp/index.php/%E3%83%AD%E3%82%B1%E3%83%BC%E3%83%AB
 
 ・ロケールとは
   ロケールはOSが持っている多言語対応の仕組み。
  利用する言語 / 文字エンコードの設定を行うことが出来る。

 ・環境によりsetlocaleが効かない
  https://mgng.mugbum.info/1014
  ※Windows では setlocale(LC_ALL, 'ja_JP.UTF-8') は効かない

・setlocaleの挙動はOSのロケールの挙動に依存しており
 かつ大抵の環境の Shift_JISロケールは腐っている

ロケール設定はプロセス全体に影響する。
 マルチスレッドサーバで実行した場合、ほかのスレッドのロケール設定に影響を受ける

結論

・fgetcsv()はロケールに影響を受ける
 環境によってsetlocaleが効かない / マルチスレッドサーバで実行したときに他のスレッドの
 ロケール設定に影響を受けるかもしれない事に注意する。

・大容量のCSVの読込を行う場合は、メモリ対策の為にストリームを利用する

CSV読込して配列化

前提:
・読み込むCSVファイルはSJISであること
・PHP5.3で動作させることが前提(5.3以上でも動くはず)

微妙なので、書き直したい。


CSV(SJIS)読込クラスです。

認知行動療法

やってみたいこと

思考のゆがみから、ストレスがたまりやすく体調を崩しやすいので
認知行動療法(まだ触りの知識しかないですが)的なことを試してみたいと思っています。

まずは自分の思考のクセを知るために、下記3点やってみようと思います。

・事象・その事象から自分が思ったことをevernoteにメモする
・思考がネガティブな方向に行っていると感じた場合は、別の現実的な可能性を考える
・書いたものを、3日おいて後から見返す(客観的にみるため)

この仕様を満たす簡単なアプリを作ってみることも出来そうですね。
とりあえずやってみて続くようなら自分用を作ってみたいです。

認知行動療法について調査まとめ

・1つの出来事に対して自分がどのように考え(思考)
 自分はどのように感じているか(感情)をわけて考える

・別の可能性を現実的に考えてみる
 証拠もないのに非現実的な考え方をしていくため、現実的に考えることが重要

・瞬時に浮かんでくる「認知のクセ」のゆがみをチェックする
 ・ゆがみ思考にまずは気がつくようにする
 ・暴走を止める

 ・日記を書く
  ・今日の出来事をシンプルに書く。
  ・出来事に対して感じたこと、考えたことことを書く。
  ・3日後に見直して、感じたことや考え方が現実に沿っているかをチェックする。

https://www.direct-commu.com/training/a_012.html
https://www.direct-commu.com/training/a_044.html

認知行動療法ツール集:
http://www.eijinkai.or.jp/cbt.html

好きとは何か?

好きとは何か?

メモに、「プログラミングが好き」と自分で書いて「何か違うな」と感じてしまったので
「好き」とは何かを考えてみるために、下記記事を読んで思ったことをまとめます。


君は好きで毎日プログラミングできるのか」と問われて
http://bugrammer.g.hatena.ne.jp/nisemono_san/20130610/1370881915

第一線で活躍するプログラマーが「どうやってプログラミングを学んだか」を語った!イベントレポート(その2)
https://techacademy.jp/magazine/1268

仕事好きと会社好きとプログラミング好き、どれですか?
http://el.jibun.atmarkit.co.jp/noriwo_t/2017/09/post_59.html

好きとは:

好きな人は、時間リソースをその事柄に躊躇なく突っ込める。
自分でやり始めていつのまにか出来るようになっている。(問題が起きても根気よく対処できる。どうでもいいことは途中で投げるはず)

という事で、客観的に「好きか」を判定する為には、どれだけの時間を費やすことができているかですね。(当たり前ですが)


・情熱 / 時間リソースを出来る限りそこに費やすことができるか?

 ・作るのが好きなんだなという人はずっと作っています
 ・長く続けられる人 / まつもとゆきひろさんはひとつの言語を20年間ずっと作っている


・自分の日常の中に入り込んでいるもの(好き=日常に紛れている)
トライアンドエラーの繰り返しの中でしか得ることはできないし、誰かから教わる類のスキルでもない

 プログラミング出来ない奴ちょっと来い
 http://b.hatena.ne.jp/entry/s/anond.hatelabo.jp/20130322031333

自分が何を求めているのかを明確にする

仕事に何を求めるか

1:会社という空間、場が好きな人(仲間タイプ)
2:お仕事をしてお金を稼ぐ、または地位を築くことが好きな人(お金タイプ)
3:仕事の内容にやりがいを感じている人(やりがいタイプ)

仕事において重視している事を自己認識することで、やりたい事も変わってきそう。
エンジニアだからプログラミングが好きでいないといけないわけではない。
欲望に素直になることで、目標達成しやすい、満足度も上がるはず。

今日考えたこと

メモ書きレベルで、今週考えたことを書いてみました。

ストレス源を減らす

ちょっとしたストレス源を解消する

・家の掃除
・洗濯
・皿洗い
  
・やってみると3つあわせても1時間以内には終わるし(世帯4人)、まめにやっているとすぐ終わる
・作業中に気になってしまう事もなくなって快適
・単純作業で、「やってやる」エンジンがかかるのでまず上記3点にとりかかる

大きいストレス源を軽減する

仕事について:

・仕事上でのコミュニケーションにおいて気をつけること
 
 ・事実と推測を分けて事実(行動)のみをもとに考える
  ・感情に振り回されて、推測をもとに行動しない。後で後悔することが多い。
  ・自分のやることが正当であるか他人に説明できるかを考える。(自分の考えたことを一度批判的に見てみる)

 ・夜は冷静でなくなっている事が多いので、返信はできるなら一晩寝かせて再度考える。
  被害妄想や自分の都合のよいように考えている事が多いので。

・仕事上で、技術も大事だが

 ・上司とのホウレンソウの精度(過不足なく話す)が信頼度として跳ね返ってくる。
  (上司が技術がわからない場合は報告内容が評価のすべてになる為)

 ・どう伝えるかこれまで蔑ろにしていたところがあるので、伝え方にもっと重きを置く。

・作業計画を綿密に立てる
 ・システム / プログラミングのスキルをもっとあげる
 ・めんどくさがらずに必要な作業をリストアップすること
 ・事実と推測を分けて判断し、自分に都合がいい希望的推測で動かないようにする(たぶんこうだろうでやってしまう事がある)
  ・正確にやるために、もっと時間をかける

お金の管理

・家計簿を書こうと思ったが、続かないのでカレンダーに
 メモレベルで書いていくことにした(1週間位続いているので、いい感じ)
 
・罪悪感を感じずに無心で書く。それを見て自分を責めない

・不要なお金を使っているときは、だいたいストレスから衝動買いしている場合が多い
 ・お金の管理=ストレスをどうコントロールしていくか

 ・自分の場合「食べること」でストレス解消していることが多いので
  手軽にできてお金のかからないストレス解消方法を考える

 ・どこにお金をかけてよくてここは削るという部分を決める
  ・削ってよい=食費(今かけすぎている)/ 漫画(LINE漫画):ちょっと気になったらすぐ買えてしまうので
  ・かけてよい=本(必要な知識)/ やりたい事(プログラミング・絵を描く)

趣味

絵を描く

・キャラクター 手と足 / 服がかけないので重点的に練習する

・練習するときは、次描くときにもっと描きやすくなるように
 「ここに気をつけるといいんだな」という点を考えながら書く

・プログラミングするときも上記を考えてやるようにしたい。
 絵の上達を考えるときの思考は、プログラミングにも当て嵌まる。

・現在2日に1回ペースの練習になっているので、毎日1時間、時間をとれるようにしたい。

・なるべく資料を探す時間を削減するために、ネット上の資料は
 ブクマで保存していき、すぐ参照できる状態にしておく。

・闇雲にやっても、なかなか上達しないし続かない。
 自分が何をやりたいのか、それをやって何を得たいのかを本心で考える。(ブレると結局途中でやめてしまうので)

kintone API アプリの自動生成

kintoneAPIのライブラリを最近作っているのですが
テストで、アプリの作成やフォームも自動で作れると
楽だなと思ったので、Curlコマンドでの生成方法を調べてました。


gist6da681361d97d6a8a79b194687fc73b1

knife-soloのインストール

vagrantの仮想環境が、ネットワーク設定をいじってたら壊れたので
新しく作ったのですが、軽い気持ちでknife-soloでサーバ自動構築しようと考えて
knife-soloインストールしようとしたら、嵌りました。。。

下記作業メモです。

環境

CentOS 6.5

インストール後
Ruby 2.3.3
gem 2.6.12
knife-solo (0.7.0.pre)

chefのインストー

# curl -L http://www.opscode.com/chef/install.sh | sudo bash

knifeの初期設定

# knife configure

rubygemをインストー

# yum install gcc git rubygems ruby-devel

通常インストールされるruby1.8.7だとknife-soloがインストールできない為、rubyを2.3.3にアップグレードします。
その為に、rubyのバージョンを簡単に切り替えられるrbenvをインストールします。

下記を参考にしました。
http://www.task-notes.com/entry/20150624/1435114800

# git clone git://github.com/sstephenson/rbenv.git /usr/local/src/rbenv

# echo 'export RBENV_ROOT="/usr/local/src/rbenv"' >> /etc/profile.d/rbenv.sh

# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh

# echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh

# source /etc/profile.d/rbenv.sh
# rbenv -v
rbenv 1.1.0-7-g755c820

「ohai」が2.3以上でないとエラーになる為下記2.3をインストールする

# rbenv install 2.3.4

# rbenv global 2.3.4

# ruby -v
ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux]

# gem update --system
# gem -v
2.6.12

# gem install bundler


knife-soloをインスト―ル

# gem install knife-solo --pre

# knife -v
Chef: 13.1.31

# gem list | grep knife-solo
knife-solo (0.7.0.pre)