Purpose_and_Content

こんにちはEveryDaySoft代表の永田です。
本日は2021年1月3日です。世の中はコロナ禍で混沌とする情勢の中で、何をどのように生きていくか皆が模索しているように受け取れます。
どうしたら良いのか?
生活出来ているのであれば、生活の出来事に一生懸命なほど健全に近づけると思います。僕はプログラミングを仕事にしているので、生きていくためにプログラミング技術を高める毎日に幸せを感じています。
で、題名のPurpose_and_Contentは何かというと、毎日に幸せを高めるという目的から内容を記載していきます。

プログラムの効果は、要件と仕様とそのスケジューリングのFlowに大きく左右されます。

要件をA、仕様をB、プログラムをCに例えます。

いろんな業態があると思いますが、複数の案件で仕事が回ってたり、とても大きな案件1本ドーンとあったり、テスト案件だったり、新規開発、運用、環境、人員の熟練度など様々です。

僕のここ数年多いパターンは前人未到系が多かったです。誰も作った事ない系ですね。
仕様や技術的に可能か、継続的に可能な技術内容かなど様々でした。
でどうすれば? 大きく2パターンあります。
1. AB確立型
AとB、スケジューリング、マネージメント、パターンが確立している場合ウォータフォールよりですね。Cの内容に力を注ぎ、A,B は受身要素が多いと思います。
2. AB構築型
AとB、スケジューリング、マネージメント、アジャイル、スクラムがよりチームで構築していく場合、立場で何かしらの貢献活動が必要になってきます。
今回は2の型について、少し詳細を記載させていただきます。 

正社員の方はよりミーティングに出席する回数が多く、エンジニアとしての意見を求められる機会が多くなると思います。その際に経験則で通じる場合もあれば、発言に責任を追わなければならない場合、さーと意見が受け流される場合など様々だと思います。

業務委託や派遣の方は上記の内容の濃さが少し薄くなると思います。
でどうすれば? 
テンプレートやマニュアルをなるべく最新バージョンにアップデートされた物を沢山作成し、常に用意するのが一番効果的だったと経験上ではありました。テンプレートをその時の仕様に合わせアップデートを繰り返す作業は洗練されていきますし、1〜10で取り組む場合はいきなり3から入れたりします。その繰り返しは必ず成功確率が上がると思います。

このタイミングという時にさらっと提出できる作り込まれた資料があったりすると効果的だと思っています。僕の場合はプログラミングのメソッド単位とか、パーツ単位とか、より細かく用意していたり、一つの機能で動くアプリケーションなどで用意している場合、git commandなどはテキスト化している場合もあります。
でその後どうすれば? 
そのような資料用意、活用の繰り返しをする目的は何なのか考えています。より品質の確認時間を設けるため、非機能要件について共通認識をすり合わせるためなどあり、複雑な要件、仕様の場合に機能仕様書を作ったり、非機能仕様書をプログラムと合わせて作ることもあります。テストの前に単体テストとして、何をどの様にテストをしたかというテスト仕様書等も作成したりします。これはその現場の状況によると思いますが、要求度合いで臨機応変に動くと良いと思います。
何で資料用意をして、品質を上げようとするのか?
会社から評価されたい、出世したい、承認欲求を高めたい、賃金を上げたい、欲しいものを好きなだけ買いたい、貯蓄したい、会社を成長させたい、世の中をよくしたいなど色んな願望があると思います。もしくは願望がないという場合もあるかもしれませんが、、素直にその願望を満たすために正直に向き合い、考えると、何をしたら良いのかという答えを見つけやすくなると考えています。
答えを見つけたら、ひたすら実施すると心は穏やかになり、充実する毎日に近づいていくと思います。僕はこの冬休みの間にモバイルアプリで起動した回数を計測するアプリケーションを作成してみました。HtmlとJavaScriptとPhpとPythonとSwiftUI、AwsのLambda 、DyanomoDb、APIGateWayで作成しました。
アプリ側の要件と機能
uuidをXcode内にあるuuid.plistに記載する。
Xcodeを起動し、アプリケーションを立ち上げる。
アプリはアンインストールしてもデータは消えない。
アプリは世界標準基準で時間設定してある。
アプリは1日1回、日本では朝9時に日付が変わる。

Web側の要件と機能
uuidの検索欄に記入。submitBtを押下。
intervalの検索欄に記入。submitBtを押下。
uuidの検索欄に記入。
calendarの検索欄に2021-01-01表記方式で記入。submitBtを押下。
該当データがある場合グラフが表示される。

AWS側の要件と機能
アプリを起動毎にuuidと時間と起動回数を保存する。
アプリを起動毎の時間とuuidと起動回数を保存する。
該当する日付以降のデータを検索しデータを取得、表示する。
該当するuuidのデータを検索しデータを取得、表示する。
朝9時になると回数がリセットされuuidと時間と起動回数を保存する。
グラフjsライブラリーのサイト(日本語版)
https://www.fusioncharts.com/dev/chart-guide/chart-configurations/chart-paddings-and-margins
PythonはAwsを使用しました。
DynamoDBでデータの検索を複数設定するのに参考したサイトhttps://t.co/p9mGMDjVRB?amp=1
実装したソースはTableは3つを使用し、APIとして実装しました。そのうちの上記のサイトを参考した箇所gte。これは which is equivalent to >= - (“Greater Than or Equal To”)を表す部分です。2021-01-03とcalendar部分で設定すると指定日付以降のデータがあれば表示するというコードです。また挙動も載せさせていただきます。
import json
import datetime
import boto3
from boto3.dynamodb.conditions import Attr, Key

def lambda_handler(event, context):
    
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('pointID3')

    option = {
        'FilterExpression': Attr('uuid').eq(event["uuid"]) & Key('time').gte(event["time"])
    }

    res = table.scan(**option)
    return {
        'response': res["Items"]
    }
https://twitter.com/i/status/1345369154748993537
iOSのサンプルソース
https://github.com/daisukenagata/SwiftUI_DebugBuild
今回の実装は、リモートでの整合性を可視化するという目的がありました。これはIT業界はリモートでも作業が可能なので、リモートで状況を確認でき、評価できるという環境をプログラムで作ってみたかったのです。評価できる環境ではより快適な環境を構築できると思いましたし、ユーザーにとってもモバイルを持つことで便利になる状況を作りやすくなると考えています。

なので、次のプロセスはデータに対しての評価という項目を考えていきたいと思います。
まとめると目的を明確にする。
内容を明確にする。
(上記のプログラム内容は珍しい項目を抜粋して上げさせていただきました)

目的と内容を明確にして取り組むと出来ることも明確になり、充実し穏やかな心になり、毎日が満たされる。

今年も皆様の良い一年を心より願っております。
以上、貴重なお時間お読み下さいまして、誠にありがとうございます。