22時に寝ようと思って2時に寝る。

備忘録や日記を書いてます。きょうは早く寝よう。

Androidアプリ開発を勉強し始めました

お盆ですね。バイト先の学生がみんな帰省しちゃってバイトばかりしてる気がします。(自分は9月ごろ帰省する予定です)

タイトル、これまで「Androidアプリ開発勉強はじめました」って3回くらい言ってる気がする。もう冷やし中華のノリ。

今回は1週間後に控えた短期インターンAndroidアプリ開発に関連することなので、割とまじめにやろうかと思います₍₍ (ง ˘ω˘ )ว ⁾⁾

きょうやったこと

schooの"はじめてのAndroidアプリ開発 - 計算機アプリをつくろう"を受講した

schoo.jp

schoo.jp

schoo.jp

今日は録画で1~3限まで見ました。 電卓を題材にAndroidアプリ開発の流れを学べました。 ただいまいち理解は深まってない感じはある。写経して動いておぉ!ってなっただけな感じ。まだ授業は完結してなくて来週の火曜日に4限目があるのでそれも見る予定。

schoo.jp

昨日、思い切ってschooのプレミアム学生になったので、録画も見放題になりました。 生放送だとどうしても見逃すところがあって、そこでついていけなくなるけど、録画は戻れるので良いですやっぱり。

今回受講した中で特に3限目の「プログラムの整理の仕方(設計)を学ぶ」のところがとても勉強になりました。内容としてはリーダブルコード的なものでした(まだ読んだことないけど)。以下に軽くまとめてみる。

プログラムはどうして複雑になるのか

  • 機能を増やすとプログラムも増える 

    • if文を追加…
    • 新しいメソッドを追加…
    • 新しい部品を追加…
  • 大きく複雑なプログラムになる

    • どこに何があるか分からない
    • 変更の影響が広範囲に及びやすくなる

こういう問題に"立ち向かわなければならない"

読みやすいプログラムとは

  • if文などの条件分岐が少ない
  • メソッドで実行する内容がシンプル
  • クラスが持っているメソッドや変数がシンプル

使いやすいプログラムとは

  • プログラムの実行する内容がシンプル
  • メソッド名が目的を端的に表している
  • クラスの役割が明確に分けられている

設計パターンをおさえる

デザインパターンとも言う。オブジェクト指向プログラミングにおいて、デザインパターンを利用すると開発者にいろいろメリットがある。以下のサイトが詳しい。

デザインパターン | TECHSCORE(テックスコア)

いまいち設計パターンは理解できなかったけど、"なんか使うと良いらしい"的な理解はした(適当)

実際に動くアプリも作れました

https://i.gyazo.com/9e13be3c3ea2d46b6447e128683782b3.gif

ドットインストールで基礎を学んだ

dotinstall.com

dotinstall.com

dotinstall.com

dotinstall.com

ドットインストールは基礎の基礎から丁寧に教えてくれる印象がありますが、AndroidStudio導入の部分から教えてもらえます。レイアウト入門は特に知りたいところを網羅的にかつ端的に図を使って説明してくれるところが良かったです。

おみくじアプリを作った

https://i.gyazo.com/001297844187a4a22e8f296a805ba29d.gif

ちょっと自分なりに工夫しようかと思って、ボタンのデザインをAndroid-Bootstrapを利用していい感じにしてみました。

android.tecc0.com

ただ、これを使うとマテリアルデザインの水面に波紋が広がる感じのアニメーションがなくなってしまうので、どうなんだろうって思いました。

このアプリを作る過程で学べたこととしてはテキストの色の指定等。

テキストの色の変え方

Color.RED
Color.rgb(255,255,255)
Color.argb(127,255,255,255) // aはアルファで透明度を指定できる127で50%の透明度となる
Color.parseColor("#ff0000") // 16進数で指定できる

乱数の発生のさせ方

// 0-2の乱数を生成
Random randomGenerator = new Random();
int num = randomGenerator.nextInt(results.length); 

テーマの変え方

  • デザインに統一感を持たせるためにテーマが存在する
  • コードで指定したテーマはアクティビティの画面を編集する際に出てくるプレビューとは全く連動していない
  • 連動していないので、テーマを変更してもプレビューに反映されない または プレビューでテーマを変更したのにエミュレータでテーマが反映されない等混乱する可能性があるので注意
  • プレビューはテーマ表示に不具合がある場合があるので基本的にエミュレータで動作確認すべき

Strings.xmlでのテキスト管理

  • Strings.xmlを使うことで多言語対応も可能

名前診断を作った

https://i.gyazo.com/df41f21daa0f1fac10270d0e580d1654.gif

エラーメッセージの表記方法やIntentについて学んだ。

名前が入力されてなくて空だった場合に表示するエラーメッセージの出し方のレパートリーはいろいろある

その1 setError

myEditText.setError("Please enter your name");

https://i.gyazo.com/0bce331765d50d63619d8938df1433ed.gif

その2 Toast

Toast.makeText(
    this,
    "Please enter your name!",
    Toast.LENGTH_SHORT
).show();

https://i.gyazo.com/9bbc346a5e203d6c237f71d726ff1800.gif

その3 AlertDialog

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder
    .setTitle("Error!")
    .setMessage("Please enter your name!")
    .setPositiveButton("OK", null);
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

https://i.gyazo.com/a12c963b4ab455ca9356fa9c18a648d8.gif

AlertDialogは動作が重いのでアレらしいから今回は使わず

少し基礎ができた

気がする。

半月前にこの本を買って、さらーっと1/5くらい読んだけど、なんかレベル高いなーと思ってモチベが下がってしまいました。

なので今回は学習動画コンテンツを中心にやっていきました。

やっぱり学び始めの触りは本よりも動画が向いてるのかもしれない。

まだ写経しかできないけど、コツコツやっていこう。

ショートカットキーやコマンドが覚えられない

Office系のWordやExcelPowerPointにもショートカットキーがあるけど、基本的にド定番ショートカット操作、コピペの[Ctrl]+[C]や[Ctrl]+[V]や、何かのきっかけで知った便利で感動して奇跡的に覚えられた数少ないショートカットしか覚えていない。

もちろんテキストエディタ、よく使うSublimeTextも同様にコマンドを覚えていないので基本的にマウスがないとつらい。vimは大学に入学して触ったけどコマンド操作に慣れなさ過ぎてLinuxいじるときくらいしか触らない。

現状、正直なところ困ってない。Linuxだって大学のはRed Hat LinuxGNOME)なのでいざというときはGUIでなんとかなっちゃう(CLIでフォルダ操作してみようという授業もGUIでフォルダいじれたりするガバガバ仕様なのだ)。生まれて初めてパソコンに触れた当時のマシンはNECのVALUESTARでOSはWindowsXPだったので、ずーっとGUIを操作して生きてきました。なのでコマンドなんて覚えなくても…って思ってこれまでなんとかやってこれました。

高校の先生 said "コマンド叩けないやつはクソです"

高校の時の情報科の先生(自分の高校は情報科だったので)でアツい先生がいた。「PCはCLIが基本です。CLIでコマンド叩けない情報系の生徒はクソです」って言ってて、「えっ、俺クソじゃん。」ってなった覚えがある。その言葉のインパクトありすぎて、ちょっとは黒い画面と仲良くしよう、コマンドを覚えるようにしよう、とそのときは思った。でも真っ黒いインタフェースは馴染めない。大学に入ってやっと、Linuxを扱うようになって、最近はCentOSをいじる機会もあってCLIで操作せざるを得ない環境もできたからUNIXの基本的なコマンドは覚えられた。

SublimeTextのコマンドを覚えたい

テキストエディタにはたくさんコマンドがあるので、覚えられると作業効率も上がりそう。あとショートカットキーを駆使してプログラミングしてる先輩を見たりするとカッコイイ。

で、いろいろ覚えようとググって

www.starlod.net

こういうサイトはお気に入りに入れまくった。けど一度見るだけでなかなか参照しない。

なので…

ショートカットキーのTipsが目に入るアナログ式で攻めるようにした

f:id:azuuun:20150812013345j:plain

モニタのベゼルに覚えたいショートカットキーを付箋に書いて貼りまくりました。

これでいちいちWebサイトにアクセスしなくても済みます。視線の移動だけでいい。

今のところいい感じに参照出来て最高です!真似していいですよ!

覚えてしまったら剥がしていきます。最終的にはすべて剥がしたいです。

もうちょっと視線を落とすと

f:id:azuuun:20150812013540j:plain

f:id:azuuun:20150812013622j:plain

日めくりカレンダーの松岡修造さんがダブルオッケーサインで応援してくれています。

この日の言葉は「失敗しても全然OK!」そうだ、失敗してもいいんだ。どんどん書いて、コンパイラにぶーぶー言われながらバグをとっていこう。

SourceTreeとGitHub間のSSH認証がうまくいかない場合に試しておきたいこと

GitHubとSouceTree間のSSH設定のあれこれで、エラーメッセージと一時間近くいちゃいちゃしてとても消耗したので備忘録に残しておく。

リポジトリにアクセスしようとすると「SSHキーによる認証に失敗しました。」とダイアログが出てくる

SSHエージェントを起動しますか?

このダイアログのあと、「FATAL ERROR: Disconnected: No supported authentication methods available (server sent: publickey)」等というエラーログや、それに似たようなログが出るかと思います。

原因はその文意の通り、Gitクライアント(SourceTree)とGitHub間のSSHによる認証がうまくいってないということです。

既に鍵を作ってGithubにも公開鍵登録したはずなんだけど…って場合でも、もういっそのこと最初から鍵を作っていきましょう。

その方法を今回まとめます。

新しい鍵を作る

  • SourceTreeを起動する
  • [ツール]→[SSHキーの作成/インポート]を選択
  • PuTTY Key Generatorが起動する

PuTTY Key Generator

鍵の形式と強度を選択する

PuTTY Key Generatorの一番下の Parameters の Type of key to generate が "SSH-2 RSA" であることを確認する。また、その下の Number of bits in a generated key が "1024" であることを確認。

f:id:azuuun:20150806193000j:plain

鍵を生成する

「Generate」をクリックすると、鍵の生成が行われる。プログレスバーが100%になるまでkeyの欄でマウスを適当にぐりぐりする。マウスの動きによって乱数が発生し鍵になります。丁寧にぐりぐりしても品質の良い鍵ができるというわけではないので適当にぐりぐりしてください。あれです、ゲーセンにあるアンパンマンのポップコーン工場的な感じです。ハンドルをどれだけ早く、激しく、丁寧に、回しても出来上がるポップコーンの品質には影響せず、いつも変わらぬおいしさを提供してくれるやつです。回さないとめっちゃ怠惰なアンパンマンジャムおじさんのアニメーションが流れて、出来上がりがめっちゃ適当な感じでところどころコーン豆のままだったりしたらめっちゃ面白いと思う。

Key Commentを入力する

ここは任意にコメントを入力できます。鍵を区別するためにも利用でき、パスフレーズ入力を促されたときにも表示される。

パスフレーズを設定する

Key passphrase と Confirm passphrase に任意のパスワードを入力 今後認証時に使用することになるので忘れずに。

秘密鍵を保存する

Save private key をクリックして、「秘密鍵」を保存する。なお、秘密鍵拡張子は「.ppk」となる。

※ 保存場所は覚えておく

公開鍵を保存する

Save pablic key をクリックして、「公開鍵」を保存する。

※ 保存場所は覚えておく

Pageant Key Listに秘密鍵を登録する

恐らくSourceTreeを起動時にSSH Agent(Pageant)は立ち上がっていると思いますが、念のため、[ツール]→ [SSHエージェントを起動]を選択する。

すると、タスクバーに下記のようなPagentのアイコンが常駐しているので、これをクリック。

f:id:azuuun:20150806194421j:plain

すると、Pageant Key Listのウィンドウが出るかと思うので、Add Key で先ほど生成した拡張子が .ppk である"秘密鍵"(PuTTY秘密鍵ファイル)を選択し、Addする。

これで、秘密鍵の登録は完了です。

GitHubに公開鍵を登録する

いよいよ終盤です。

GitHubにアクセスして、SettingページのSSHの設定を開いてください。

右上に [Add SSH Key]ボタンがあるので、クリックする。

f:id:azuuun:20150806195344j:plain

すると Add an SSH Key フォームが表示される。

Titleは特に必要ないけど、適当に覚えやすいのを書くとよいかも。

Keyに先ほど作成した"公開鍵"を入力する。

公開鍵のファイルを何か適当なエディタで開いて中身を確認する。

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "rsa-key-20150806"
DEFEB3NzaC1yc2EAAAABJQAAAIEA1w3bpEzvI2baOTJkHjhV85Ysu10RYRam/1f4
sExcBlYI2wQpiPHt3JVGKxXwLvthyOQ1rBSra9dWPUcEAp+1exlM7JLNSqMC+Mwe
BWGx1ezVZQsMmN+5XQ/bEJuo/umaGs5rx3h3VSXWvZJJhNNclRX1pp6f2VIGnAx+
lvWtajc=
---- END SSH2 PUBLIC KEY ----

中身はこんな感じになってる(例なので乱数の値は適当)。これをそのまま Keyフォーム にコピペしても受け付けてくれない。

なので、

ssh-rsa 
DEFEB3NzaC1yc2EAAAABJQAAAIEA1w3bpEzvI2baOTJkHjhV85Ysu10RYRam/1f4
sExcBlYI2wQpiPHt3JVGKxXwLvthyOQ1rBSra9dWPUcEAp+1exlM7JLNSqMC+Mwe
BWGx1ezVZQsMmN+5XQ/bEJuo/umaGs5rx3h3VSXWvZJJhNNclRX1pp6f2VIGnAx+
lvWtajc=

というように入力します。

どうなってるのかというと、

まず「ssh-rsa 」と打ち込んでます。 ちなみにssh-rsaの後ろに半角スペースが入っているので要注意。

その後改行し、公開鍵の中身、3行目から終わりまでをコピペしてます。

Add an SSH key

入力したら、Add keyボタンをクリック。完了です。

うまく受け付けてくれない場合は、何回か試行錯誤してみてください。ssh-rsaの後の半角スペースは要確認です。

以上で、GitクライアントとGithub間のSSHの設定は完了です。

プッシュなどしてうまくいくか確認してみてください。

SSHって何ですか

www.adminweb.jp

読みましたか。

僕は読んでないんですが…自分ではなんとなく理解してるつもりでいて、でも実際説明しろって言われたら…。時間あったら読みたいな。

ものの伝え方

ある先生の講義でテストの二日前のきょうまで期末試験の範囲が発表されていなかった。

その先生の講義は週2で行われていて、自分とは違うコマのクラスで履修している友達と話をしている時に「期末の範囲、今回発表されていないからどう対策しよっかなあって思って。」と相談すると、「こっちのクラスは範囲書かれたプリント貰ったよ~。」とのこと。

なんだ、じゃあこっちのクラスも先生に相談したら貰えるんじゃないか、と思った。

それで、さっき先生の研究室へこの件(他に用件もあったので)について相談に行った。

「期末試験の範囲についてなんですが、○曜日の講義を履修している友達から期末試験の範囲の書かれたプリントが配られているそうですが、こっちのクラスではそういったプリントって配られないんですか?」

自然にそういう言葉で質問した。何も意識してない。

すると、

「あぁ、それね。さっきもA君がその件について相談に来たよ。すっかり忘れてました。すみません。今日中に範囲についてはメールします。まぁしかしA君は『○曜日の授業では配られているそうですが…。』という前置きで責めるように聞いてこなかったけどねぇ。」

と言われました。責めたつもりはなかったが、そう捉えられていまうような言い方をしていた。

心底で「なんで違うクラスでは配られているのに、こっちのクラスじゃ教えてくれないんだよ。」という気持ちはあったのかもしれない。

しかし、何よりコミュニケーションをする上で、ものの言い方、伝え方は気をつけないと…と反省しました。

話し方のマナーとコツ (暮らしの絵本)

話し方のマナーとコツ (暮らしの絵本)

時間があったらこういうの読みたい。

とりあえず何かしないとという焦りと近況

最近、暑いですね。

東北北部はまだ梅雨明けしてないみたいですが、気象庁の速報によると7月中には明けるみたいです。

近況

原付スクーターに乗り始めました

中古で買ったHONDAのDio。正直原付なら何でもと思ってたけど、今はデザインがスタイリッシュで気に入ってます。

ヘルメットをどうしようか悩んで、とある記事で「ヘルメットの値段は自分の頭の価値だ!」なんて言葉を見てしまって、原付にしてはやや立派なジェットヘルメットを買いました。

届いて、すぐ被って興奮覚めやらぬ状態で、夜中の23時にひとっ走りしました。

静かで加速もいい感じ。

で、自宅に戻って駐輪場でメットインにヘルメットをしまおうとしたら、入らない。あともう少しで入りそう!とかじゃなくて、全然入らない。今はリアボックス、付けちゃおうかななんて考えてます。

大切に乗ろうと思う。

夏休みに短期インターンに行くことにした

インターン先は岩手県内の情報系企業。

きょう電話があって具体的に日程などが決まった。8月下旬に5日間。

内容はなるべく希望を聞いてくれる感じだった。iOSアプリ、Androidアプリ、Unity系…などの候補があった。電話して初めて具体的な課題候補を知ったため、「えぇ!自分で選べるのか…!」と驚きながら、一番身近で一度挫折したことのあるAndroidをあえて選択しました。

電話の中で、

「今のところ、どのくらい出来ますか?」

と聞かれて、

「教養本をさらっと写経した程度の経験ならあります。」

と答えた。我ながら、やる気のない感じの悪い返しだったと思う。反省。でもここで嘘ついてしまっても仕方ないので正直に。

「分かりました。ちなみに環境構築は出来ますか?」

環境構築なら俺に任せろー(ばりばり)なので、

「環境構築でしたら出来ます!」

と元気に。環境構築出来たからなんだよって感じなんだけども。

この電話の後、一息置いて「今のところ、どのくらい出来ますか?」という言葉が何度も頭をぐーるぐる。

「(ふ~ん、何も出来ないのか…)ちなみに環境構築出来ますか?」と言われたような気がしなくもない。

今のところこれといった成果物がないもんなあ。

振り返ると6月、7月は何もしてないもんな。何かしなくちゃ。最近、技術系の記事を書いてない。

課題、サークル、バイトを言い訳に何も出来てない自分を正当化してしまってる。

テスト明け、8月上旬からはAndroidアプリ開発の勉強を本格的にやろうかと思います。いいえ、やります。宣言しとく。

とりあえずいまは目の前のテストを単位習得にむけてがんばろう。

では。

FAXが近くにない時にFAX送ってくれと言われた時に便利なHelloFaxを使った話

チャリで事故る

ついこの前、自転車に乗って家に帰宅中、

家の近くのT字路の歩道を軽やかにコーナリングしてる時に、境界石、と聞いてもあんまりピンとこないと思うのですが

境界石

こいつです(イメージ画像)。この境界石が、運悪く俺のチャリの走行ライン上にニョキっと生えてまして、思いっきり真正面から衝突してしまいました。

なんてアホなんだって感じだけど、自然豊かなコーナーだったので雑草が生い茂ってて歩道もよく見えなかった。

あまりの急制動によって自転車が一回転、身体が宙を舞って…、この辺一瞬のことで覚えてないけど手と膝で着地できた。チャリは飛んでいった。

幸い、周りに車や人はいなかったので単独で済みました。

自分自身は受け身もとれたので手を擦りむいてひざを少し打撲した程度で済んだのですが、自転車はパンクして、フレームが歪んでしまいました。あと、お気に入りのジーンズ破けた。かなりつらい。

ほんと、気をつけよう。視界の悪い道は通らないようにしよう…。

で、自転車がないとまともに移動できない田舎なので、新たな移動体がほしいと思って、原付を買うことにしました。

原付を買った

欲しい原付は、すぐ見つかった。

いろいろ人伝いに安い程度の良い中古原付ないか教えてもらって、格安で見つけることが出来ました。たぶん来週には乗れる。

そこの店で原付のナンバー取得などの手続き諸々をやってくれるらしくて、「住所と○○のコピーが必要なのでFAXで送って欲しい」と電話がきました。

「スキャナがあるので読み取ってPDFにしてメールで送ってもいいですか?」

「紙媒体でうんたらかんたらなのでFAXでお願いしまーす!」

「分かりました。(よくわからない)」

当然FAXなんて持ってないので、コンビニに行こうかと思ったけど、50円かかるし、外はクソ暑いので出たくないし、ネットでFAXを送れたりしないかな~って調べたら、

あった。

HelloFaxを使えば無料でFAXが送れる

www.hellofax.com

一ヶ月に5枚まで無料。

使い方はここを参考にした。

samulife.com

上手く送信できると、「Success! Your fax has been sent.」ってメールが届く。

めっちゃ便利ですね。コンビニ行かなくても済みました。

でも、メールにPDF添付じゃダメな理由って何なんだろうな…。

二十歳になった

今日、2015/07/06、誕生日でした

祝ってくれた方、ありがとうございました。

「誕生日おめでとう!」と、一言貰えるだけでも嬉しいものですね。

日付が変わってすぐは、全然実感が湧かず…。でも、1日過ごしてみて「おめでとう!」と声かけてもらう度に「あぁ、二十歳になったんだなぁ」と…。

あと、宅急便でプレゼントが届いたり…、

めちゃめちゃ嬉しかったです。中身は肌触りの良いハンカチでした。大切に使う!

二十歳になったら、何が出来る?

ちょっとぐぐってみた。

  • お酒が飲める
  • たばこが吸える
  • 選挙権が与えられ投票できる
  • 競馬・競輪など公営競技の投票券が購入できる(学生は無理っぽい)
  • 親の同意なく契約できる
  • 親の同意無く結婚できる

色々できるようになる。

特に手軽に実感できそうなのは、やっぱりお酒かな。 誕生日祝われるついでに「飲み過ぎんなよ!」とか「吐くまで飲もうぜ!」とか言われました。友達の誕生日ももうすぐなので、今度”ほどほどに”一緒に飲もうと思ってる。

あと、二十歳になると

とか、義務や責任も課される。

生まれた日は何曜日だったか

ついこの前、細田守監督のアニメ映画『バケモノの子』が放映される記念で、地上波で映画サマーウォーズが放送されてました。何回見ても感動するので、見たこと無い方はぜひ!

で、サマーウォーズの作中の主人公 健二が高校の先輩夏樹の誕生日の曜日を当てるシーンがあります。ここではモジュロ演算を使ってて、生年月日から曜日を当てることができるっぽい。

ということで、実際に自分の生年月日(1995/07/06)でモジュロ演算をやってみたいと思う。

調べると、ツェラーの公式というのを使う。

まず、h百y年m月d日に当てはめる。

h=19, y=95, m=7, d=6 となる。( 1月、2月は、前の年の13月、14月として計算しなきゃいけない)

で、W=y+[y/4]+[h/4]-2h+[13(m+1)/5]+d を計算する。

この大括弧、[X]はガウスの記号と呼ばれるもので、 Xを超えない最大の整数、つまり、Xの整数部分だけを抜き出すとよい。(例えば、[12/5]=2という感じ)

次に、このWを7で割った余りを出して、次の表で当てはめると曜日が分かる。

1 2 3 4 5 6 0
曜日

実際にやってみる。

W=95+[95/4]+[19/4]-2*19+[13(7+1)/5]+6
=95+23+4-38+20+6
=110

Wを7で割った余り 110mod7=5

表をみると、5は木曜日。正解なのか分からない。

Windowsのカレンダーで確認してみる。

曜日

お、あってるっぽい!

暇だったらやってみてください。地味に感動します。

二十歳、成人になったというひと区切り、だけど何をするでもなく過ごしそうだ。

最近は、Javascript、Three.jsでルービックキューブを作っている。コレが今の自分にとってかなり難しい。

クォータニオンの概念が…行列が…、頭あいたたた…って感じです。数学…やっぱ大事だよな~と痛感してる。

さて、寝よう。

参考

曜日計算