*の方向性はどうでもいい

プログラミングなどの学習履歴として最初は書いてたけどもう何でもいいやと思って今に至る

railsチュートリアルの第6章でbcryptをインストールするとき

railsチュートリアル第6章でhas_secure_passwordを使ってパスワードをハッシュ化するのにつかうbcryptというgemがあると思います。

 

チュートリアルでは

  gem 'bcrypt', '3.1.7'

と記述してbundle installからのbundle exec rake testというコマンドを打つとテストが起動するとありましたが、rake aborted!のエラーが発生してつまりました。

 

私の環境をさらっと申し上げると、

windows8.1 64bit

ruby 2.2

rails 4.2.2

となっています。

 

bcrypt 3.7ではなくbcrypt 3.1.11と記述して改めてbundle installしてテストを起動させると次に

ActiveRecord::PendingMigrationError:

Migrations are pending. To resolve this issue, run:

bin/rake db:migrate RAILS_ENV=test

と出たので、rake db:migrate RAILS_ENV=testというコマンドを打って

処理を終わらせてから、テストを起動させるとうまくいきました。

これは飽くまで私が体験した一例なので一つの参考になればと思います。

アプリとは何かを説明するとき

専門用語を分かりやすく説明することほど難しいものはないと思います。

自分だけが分かっていればいいというならそれはそれで良しと思いますが、

今後のIT業界で求められるのは技術、アイデアの他に技術と知識の継承が挙げられます。

これができる人とできない人では会社で求められる度合いが違ってくることは間違いないと思います。

世界で自分だけの唯一の技術を持っているとしてもその技術を持っている人はいずれお亡くなりになる運命なのでどうすれば複数の人に継承していくかが今後の技術発展に大きくかかわってきます。

 

いかに不特定多数の人に継承を成功させていくかは教える側がいかに頭が良くて、技術も一級品だとしても教え方が全然伝わらなければ意味がないです。

伝わらなければ教えてもらう側が悪いということにつながるのではと思いますが、同じテーマのことを伝える人によって頭にすんなりと入っていく割合が一定していないことの方が大きな問題だと思います。

100%は無理だとしても割合が一定していなければ教える側が伝える技術がないということになります。

私もいずれ教える立場になるということを想定してどうすれば説明が伝わるのかを考えています。

例えばアプリを説明しなさいといわれれば、今のところ以下のように答えます。

 

アプリ・・英単語でapplicationを指します。このapplicationの本来の意味は適用、応用、妥当性、申し込みなどいった意味でPCやスマホでいうアプリの意味は「応用」にあたります。もう少し詳しく言えば、「利用者がコンピュータ上で実行したい作業を実施する機能を直接的に有するソフトウェア」とあります。

直接的にとありますがでは直接的な前はどのように使いたいソフトを起動していたのかというと、アイコンをダブルクリックして起動するのではなく、文字をめっちゃ打ち込んでようやく起動させるというものでした。

一つのアプリ、例えばワードを起動するためだけのためにそのための文字を打ち込んで時間をかけるのは無意味なので、Windowsからアイコンをクリックしてものの数秒でソフトを起動させることができました。このアイコンをクリックしてソフトを起動させるのを「利用者がコンピュータ上で実行したい作業を実施する機能を直接的に」ということです。

アプリが応用という意味でとらえられているのは今まで文字を打ち込んで間接的に起動させていた技術を応用し、アイコンをクリックして直接起動させることに当てはまっているからです。

インスタンスについて

プログラミングを習いたてのころインスタンスって何なのって混乱したことを覚えています。

今ならば理解してきましたが、これを初心者の人にどうすれば分かりやすく教えることが出来ると思いますか?

始めたての頃、インスタンスについてググりまくりましたが本当に理解しているのか? と疑いたくなるような内容の情報ばかりでした。

私にとってインスタンスとはファイルを新しく作ったり、開発環境でプロジェクトを新規作成するのと同じことだと思いました。

なぜならJavaなど大抵の言語でnewという単語が使われているからです。プログラミング言語がそもそも機械語と呼ばれるコンピュータが理解できる言語を人間が、特にコンピュータ分野を英語圏で発展させた人達が中心であるなら彼らを基準にして英語で何とか理解できるようにしたならばインスタンスというものがnewという単語を起点にしてるならインスタンスとは何かというものを理解できると思います。

もう少し詳しく言うならば、インスタンスとは本当のところ新規作成ではなくコピーをしているといったほうが正しいです。

これはコンピュータのメモリに関する話になりますが、まずクラスを作りますとコンピュータのメモリにそのクラスが格納されます。

そして別のクラスでさっきメモリに格納したクラスの機能を使いたいけどそのクラスをそのまま別クラスに移動させるわけにはいきませんよね?

それをしてしまうとほかのクラスでも上記のクラスの機能を使いたいのに使えなかったらまた同じものを作るのは無駄ですね。

だからコピーするんです。newを使ってインスタンスをつくるというのは使いたいクラスが格納されているアドレスにアクセスしてコピーしてくるという流れになっています。

まずはインスタンスでnewという単語がなぜ使われているのかから始めて、次にインスタンスの仕組みを知るという手順ならば初心者にとってとっつきやすいのではないかと思います。

簡単なExcelマクロで改めて感じたこと

Option Explicit

Sub Inp()

    Dim i As Integer
    Dim ER As Long

    ER = Cells(Rows.Count, 9).End(xlUp).Row

    For i = 1 To ER
        Cells(i, 12).Value = Mid(Cells(i, 9).Value, 2, 5)
    Next i
End Sub

 

単に数字をそのまま別セルに移して、Mid関数で指定の文字列を

抜き取っただけのものです。

私は普段というかExcelVBAをめったに使いません。

こんな簡単なマクロと思うかもしれませんが、

簡単であれ何であれちゃんとできたときの達成感を味わうことが

プログラミングであれ何であれ大切なんだと思います。

しかし短時間で組めるようになるためには歯を磨くように

習慣化して基礎を固めることが重要なんだと組んでて

思いました。

PostgreSQLでのwhereで絞り込みについて

PostgreSQLでwhere句におけるnullの扱いについて学習したことです。

 

以下where句の箇所のみ

 

where ACOLUMN = 'A' or ACOLUMN is null

⇒これはOKのケース

 

where ACOLUMN in ('A1', 'A2') or ACOLUMN is null

⇒機能しなかったケース

 

状況としてはあるカラムにはnullが入る場合があって、なおかつ

条件を絞り込む必要がありました。

「A」というのは例として使っていますが、Aという値で絞って、かつ、

nullも表示させる場合はうまくwhereが機能しましたが、

二つ目のケース、inで複数の値を指定してnullも表示させるということは

できませんでした。()の中にnullを入れるとエラーになります。

nullを表示させないのであればnot nullで絞り込めますが、

逆の場合は扱いが少しやっかいでした。

ストレングスファインダー

今回はプログラミングとは何も関係ないです。

最近ストレングスファインダーをやってみました。

やってみたら結果は下のような感じです。

 

f:id:ayshi:20161110202202p:plain

 

それぞれの特徴については以下そのまま抜粋です。

(参考サイト⇒

ストレングスファインダーまとめサイト | SFの使い方や34の強みを詳しく説明!

慎重さ

あなたは用心深く、決して油断しません。あなたは自分のことをあまり話しません。あなたは世の中が予測できない場所であることを知っています。すべてが秩序正しいように見えますが、表面下には数多くの危険が待ちかまえていることを感じ取っています。あなたはこれらの危険を否定するよりは、一つひとつを表面に引き出します。そうして、危険はひとつずつ特定され、評価され、最終的に減っていきます。いうなれば、あなたは毎日の生活を注意深く送る、かなりまじめな人です。例えば、何かが上手くいかない場合に備えて、あらかじめ計画を立てることを好みます。あなたは友人を慎重に選び、会話が個人的な話題になると、自分のことについては話しをせず、自分自身で考えることを好みます。誤解されないように、過度に誉めたり認めたりしないように気をつけます。人になかなか打ち解けないという理由で、あなたを嫌う人がいても気にしません。あなたにとって、人生は人気コンテストではないのです。人生は地雷原を歩くようなものです。そうすることを望むならば、他の人は用心せずにこの地雷原を駆け抜けるかもしれません。しかし、あなたは違う方法をとります。あなたは危険を明確にし、その危険が及ぼす影響を推し量り、それから慎重に一歩ずつ踏み出します。あなたは細心の注意を払って進みます。

最上志向

優秀であること、平均ではなく。これがあなたの基準です。平均以下の何かを平均より少し上に引き上げるには大変な努力を要し、あなたはそこに全く意味を見出しません。平均以上の何かを最高のものに高めるのも、同じように多大な努力を必要としますが、はるかに胸躍ります。自分自身のものか他の人のものかに関わらず、強みはあなたを魅了します。真珠を追い求めるダイバーのように、あなたは強みを示す明らかな徴候を探し求めます。生まれついての優秀さ、飲み込みの速さ、一気に上達した技能――これらがわずかでも見えることは、強みがあるかもしれないことを示す手がかりになります。そして一旦強みを発見すると、あなたはそれを伸ばし、磨きをかけ、優秀さへ高めずにはいられません。あなたは真珠を光り輝くまで磨くのです。このように、この自然に長所を見分ける力は、他の人から人を区別していると見られるかもしれません。あなたはあなたの強みを高く評価してくれる人たちと一緒に過ごすことを選びます。同じように、自分の強みを発見しそれを伸ばしてきたと思われる人たちに惹かれます。あなたは、あなたを型にはめて、弱点を克服させようとする人々を避ける傾向があります。あなたは自分の弱みを嘆きながら人生を送りたくありません。それよりも、持って生まれた天賦の才能を最大限に利用したいと考えます。その方が楽しく、実りも多いのです。そして意外なことに、その方がもっと大変なのです。

未来志向

「もし・・・だったら、どんなに素晴らしいだろうなぁ」と、あなたは水平線の向こうを目を細めてみつめることを愛するタイプの人です。未来はあなたを魅了します。まるで壁に投影された映像のように、あなたには未来に待ち受けているかもしれないものが細かいところまでみえます。この細かく描かれた情景は、あなたを明日という未来に引き寄せ続けます。この情景の具体的な内容―より品質の高い製品、より優れたチーム、よりよい生活、あるいはよりよい世界―は、あなたの他の資質や興味によって決まりますが、それはいつでもあなたを鼓舞するでしょう。あなたは、未来に何ができるかというビジョンがみえ、それを心に抱き続ける夢想家です。現在があまりにも失望感をもたらし、周囲の人々があまりにも現実的であることがわかった時、あなたは未来のビジョンをたちまち目の前に呼び起こします。それがあなたにエネルギーを与えてくれます。それは、ほかの人にもエネルギーを与えます。事実、あなたが未来のビジョンを目に浮かぶように話すのを、人々はいつでも期待しています。彼らは自分たちの視野を広げ、精神を高揚させることができる絵を求めています。あなたは彼らのためにその絵を描くことができます。練習しましょう。言葉を慎重に選びましょう。できる限りその絵をいきいきと描きましょう。人々はあなたが運んでくる希望に飛びつきたくなるでしょう。

自己確信

自己確信は自信と共通する点があります。心の奥深くで、あなたは自分の強みを強く確信しています。あなたは自分は絶対出来る――リスクを取ることができ、新しい挑戦をすることができ、そして最も重要なこととして成果を出すことができる――ことを確信しています。ただし、自己確信は単なる自信を越えるものです。自己確信という資質に恵まれたことで、あなたは自分の能力だけでなく判断力にも自信を持っています。自分の周りを見た時、あなたは自分の見方が独自かつ独特であると強く思います。そして、あなたと全く同じ見方をしている人は誰もいないので、あなたに関する事について決定を下せる人はあなたしかいないと絶対に信じています。何を考えるべきかは、誰もあなたに指示できません。彼らはヒントを与えることはできるでしょう。助言することもできるでしょう。しかし、あなただけが、結論を出し、何をするかを決定し、行動する権限を持っています。この権限、更にはあなたの人生に関する最終的な責任を取ることを、あなたは決して怖がりません。むしろ、あなたには当たり前に感じられるのです。状況の如何に関わらず、あなたは何が正しい決断であるかをいつも知っているようです。この資質は、あなたに確信に満ちた貫禄を与えます。他の人と異なり、いくら説得力があっても、あなたは他の人の主張に安易に左右されることはありません。この自己確信という資質は、あなたの他の資質の持ち方によって、表面に現れたり現れなかったりしますが、その資質は強くしっかりとあります。船の竜骨のように、それは方々からの攻撃に耐えて、あなたが進路からはずれないようにします。

指令性

「指令性」という資質によって、あなたは主導権を握ります。ほかの人と違い、あなたは自分の考えを他人に強く主張することを苦痛とは感じません。それどころか、ひとたび考えが固まると、あなたはそれをほかの人に伝えずにはいられません。そしてひとたび目標が定まると、あなたはほかの人をそれに同調させるまで安心できません。あなたは対立に怯えることはありません。むしろ、対立は解決策をみつけるための第一歩であることを知っています。ほかの人は不愉快な状況に立ち向かうことを避けようとするかもしれません。ところが、「事実」や「真実」がどれだけ不愉快なことであろうとも、それを示さなければならないと感じます。あなたは、課題が人々の間で明確に理解されていることを求めます。従って、あなたは人に、偏った考えを持たず正直であることを要求します。あなたは彼らにリスクに挑戦することを迫ります。彼らを怖がらせることすらあるかもしれません。これを嫌って、あなたのことを頑固と呼ぶ人もいるかもしれませんが、一方で、進んであなたに主導権を握らせることもしばしばあります。人々は、立場をはっきりと示し、周りの人にもある特定の方向に向けて行動するように求める人に魅力を感じます。だから、人々はあなたに惹きつけられるでしょう。あなたには強い存在感があります。あなたは「指令性」を備えた人です。

 

自分の強みを調べてみると傾向が分かるので良かったです。

Java DecimalFormat 0埋め

Javaの開発で数字の前部分を0埋めにするところがあったので、

それを書いていきます。

 

private static int counter = 0;

 

//10桁になるように0埋めする

private static final DecimalFormat ZERO_10 = new DecimalFormat("0000000000");

for(int i = 0; i < 100; i++){

    counter++;

}

System.out.println(ZERO_10.format(counter));

 

出力結果⇒0000000100

 

以上、0埋めの方法でした。