猫になりたかった人生です。

猫になりたかった人生です。

とある情報系専門学校生の活動記録

目標を考える話

3時間以上体育館でバスケ、バレー、バドミントン等やって筋肉痛を極めた

どうも、筋肉痛2日目を迎えた猫さんことセンセです。

今日は所属しているプログラミングサークルでのサークル目標と個人目標を立てる記事になります。

サークル目標って必要でしたっけ?

新入部員いなきゃ誰が引き継ぐのって思ったり思わなかったり

とりあえず外部イベントがんがん参加したい。

折角ブログ書きゃ公欠扱いにできる制度あるのに活用しなきゃ勿体ないんじゃない?ってね。

この学校に入学して1年経ったけどまあプログラミングする授業がない。

おまけにCASLSQLをちょっとやったくらいでチーム開発やれは去年の私には精神的にだいぶきつかった。

あまりプログラムする気力が湧かない人が多い気がするので折角のサークルで、学生だから外部イベントに行くこと増やしてみませんか?

一人で今年のABC行くことができなかったので皆で行けば怖くない的な感覚です。

MakerFaireTokyoは商談の為であるコンテンツEXPO東京とは違って、子供向けの体験とかもあるしがっつりIT系でもないので外部イベント入門としても私はおすすめします。

個人目標

 1.新しく作りたいもののアイデアを思いついて作成に取り掛かる。

去年はGASで天気予報の自動ツイートやら中途半端に暗号化に挑戦したりとアイデアが生まれてきていたのに資格試験だー、ベース練習しなきゃーと自分に言い聞かせていたらアイデアが浮かばなくなってしまった。

とりあえず外部イベントに参加したりいつもとは違うことをしたり自分とは違う考え方をたくさん見て聞いて面白いアイデアを浮かべたいと思います。

2.資格試験合格

医療情報技師の合格とちまちま応用情報かセキュリティの勉強も始めていかなければなぁと思います。

3.ベースの技術力をあげる

ベースを初めて1年が経ったのでスラップとかも練習して、経験者組のやりたい曲をできるようになりたいなと......

その他

6/30に人生初のアイデアソンをしました。

私の中では学校選抜に選ばれてしまった介護デジタルハッカソンの話し合いの練習がてらでしたが、各チームのアイデアが独特かつ面白かったので参加してよかったと思います。

ゆるっとまるっと振り返り

今年の漢字は「北」らしいです。北海道のイクラ丼が食べたい...... 

adventar.org

というわけで今回は上記アドベントカレンダーの17日目になります。

今年はどんなことをしたのか、過去に書いた記事を一部取り上げつつ振り返りたいと思います。

ゆるーっと振り返り

入学後、2つ系統の違うサークルに所属しつつ8ヶ月とあっという間に過ぎ去っていきました。

 技術系イベント参加履歴

人生初の技術系イベント参加は6月でした。

ついでに初の名刺も作ってもらいました!あとビックサイトも初ですね。

私の知っている技術は、もはや過去のものでありあったらいいなが既に実現しているという事を実感しました。

これは学校の行事として参加してきました。

電子お薬手帳骨伝導についてはここで知ることが出来ました。

企業の方とお話しするのも楽しいですね。

期間が開いて3年ぶりの幕張メッセにも行ってきました。

 

実際に開発した話

これは後に断念していますが高校の時に学んだ暗号方式を組み合わせて遊ぼうとしてました。

 

こちらはアドベントカレンダーにも載っていますがちゃんとした開発を行おうとしてた話です。しばらくcase文は見たくありません。

 

番外編

秋葉原での探検の話です。ここでワクワクしている物は実際に技術系イベントで知ったものや授業でまとめたものが基盤になっているので、また時間とお金があれば一日パーツ屋さん巡りしたいなぁ......

来年の目標 

授業で行っている開発を完成させること

基本情報技術者試験に合格すること

何かハードウェア関連で作りたい、ボタン押してツイートさせるだけでも

 

こんな感じで今年は終わりですね。忘年会シーズンなのでどこも人が多くて人酔いがしやすくて辛いです。あと匂いに敏感になっているのか直ぐにむせるのだけは治したい...

 

来年もよい年でありますように

 

 

 

開発初心者が初めてシステムを開発しようとした話

 

どうも、猫さんです。

今回は9月末にグダグダと決まった会計システム作成の振り返りを題材にしつつAdvent Calendarの12日目を書いていこうと思います。

 

adventar.org

あらすじ(スキップ可)

9月末のとあるサークルでのMTG

約一か月後に控えた学園祭での出し物について話していた......

 

そこで使用する会計システム、もしそれを生徒で作るとするならば誰が作るか

先輩は乗り気ではない、それだけは空気で、反応でめんどくさいとわかる。てかめんどいから嫌だとも言われた。

 

私は迂闊だった。後に装飾にも名乗りを上げてしまい仕事を増やしてしまうなんて思っていなかったからだ。

やろうとしたこと

 

f:id:MI_SAN_CAT:20171204142128p:plainGoogleスプレッドシートをデータベースとして扱い

GoodleAppsScriptでスプレッドシートへの読み書きやJSON変換で送信

HTMLで取得したデータの表示や入力データの送信

を行わせています。改行の表示とかが残っていますが急いで作ったので許してください。

何故複数人になったか

最初は1人での開発に挑戦していましたがHTMLでの入出力処理や、GASとのデータのやり取りの実装が知識不足によりなかなか出来ず泣く泣く五段先輩に依頼したわけです。

 

簡単に説明すると...

フロントエンド(HTML)側:五段先輩

バックエンド(GAS及びスプレッドシート)側:猫さん

ということで本番まで残り20日ほどで再スタートとなりました。

今回の記事で書くのはバックエンド側です。

仕様

スプレッドシート

は商品リスト用と販売履歴用の2つのシートを同じスプレッドシート上に作成しています。

GAS

GASとスプレッドシート間はGoogle Sheets APIで、

GASとフロントエンド側へはJSONに変換してからdoGetとdoPostを利用しています。

doGetでは、modeというパラメータを追加することで2つのモードを実装。

allで商品リスト、fiveで販売履歴5件を最新の5件前から最新までのをJSON形式でそれぞれ返します。

更にWebアプリケーションとして導入することで面倒な「Developer ConsoleでのExecution API設定」等を省いています。

ソースコード
var url = 'スプレッドシートのURL';
var sheetName = '商品リストシート';
var book = SpreadsheetApp.openByUrl(url);
var sheet = book.getSheetByName(sheetName);

 // フロントエンドへのデータ送信
function doGet(e){
  switch(e.parameter.mode){
    case 'all':
      var json = convSheet(sheet);
      Logger.log(JSON.stringify(json));  
      return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON);
      break;
    case 'five':
      var sheetH = book.getSheetByName("販売履歴シート");
      var json = GetList(sheetH);
      Logger.log(JSON.stringify(json)); 
      return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON);
      break;
    default:
      return ContentService.createTextOutput("EROOR!");
      break;
  }
}

// シートからデータを取得する function GetList(sheetH){ var LastRow=sheetH.getLastRow(); var FirstRow=LastRow-4; var column = 1; var numcolumns =11; var range = sheetH.getRange(FirstRow, column, 5, numcolumns); var data =range.getValues(); return data; } // シートからのデータを並び替える function convSheet(sheet) { var colStartIndex = 1; var rowNum = 1; var firstRange = sheet.getRange(1, 1, 1, sheet.getLastColumn()); var firstRowValues = firstRange.getValues(); var titleColumns = firstRowValues[0]; var lastRow = sheet.getLastRow(); var rowValues = []; for(var rowIndex=2; rowIndex<=lastRow; rowIndex++) { var colStartIndex = 1; var rowNum = 1; var range = sheet.getRange(rowIndex, colStartIndex, rowNum, sheet.getLastColumn()); var values = range.getValues(); rowValues.push(values[0]); } var jsonArray = []; for(var i=0; i<rowValues.length; i++) { var line = rowValues[i]; var json = new Object(); for(var j=0; j<titleColumns.length; j++) { json[titleColumns[j]] = line[j]; } jsonArray.push(json); } return jsonArray; }
// フロントエンドからのデータをシートへ書き込み function doPost(e){ var data = JSON.parse(e.postData.contents); var Time = new Date; var Total = data.total; var Deposit = data.deposit; var Set = data.set; var Pudding = data.pudding; var Jelly = data.jelly; var Cake = data.cake; var Coffee = data.coffee; var Milktea = data.milktea; var Straighttea = data.straighttea; var Drpepper = data.drpepper;
// シート取得 var ss = SpreadsheetApp.openByUrl(url); var sheetH = ss.getSheetByName("販売履歴シート"); // データ入力 sheetH.appendRow([Time, Total, Deposit, Set, Pudding, Jelly, Cake, Coffee, Milktea, Straighttea,Drpepper]); //レスポンス返し return ContentService.createTextOutput("POSTFIN!"); }

 これは、後に見つかったバグを修正したものです。

当時のやらかし

変数名を変更後に更新できていないとによるエラーを初日にやらかしました。

また、処理はきちんとされているがレスポンスがEroor!を出す問題も2日目に出てきていて当時も直すことができていませんでした。

......が、このブログを書くためにソースコードを見直していると出てきた違和感により発覚したバグ。

 

 

>>>break文が抜けている<<<

 

 

うわあああああああああああ▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂ああああああああああああああ

先輩方申し訳ありません。これ本当に完成してるのかなとか言われていたのは知っていますが、データの取得はできています。

所詮プログラムもかじった程度の奴が先輩方すら忙しいとか面倒とかで触れなかった大掛かりな物に挑戦しようとして申し訳ありませんでした。

 参考にしたもの

【GAS】スプレッドシートのデータをJSON出力する関数をExecution APIで外部のNode.jsから実行する - Qiita

Google Apps Scriptの開発手法まとめ - Qiita

得たもの

今回の開発で得たものについて得たものが沢山ありました。

  • doGetやdoPostについて
  • レスポンスの重要さ
  • 看板方式を体感する事
  • 知識がある人を頼る事
  • 早めの行動
  • 仕事を増やしすぎない
  • 弊学の学園祭に過度な期待はしないこと
  • GitHubの便利さ

普段からMTGにいる人が仕事できるとは限らない事

今思いつくのはこれだけですがこの件で成長と自分の愚かさの理解ができました。

また、現在基本情報技術者試験の勉強をしていますが経験から用語の意味を理解しやすくなったことを実感しています。

挑戦はいいことだと思いますがリスクマネジメントも大事です。この経験を今後に活かしつつ程よく精神疲労を防いで2年に上がりたいと思います。

 

さて、次は17日のお楽しみです。

ゆるっと今年の活動を振り返りたいと思います。それでは!(o´・ω・`o)ノシ

電子部品屋さんで目を輝かせた話

辛い物って辛すぎると胃がびっくりするし、鼻水止まらなくなるんだね

どうも、その後は胃が暫く温かくなっていた猫さんです。

今日は公欠を取って秋葉原にチーム開発で使用する電子部品を調達しに行ってきました!

f:id:MI_SAN_CAT:20171122234557j:plain

今回パーツを調達してきたのは秋月電子さん(秋葉原店)

本日調達したパーツ

今現在必要であると思われるパーツをディスプレイを除いて

  • フォトリフレクタ
  • プッシュスイッチ
  • スライドスイッチ
  • ロータリーエンコーダ
  • 赤外線LED
  • ジャンパーワイヤー(オス・メス)

のスイッチ3種、センサやその他各種1つずつ確保完了!

パーツって見飽きないですね!ずーっとパーツ(主にスイッチ)を見ていたらのびあに拗ねられました(´・ω・`)

 

後は個人的に秋月電子さんから30秒くらいのところにあるマルツ 秋葉原でカバー付きスイッチ(ミサイルスイッチ)を買いました。

別に用途は決めてません。ただカチカチしたかっただけ()

固いので指の力が強くなりそうだなぁと思いつつこの記事を書いています。f:id:MI_SAN_CAT:20171123022140p:plain

来週の猫さんは?

Raspberry Piに触れます。

プログラムを書く以前の問題に躓きそうな気配がするけど自分で動かなきゃ駄目だと自分に叱っています。

既に慣れていない言語での開発は確定なので資料をいくつか読まなければね

おまけ

昼飯の辛い物で死んだ私を休めた後にのんびり歩いてみようとなって、たまたま選んだ方向にCEATECで変な部品作っているとかで記憶に残っていたマックエイトさんを見かけました。

私以外の同学年でCEATECに行ってたのは今回の開発チームの相方、のびあだけですので二人で大興奮してました(笑)

あのスタンドむっちゃ便利です。秋葉原CEATECも両方行ってよかったなf:id:MI_SAN_CAT:20171123024253j:plain

mi-neko-maple.hatenablog.com

 

 

 

別のチーム開発のLCDを使ってHello world!を表示させれた話

最近は教室の隅のスペースが居心地いいのではないかと思い始めている

どうも、猫さんです。胃痛がデフォルトになりかけています。

理由ですか?ここ2ヶ月ほどのストレスだと思っています。

 

さて、本日はチーム開発で挫折していたLCDでのhello worldを目の前で作業しているチームが半田付け済みLCDで挑戦していて上手くいっていなかったので乗り込んで一緒に挑戦してきました。

当時の記事はこちら

自チームはRaspberryPiに切り替えたのでやる必要はなく時間の無駄だと思いつつも好奇心が勝ってしまいました。ごめんなさい。

別チームの現状を知る

同じくArduinoで開発をしているチームです。

Lチカ云々はやらずに最初からディスプレイに挑戦していてすごいなぁと思っていました。

しかし、コードをコピペして実行させて表示されないとがっかりしていたので覗いてみたのです。

何が足りなかったのか

参考にしている記事を見せてもらいました。

[I2C] 1602 LCD ディスプレイ (HD44780 + PCF8574A)

  • 青い半固定抵抗は LCDコントラスト調整用です。「何も表示されない!」と騒ぐ前にコントラストを調整してみましょう。

......まずコントラスト調整だね!

次にコードの点検の前にライブラリ追加してないことに気づく

そしてまずIC2機器のアドレスを知らべる段階を踏んでいないことにも気づくf:id:MI_SAN_CAT:20171121113747p:plain

アドレスを調べた結果参考記事のコードとアドレスが違う

Arduino で LCD を表示させる! ( 模型・プラモデル ) - 鉄道(乗り鉄/模型鉄)&温泉&PC&電子工作 - Yahoo!ブログ

似たような記事を探しアドレスの違い時の変更する内容を探す。

f:id:MI_SAN_CAT:20171121113750p:plain

最初のアドレスだけ変更で大丈夫なようなので書き換える。

実行!

f:id:MI_SAN_CAT:20171121113931j:plain

やった!できた!!!悔しかったことが消化された!(*´▽`*)

まとめ

多分ちゃんとLチカとかやって何をやってる処理を書いているのか理解した方がいい

あと、シリアルモニタに出力してるのに気づくの遅かった自分がいる

 

お腹鳴りすぎだよ自分←

 

 

さて、明日は秋葉原に行って空薬包の通過判定する用の光電センサといろんなパーツを見てきます。

初めての秋葉原楽しみだなぁ......

そろそろアドベントカレンダー用に下書き書きます。

でも内容的に先輩をディスってしまいそうで怖い

チーム開発という名のタッグ開発

自分のスパゲティコードに勝てませんでした。

土日に頑張って暗号化のアルゴリズムを読み解こうとしたのですが、致命的な欠陥に気づいてしまいやる気を失ってしまいました。

それならば新たな暗号化のアルゴリズムを作った方がいいなと思いつつ個人開発の時間は終わりです。

本日からはチーム開発となります。

旅のお供

といってもメンバーは一人なので相方のようになっています。

今回の相方のブログはこちら。可愛い才能あるドラマー兼プログラマ(lv.2)です。

私もプログラマ(lv.3)と名乗っていいのかわかりませんがきっとプログラマだと思いたい。

manami1533.hatenadiary.jp

そしてまだ記事はないけどチームとしてのブログはこちら

デザインとかこれから変えていきます。

時代が早かった件

※とてもつたない絵や字が出てきます。

最初の議題

ぬいぐるみと会話させたい、便利なコンシェルジュみたいなもの

敗因:世の中に出回りすぎてる。f:id:MI_SAN_CAT:20171024114217p:plain

次の議題

お薬を管理できるタイマー、1週間分のお薬をアラームと共に1回分のお薬を出してくれる。

敗因:求める機能以上の物が出ている。(タカラトミーの商品URL)

f:id:MI_SAN_CAT:20171024114352p:plain

大手会社と同じものは出せない(確信)
発売は2016年12月なので一,二年早ければなぁ...
スマイルメディくん可愛い

その他

鍵や携帯の紛失防止ICタグとかの利用(既にいくつかあるURL)

ICタグによる老人や子供の徘徊、外出の検知(やはり大手であったURL)

最終的に

まだ商品化されていないものをと考えるとまだ触れられていない隙間なアイデアを見つけなければならないなとなりました。

あと思いついても医療じゃなかったりする以下例え

レシートの写真による管理、新幹線切符を交通系ICにまとめる(新幹線座席連携)とか面白そうだけど今回はまだ医療でいたい!

ってな感じで別の機会に作るべきだなと思いました。

 

今日の記事のHTMLは特に弄っていません。

夢の中でプログラム書いているのは相変わらず続いてるのでそろそろ夢の中で猫カフェに乗り込みたいなぁ......

個人で何か作ってみよう③

猫さん は 力尽きてしまった!
めのまえが まっくらに なった!
............おや?猫さんの様子が...

どうも瀕死で立ち上がりました猫さんです。

今日はまだあがきます。

コマンドを選択

▶たたかう

 技術者召喚
▶Logger.logでデバック
 出直す
 優先度変更
 別の環境での作成

猫さん の こうげき

昨日動かしたときは最初に起動時間が長いと怒られました。

 というわけでコードを見直して所々にLogger.logをぶち込んでみます。

エラー の こうげき

3時間後に気づきました。復号の処理がうまくいってない。

夏にも復号で悩まされたので、とりあえず公開鍵、秘密鍵の計算は諦めて旧式暗号による暗号化を先に実装しなおしです。

つまり、学祭の私の展示の危機なので土日に自宅で発狂しながら作り直します。

猫さん は ちからつきた

MTGやバンドの練習があるので本日の開発時間終了のお知らせです。

コンティニューは明日にして進捗報告があげにくくなりますが、鍵生成の式をちゃんと見直してのレベリングをしてきます。

お気付きでしょうかスクリプトが許可されていれば<h>タグの行の後ろで▼が点滅しています。

あまり使いすぎると重くなりそうだなと思いつつHTMLは軽く遊ぶ程度でのんびり知っていきます。

あとはトップページのURLをarchiveに飛ばすようにも設定していました。

他の生徒が見ているか分かりませんがこういったカスタマイズも面白いと思います。

www.ituore.com

それでは、棺桶からの復活まで...(。・ω・)ノ゙<bye!