完全に実力不足な理系大学生からの成長ブログ

プログラミング能力皆無、でも頑張ります。

コロナ体験談

こんにちは。
よりです。

投稿遅くなってしまい、大変申し訳ありません。

AC、なんだかんだ毎年書いてる気がします。
adventar.org


何せコロナに感染して1週間ホテルに隔離されてしまい、
なのに仕事はする、みたいな日常を過ごしていました。

コロナ感染者の日々

コロナにかかった理由

これが、完全に不明なんですよね。。
感染経路が全くわからず感染したので会社も大騒ぎしてました。
でも、会社内で近しい人は感染しなかったので最近言ってるジムとかが感染経路なのかなぁと思います。

コロナと判明した理由

最初は風邪かなぁと思ってました。
んで38.5度の熱だったんで一応病院に行って、一応コロナの検査やったら一発でコロナって判断されました。

コロナの症状

私はとても軽い方でした。
高熱での節々の痛みと軽い頭痛に咳くらいでした。
よくいう味覚がなくなる、みたいなのもなかったのでほんとにただの風邪だと思いました。
ちなみに2日で熱も下がって回復しました。

ホテル隔離の流れ

コロナ感染が判明してから、ホテルの手配までに3日程度かかりました。
でも手配とかは保健所の方がやってくれるので家でずっと寝てればおkです。
ホテルが決まったと連絡がきたのは前日の夜9時でした。
ホテルへ移動する際は家の前まで東京オリンピックのラッピングがされた車がきて、
ホテルまで輸送されました。
ちなみに、運転席と私が座った席の間にはしっかりビニールシートが貼られていました。

ホテルに到着して

ホテルに着くと謎の封筒とカードキーを渡されて自室へ。
案内はビニール越しにホワイトボードに書かれた文字でした。
会話は一切なしです。

それとホテルのロビーにペッパーくんがいました。
「今日のラッキーカラーは白です!」
「腹が減っては戦はできぬ、しっかり栄養をとりましょう!!」
「みなさん、応援してますよ!」
って感じでずっと喋ってました。

封筒の中身

封筒の中には都知事からの手紙や消毒の案内、ホテルでの過ごし方などが書かれた紙がいっぱい入ってました。
それと、パルスオキシメータも入ってました。
パルスオキシメータは血中酸素濃度と心拍数を計測するものです。
1日に2回、朝7時と夕方16時に体温、血中酸素濃度、心拍数をシステムに登録します。

館内アナウンス

館内アナウンスが非常に多く囚人感ありました。
7:00 体調のシステム登録案内
8:00 朝ご飯の案内
9:00 朝ご飯終了の案内
12:00 昼ごはんの案内
13:00 昼ごはん終了の案内
16:00 体調のシステム登録案内
18:00 晩ご飯の案内
19:00 晩ご飯終了の案内

コロナ感染で気にしなきゃいけないこと

コロナに感染して気にしなければいけないとっても大事なことは濃厚接触者の確認、謝罪です。
発症2日前までに私と接触があった人は濃厚接触者に該当しました。
その人たちは私と最終接触した日から2週間は外出ができなくなってしまいます。
自分は発症から10日なのに濃厚接触者はそれ以上に外出できないんですよ。
だから、いろんな方にご迷惑をかけてしまいました。。。。

最後に

すいません、予定してたのとは大きく異なる変な記事になっちゃいました。
流石に来年以降はかくのやめておこうかしら。

日本のウォーターフォール開発への不満

はじめに

お久しぶりです。yoriです。
1年に一回の更新となってしまいました。
本記事はKogakuin Univ Advent Calendar 2019 7日目です。
adventar.org

対象読者

メイン内容

一応目次を。
見たいところだけでも見てもらえたら嬉しいです。

去年の記事の話

去年書いた記事がこちらです。
まとまりがなく何いってんだこいつ感がやばい。
まぁ去年の記事は暇だったら読んでください。

上流SEの具体的な業務

現在僕がやっている業務はスマートフォンアプリ開発の上流工程です。
上流工程とざっくり書かれてもわからないかと思うので具体的にどんなことをしているかというと、、、

  • 要件定義(お客さまと)
  • 基本設計(お客さまと)
  • 協力会社との契約の事務作業
  • 協力会社から上がってくる課題の解決(この仕様はどうなんですか?とか、ここの実装方針これでいいですか?とかの確認)
  • 協力会社の設計書レビュー
  • 仕様調整(期限、お金的にできないものを取捨選択)★
  • 結合試験での協力会社対応
  • 総合試験設計・実施

ざっくりこんな感じですかね。
見てわかる通り、ソースコードを書いたりすることは一切ありません。
なんなら協力会社にこれやってってお願いするときに試しに書いたら20分くらいでできたのに
1.5人日程度かかりますとか言われる始末。

ソースコードを書きたい人には一切向かない業務内容となっております。

ウォーターフォール開発への不満

じゃあ何が不満なの?って思いますよね。
仕事ってそんなもんでしょ、みたいな。
仕様の調整がアホほど時間と金がかかって大変なんです。(上記★のとこ)

基本設計段階で曖昧だったものを具体化したとき、協力会社と認識があってなかった場合に発生します。
あとはシンプルに基本設計提示後にイケてないから直したいな、ってなったときとか。

ちなみにどんな話になるかというと、

A社「なんでこんな仕様になってるですか。」
B社「基本設計書に書いてなかったので。」
A社「不明点は確認して欲しい、勝手に進めたんだから直して欲しい。」

〜〜〜数日後〜〜〜

B社「では本仕様変更に対して〇〇〇〇万円かかります。」
A社「なんでこんなにかかるんだ。」
B社「〇〇対応に○人日、〇〇対応で○人日となります。」
A社「その対応は御社の責任だろう。」


アホか!!!
だったらささっと動いてささっと直してしまえばいいやん!!
この調整に何人日かけるんだ馬鹿野郎!!

みたいな感じなんです。
なんかアホくさくないですか?

超個人的解決策

※ここからは超個人的な意見が入ります。
やっぱり理想的な開発形態は全部自分のとこでやる、ってことなんですよ。
人に頼まないで全部自分でやる。これに尽きる。

人が足りないから協力会社に頼んでるんだろ!ってなるかもしれないけど、
だったら協力会社も仲間にしたらいいじゃん!って感じなわけです。
それには契約が〜手続きが〜・・・とかいってるから日本の開発は一生このままなんだ!!
海外はこんな馬鹿なことしてないんじゃ。

必要なシステムは全部自分のとこで作る、人が足りないなら雇う、いらなくなったらクビにする。
もうこれでええやん。日本の終身雇用のせいか知らんけどまじで意味わからん。

別にウォーターフォールを全否定しているわけじゃないんですよ。
でも他のとこに頼んで責任がどうだとかくだらないことしてるからアホなの。
大体ソースコード書けない人がなんでソースコード一生懸命書いてる人をもっとやれとか言えるんだよ。

開発で協力会社をまたぐごとにコントロールが効かなくなるのは当たり前。
現場がなんも見えないんだもん。

自分はどこいってもやってける!プログラミングでもマネジメントでもやってやる!
てくらいの人が集まれば金も期間も2/3くらいでできるんだろうけどな。

まぁ個人的な思いは置いておいて日本のウォーターフォール開発へ不満爆発記事でした。
ぜひSEの方の意見が聞きたい。拡散してください。

最後に

アドベントカレンダーを主催してくださった方、本当にありがとうございます。
ぜひ来年、再来年も続けていってください。

知らない言語でアジャイル開発のサイクルにかき混ぜられた

お久しぶりです。
よりです。

本記事は下記のアドベントカレンダーに記事になります。
それにしても4回目ですか。(記事書くのは3回目)
すごい。

adventar.org

ほぼ一年ぶりの更新となりますが、
今回はアジャイル開発についての記事を書きます。

ていうかアジャイル開発って何?
っていう人のために僕の認識でアジャイル開発をさらっと書いてから、
自分の話をして行きたいと思います。

アジャイル開発とは

大まかな説明

さぁ、知識がクソほどしかない僕の説明なので3行でいうと?
みたいな感じでいいっすかね?笑

アジャイル開発とは

  1. 迅速かつ適応的に
  2. ソフトウェア開発を行える
  3. 軽量的な開発手法

つまりは「早く柔軟に」ソフトウェアを作っちゃおう!
みたいな感じです。

ウォーターフォールアジャイル

IT系の人ならわかると思いますけど、
アジャイルってウォーターフォールと比較されがちですよね。
一応ウォーターフォールとの大きな違いについてざっくりと説明しておきます。

ウォーターフォールとは

ウォーターフォールの開発は以下の流れに沿って順番に開発のフェーズが進んで行きます。
要件定義 → 設計 → 実装 → テスト → リリース

このような流れにすることで、
最初に話し合って決めた要件通りにきっちりかっちりとシステムが作られて行くわけです。
もちろん要件定義・設計のフェーズで話し合った内容をドキュメントにまとめて、
その通りに実装が進められます。(ドキュメントが証拠見たいな感じになる)
そしてテストのフェーズでドキュメント通りの機能や画面ができているかを確認します。
この時ドキュメント通りでない場合は不具合として報告されるって感じですね。

僕が体験したアジャイル

アジャイル開発ってやり方が決まってるわけではないので僕が体験した
アジャイル開発についてここに記載したいと思います。

まず、要件定義や設計の段階でそこまで詳細にドキュメントを作成しませんでした。
もちろん必要なものは作りますが、最低限といった感じです。
クラスがどんなフィールドやメソッドを持っているかとか、細かくドキュメントには起こしません。
こんなクラスがある、そのクラスの責務は?くらいの粒度ですかね。

実装をして画面やら操作感を作って見てから一度ユーザーに見てもらいます。
触ってもらってユーザーと話し合いながらこうしようああしようと意見を出して
いいものは取り入れていくといった感じでした。

打ち合わせを1週間に1回程度することでユーザーと認識をすり合わせながらシステムが
作り上げられていきます。

ウォーターフォールアジャイルの違い

さっきから書いてますけど僕が最も違うと感じているのは柔軟性です。
一度決まったものを決まった通りに作るのではなく、
お客様の要望を汲み取りながら、開発を進めていく。

スクラム

スクラムってのは僕が体験したアジャイル開発の手法です。
どんなものかというと、

  1. 優先順位ごとに機能を作る
  2. 期間をスプリントという単位で区切り、スプリントごとに計画を立てる
  3. プロジェクト内では毎日ミーティングを行い、メンバー同士で状況を共有

スクラム手法はチームでのコミュニケーションを最重要とします。
毎日チームで課題確認しますし、近くに座って開発するのでわからないことはすぐに共有、解決することができます。

実際にやって思ったこと

javaで業務システムを開発しました。
次にRuby on Railsを使って業務システムを作りました。

業務システムしか作ってないじゃん!!



まぁそうなんですよねー笑
でもスクラム形式の開発は楽しかったです。
チームで円滑にコミュニケーション取れてれば、
開発者同士仲良くなりますし。
お客様と話しながら作るので、
できてから「こんなはずじゃない・・・」て思われることもないです。

こんな開発形態で今後もシステム作りたいですねー

最後めっちゃ雑になりましたが、
箱根旅行中なので許してください笑

最後に

最近お酒飲むの大好きなので飲みに誘ってね!!

社会人1年目でなんやかんや.

はじめに

こんにちは.よりです.
超久々の更新で感慨深いですね.

実はこのブログ,OpenCVの記事が意外とアクセス多くて1日に100アクセスとかあったりするんです.
嬉しいですね.

この記事はKogakuin Univ Advent Calendar 2017 7日目の記事です.
adventar.org

まぁめっちゃ自分語りになりそうなタイトルですよね.
本当はO/R マッパーについての記事とか書こうと思ったんですけど,
大学生にとっては社会人1年目の感想とかのが需要あるかなって.

それでは本題

この記事を読んでるのは大学生(工学院生)が多いんですかね?
そう思って書きます.
もし去年までの僕のことが気になったら過去の記事みてください.
恥ずかしいことたくさん書いてあるんで.

4月から6月

まず僕が入社したのはIT企業です.
でも文系の人もたくさんいました.

入社した会社は研修が手厚く,入社してすぐ3ヶ月間も研修がありました.
もうほぼ学校ですよ.高校生みたいに毎日学校行くみたいな.
まぁ周りのIT企業に入社した人に聞くと結構あるみたいなんですけど.

この期間でプログラミング初心者でも頑張ればプログラミングかなりかけるようになると思います.
僕はとても勉強になりました.

一応少しプログラミングしたことがあったので研修ですごく苦労することはなかったです(プログラミングでは)

あと3ヶ月も研修があるもんだから同期ととても仲良くなりましたね.
最近は同期と遊んでばっかで楽しくてしゃーないです.
入社したら会社はビジネスライクな付き合いで・・・とか思わないで,
同期や先輩とも仲良くやっていこう!っていう気持ちの方が楽しいと思います.

7月から現在

とにかく開発をしています.
でもプログラミングするの楽しいなって思ってるんで苦じゃないですね.
納期に追われて,スケジュールに追われてってなってる時期もありましたが,
当時辛くても今は良かったなーって思ったり.
何かが完成すしてくのって楽しいですやっぱり.

何か問題があっても自分で調べながら解決していくっていうのが楽しい.
まぁ投げ出したかったり放棄したくなったりもしますけど笑

それと自分が作ったものがこれから使われるのかなーって思うと結構テンション上がりますね.

これから就職する人へ

お前まだ1年目だろとか,お前に何がわかるんだとか思いますよね笑
でも知りません.
とりあえず言いたいこと言っておきます.

楽しいようにしましょう!
なんでも楽しいって思えば意外と笑えて楽しかったりするんじゃないですかね.
去年の研究はめっちゃ辛かったけど今思えば真剣にあんなにできて楽しかったなーって思います.

今の開発もめっちゃ期限が迫ってて辛い時もあるけど
なんだかんだできた時はめっちゃ嬉しいし楽しいし.
1人で立ってガッツポーズとかしたりして笑

終わりに

他の人が技術系で一生懸命記事書いてるのにこんな自分語りみたいな記事でごめんなさい笑
気が向いたら真剣にO/Rマッパーの記事に差し替えるかもしれないです.

ま,酒飲んで酔っ払いながら書いてるから許してね!笑

大学生活を経て思うこと

こんにちはよりです.

もう大学生活もあとちょっとで終わるので(当時),
僕の大学生活で良かった点,悪かった点をまとめます.



僕が本当に良かったと思っていることは最後の1年間に集約されています.

普通,大学生って1年でいっぱい出会いがあると思うんですけど,
僕はなぜか大学4年になって突然色々な出会いがありました.

そこで,大学ってこんなに色々な人がいて,色々なことができて,
色々なことを学べる場所なんだって思いました.

自分よりはるかに頭がいい人達と話すことは刺激になったし,
やる気を駆り立ててくれました.

情報系は自分の専門分野なはずなのに,
いかに何もできないで何も知らないで4年になってしまったのかを痛感しました.

研究面では今までで一番プログラミングをしました.

(当時の僕には)無理難題だと思われる技術の勉強をしなきゃいけなくて,
ぶっちゃけ,
「こんなアルゴリズムを実装することなんて素人にできるのかよ」
とか思ってました(笑)
本当に何もしてなかったので…

きっと強い人たちは
「論文に乗ってるアルゴリズム動かさなきゃ始まらんだろ」
とか思ってると思います.
それができない僕はかなり辛かったです.

そんな時のモチベーションは
研究室の仲間だったり
周りのレベルの高い人達だったり
教授への恐怖心だったりしましたが笑

とにかく人との繋がりの大切さを痛感した1年でした.
もっと色々な人と話して色々なことに興味を持っていたかった.


もし大学生活,最初からやり直せるなら,
最初からそんな人たちに出会っていて,
僕も勉強頑張ってればなぁとか思います.

更新日現在社会人になってしまってますが,
最後の一年で成長できたことが今に活かせていると感じています.

これから大学生の人たちは,
何事にも関心をもって,積極的に勉強して欲しいです.

OpenCV(Python)で画像をトリミング

抄録が終わったので,一回更新しときます.
なんだかんだアクセスあると嬉しいですね.
なんだかんだ無料で使えるOpenCVはよい.

なんども言いますが,メモ代わりです.

早速コードを.

#OpenCVをインポート
import cv2

if __name__ == '__main__':

  #画像入力
    im = cv2.imread('Lena.bmp',0)
    
    #新しい配列に入力画像の一部を代入
    dst = im[200:400,70:270]
    
    #書き出し
    cv2.imwrite('cut.bmp',dst)


f:id:yori1029:20170115012702j:plain
入力画像


f:id:yori1029:20170115012723j:plain
出力画像



いや,めっちゃ簡単ですよね笑
pythonだとすごい簡単に書ける気がするんですけど.

こんどから簡単な処理はpythonで書くって誓いました.

OpenCV(C++)で自作二次元フィルタと正規化(0~255)

今回は教授から突然2次元フィルタかけてって言われたのでかけましたってだけの話です笑
メモ程度です.

OpenCVってfilter2Dって関数があるからそこにぶっこんでおけば
ガウシアンフィルターとかメディアンフィルターとか簡単にかけれちゃいますよね.
でも自分で作ったフィルターかけるにはどうすればいいの?
って時のためのメモです.

ていうか今回はあえてfilter2Dを使わないでやったんですけど,
本当はfilter2Dを使った方が早いです.
下記のサイトを参考にしてください.
画像フィルタリング — opencv v2.1 documentation

おそらくfilter2Dだとフーリエ変換して周波数空間でフィルターかけてるんだと思います.
よくわからないですけど笑

とにかく今回は画像に直接フィルターをかけます.

早速ソースコードから.

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <math.h>
#include <fstream>
#include <string>
#include <sstream>

using namespace cv;
using namespace std;

//0~255に正規化
Mat normalize(Mat in) {

    //最大と最小の初期値を設定(minが適当なのはやばそう)
    double max = 0;
    double min = 9999;

    //めんどくさいから入力画像をclone
    Mat out = in.clone();

    //最大と最小を取得
    for(int j = 0; j < in.rows; j++){
        for(int i = 0; i < in.cols; i++){
            if(max < in.at<double>(j,i)){
                max = in.at<double>(j,i);
            }
            if(min > in.at<double>(j,i)){
                min = in.at<double>(j,i);
            }
        }
    }
    
    //取得した最大値と最小値で正規化
    for(int j = 0; j < in.rows; j++){
        for(int i = 0; i < in.cols; i++){
            out.at<double>(j,i) = in.at<double>(j,i) * (max - min)/ 255;
        }
    }
  //0~255になったMatを返す
  return in;
}

int main(int argc, char *argv[]){

    //画像入力
    Mat inputimg = imread("01_Lena_syukukaku.bmp_img_6.bmp",0);
    
    //入力画像のコピー
    Mat img = inputimg.clone();
    
    //Matの型をdouble型に変換
    img.convertTo(img,CV_64F);

    //出力用のMat配列を用意
    Mat out = Mat::zeros(inputimg.rows, inputimg.cols, CV_64F);

    //自作二次元フィルター1
    Mat filter1 = (Mat_<double>(3,3) << -0.0625, 0.125, -0.0625,
                                        0.125, 0.75, 0.125,
                                        -0.0625, 0.125, -0.0625);

    //自作二次元フィルター2
    Mat filter2 = (Mat_<double>(3,3) << 0, 0.125, 0,
                                        0.125, 0.5, 0.125,
                                        0, 0.125, 0);

    //画像サイズ分のforループ
    for(int j = 0; j < inputimg.rows; j++){
        for(int i = 0; i < inputimg.cols; i++){
            if(j == 0 || i == 0 || j == inputimg.rows-1 || i == inputimg.cols-1){
                out.at<double>(j,i) = img.at<double>(j,i);
                continue;
                }
            //フィルターサイズ文のforループ
            for(int l = 0; l < filter1.rows; l++){
                for(int k = 0; k < filter1.cols; k++){
                    out.at<double>(j,i) += img.at<double>(j+l-1,i+k-1) * filter2.at<double>(l,k);
                }
            }
        }
    }


    //出力用Mat
    Mat outputimg;
    
    //正規化(上記参照)
    outputimg = normalize(out);
    
    //Matの型変換
    outputimg.convertTo(outputimg,CV_8U);

    //出力
    imwrite("01_Lena_filt2.bmp",outputimg);
    
    //表示
    imshow("out",outputimg);
    //waitKey(0);

    return 0;
}

ポイントは1画素ずつアクセスするところ.
.atを使ってます.
OpenCVは画素単位のアクセスが非常にめんどくさい.
頑張って書きましょう笑

あとはMatの型に注意しなきゃいけないってことくらいですかね.

以上です.