Spaghetti Code Monster

きれいなコードを読み書きしたい.

上田市のAED設置場所を表示するマップ(非公式)を作った

ある程度の形になり、オープンにしてもよいかなーと思ったので記事として残します。

作ったきっかけ

応急救護の講習会などで、周りの人に119番の通報やAEDを届けるように助けを求めるような手順があります。1
私も過去に講習会を受けたときに、こんなことを思いました。 「救護の現場がAEDのある施設内だったらすぐに持ってこれるけど、現場にAEDのない施設や路上だったら、どこから借りればいいんだろう」

調べたところ、市のサイトで設置場所を公開していただいているのですが、それぞれの住所をクリックしないとマップが表示されず、少々不便に感じていました。
そこで、マップ上にまとめて表示するWebアプリにして、せっかくだし公開しちゃえ!というノリで作りました。 Vue3、TypeScript、Leafletを使って開発しました。
ueda-aed-map.vercel.app

リポジトリGithubで公開しています。
github.com

使ったデータ

市が公開しているオープンデータを使用しています。
www.city.ueda.nagano.jp

オープンデータはCSV形式となっています。これをアプリケーションとして扱いやすくするために、JSONにざっくり変換するスクリプトも併せて書きました。
こちらもマップ同様にGithubリポジトリを公開しています。 github.com

ヘッダー行に改行文字を含んだテキストが含まれていたり、ヘッダーの改行文字を消すと同じタイトルが複数入っているなど改善してほしいと感じる部分が少しありました。 しかし、その部分を除けばプログラム上で扱いやすい形式のオープンデータになっていました。中の人にとても感謝しています。

この後にやりたいこと

次は任意のタイミングで現在地を取得して、現在地をマップの中心地点とするようにしたいなと思っています。
現在地から一番近い設置場所がどこか教えてくれる機能とかできたらもっと嬉しいかも。


  1. 「あなたは119番に通報してください」「あなたはAEDを持ってきてください」てきなやつ

~2022、2023~

ブログの存在を久しぶりに思い出したので、なにか記事を起こしたくなりました。
今更かもしれませんが、2022年の振り返りと2023年にどうしたいかを書きなぐります。整理しようとしましたが、うまくいきませんでした。

2022年の振り返り

やっていたプロジェクトが佳境に入った

2021年末から2022年始にかけてプロジェクトが佳境に入りました。進捗が悪かったことが原因です。自業自得。
(2021年10月くらいから忙しくなり始めていた気もしますが、詳しく覚えていません… *1 )
年末年始の休みも削り、日付が変わるまで残業する日もあり、ツラめな状態だったのですがなんとかして一段落つけてやるという気持ちでいっぱいでした。
プロジェクトが一段落したあと、仕事に打ち込むモチベーションが一気に消え去ってしまいました。 戦う顔をしていない状態です。
誰かに相談すればよかったじゃんと思われるかもしれませんが、いろいろな理由でそういう気分になれませんでした。

会社を辞めた

2022年9月末で所属していた会社を退職しました。新卒で入社してから9年半お世話になりました。
今後のキャリアを考えた結果、ほかの会社で頑張ってみようと思ったことが理由です。*2
1か月ほどゆっくり休んでから新しい仕事を探そうとしていましたが、気づいたら年を越していました。
先述したモチベーションの回復に時間がかかってしまったと情けない言い訳をしておきます。

2023年にどういうことがしたいか

次の仕事を見つけたい(最優先)

転職サイトにもう一度登録して、次の仕事先を探し始めました。
こんな感じのところで働けたらいいな、という願望と理由を列挙してみます。全部叶うかどうかはさておき。

  • 3人以上のチームで仕事をしたいです。退職までの3年ほど1人チームで作業をしていました。
    そろそろチームでわいわい言いながら開発したいんです。三人寄れば文殊の知恵という言葉もありますし、1人より複数人のほうがいいです。
  • 自社開発を経験したいです。 前職がSESな会社だったこともあり、強い憧れを持っています。
    それに加え、開発したシステムを使っていただける人がより身近に感じることができるのかな、と思っています。
  • Web系の仕事に興味があり、一部でもよいので関わってみたいです。 だいぶ前の話になってしまうのですが、仕事で1年ほどダッシュボードをWebアプリで作成していました。その時にVue.jsに触れ、つらいことも少々ありましたがWeb周りの楽しさを知ることができました。
    その時からバージョンも大きく変わっているので、1から学びなおしたほうがよさそうだなと思っています。*3

発信していく力を身に着けたい

Twitterが少し怪しい雰囲気になってきたので、それとは別で発信できるすべを持っておきたいと思うようになりました。
技術的なことはQiitaとかZennを、それ以外の読書感想文とか今回みたいなポエムはここに残せばいいかなと思っています。 Twitterが急にサービスを終了することはないとは思っているので、Twitterの移行先は気が向いたら探します。

*1:転職サイトに登録して活動しはじめたけど、それどころではなくなってしまった記憶はあります…

*2:にゃーん

*3:やれ

管理職について思うこと

このエントリは、次の記事に勝手に便乗しています

自分の管理職歴

ありません。ぺーぺーです。

なので、下っ端から見た管理職の姿について書いていきます。そのため、内容は薄っぺらいと思います。
また、あくまで私個人の主観の話であり、"一般的な考え"とは異なると思っていますし、一部感情的なものも含んでいます。

やりやすいなーって感じた管理職

情報を公開してくれる

  • こんなこと必要なのかなって思うことも展開もらえます*1

様子を聞きに来てくれる

  • 報連相が大事なのはわかります
  • ただし、それは元々上司を戒めるための言葉ですし、様子を聞きに来てくれることで状況を伝えやすいです。*2

程よく方向性を与えてくれる

  • ゴールを示してくれつつ、ある程度の自由を与えてくれていたので、成果を出すために動きやすいと感じました

やりにくいなーって感じた管理職

忙しいアピールが甚だしい

  • 管理職なのに、自分の仕事が管理できていないのではないですか?

  • こんな人に生産性について云々言われる筋合いはありません

  • 今まで忙しいけど頑張ってますアピールをすることで周りからの承認欲求を満たしていたんでしょうか?

    • いつまでそれに縋っているのは醜すぎますね

人の好き嫌いが激しい

  • お気に入りの人にはとことん甘い反面、気に入らない人間への態度が明らかに違う こんな人が部下の評価を正しく人の評価ができているとは思えません。
  • お気に入りの人にベッタリしている様子は傍から見ていてとても気持ち悪いです

言動が一致していない

  • そもそもそんな人を信用することはできません

報連相をやたら要求してくる

  • 報連相は管理してる雰囲気を作るためのものではありません
  • なぜ報連相をされなかったのかを考えていただきたいです

おわりに

正直、後者で上げた人は管理職としての能力がないと思ってます。
気に入った人間だけ囲って、お山の大将でいたらいいんじゃないでしょうか。

*1:上司から積極的に情報を公開していると思っていただければと思います

*2:それが当たり前だと思っている環境が羨ましい限り

SORACOM UG 信州 x JAWS-UG Nagano x TwilioJP-UG 共催ハンズオン 参加レポート

3月30日に開催された、SORACOM UG 信州 x JAWS-UG Nagano x TwilioJP-UG 共催ハンズオンに参加しました。 その時の参加レポート的なものです。

今回のイベント、興味があったまま手を出せずにいた3つのサービスが共催だったこともあり、とても楽しみにしていました。

イベントの概要、イベントで使われた資料については、
https://soracomug-tokyo.connpass.com/event/118913/

イベント中の様子については、
https://togetter.com/li/1333132

を見たら手っ取り早く雰囲気を掴めるかと思います。

ここでは、個人的にためになったことをまとめていきます。(というか、当日のメモをほぼ貼り付けただけです…)

SORACOMの紹介とブログのススメ

IoTとは?

  • デジタル化を実現する手段
    「見えていなかったものをみえる」ようにして,「視えたものを集めて生かす」
    この両者をつなぐのはネットワークで、どこでも使えるネットワークの一つがSORACOM
  • SORACOMはIoT向けの通信を提供している。 3GやLTEを使っているので、セキュリティとかクラウド連携もクリアしてくれる。

IoT開発のフェーズごとにおける課題とPlatform

バイスからのデータを簡単に可視化 → harvest
検証するために素早く使える仕組み → Lagoon
AI/ビッグデータとかを使った高度なソリューションを活用 → BEAM

SORACOM Air

IoT向けのデータ通信基盤(2G/3G/LTE、Sigfox/LoRaWAN)
日本向けのSIMだけでなく、海外向けのSIMもある。

7月2日に開催されるSORACOM Discovery 2019(https://www.discovery2019.soracom.jp)の紹介もありました。行ってみたい。

素早く検証するにはどうするか?

  • 何も作らない.あるものを利用する
  • 自前主義からの脱却

様々なデバイスでIoT化をサポート

  • USB型通信アダプタ
  • LTE-Mボタン
  • 基板ベース(wio-LTEとか)

Amazon Dashボタンが販売終了

  • これから必要なのは「モノづくりではなく,コトづくり」

工場での導入事例 - WiFi ベースだと、他の設備が必要(ルータとか) → LTE-M buttonだと,他の設備が不要

ブログ書こう!

  • 誰のため? → 未来の自分のため
  • ブログは「未来の自分へのドキュメント」 忘れる能力→救い
    とはいえ,できるようになったことを忘れるのは忍びない → そこでブログ!

ブログの種類には、次の種類がある
- トライ系 目的と達成できた/できなかったことを載せる
- 紹介系 これでできることや始め方
- レポート系 このエントリ

機密情報が洩れるじゃん?

  • 何が機密なのか、わかってない人の常套句
  • ブログに書けること、書けないことが分かっている人は 技術だけじゃなくビジネスの本質に対する理解度が高い人材

AWSの紹介

もともとAmazonのインフラノウハウをサービス化して提供したもの
サービス数は165(らしい)
今回は、ハンズオンで使うAWS LambdaとAWS IoT、IoT 1Clickについて

AWS Lambda

  • サーバレスコンピューティング
  • まずはサーバレス→ ダメならサーバ立てるって潮流ができている
  • 管理不要
  • 状況に応じて自動で拡張
  • 使ってないリソースについては支払い扶養
  • 可用性,耐障害性 は実装済み 99%のシステムは,サーバレスにリプレースすると安くなる → 時間当たりの時間はEC2,ECSのほうが安い
    常時リソースを確保して,動作し続けるものはEC2のほうが安い
    冗長構成の実装も必要ない

イベントドリブン

  • 完全にステートレスで動作する必要ある
  • 常に外部のDBにアクセスする必要あり 外部DBはDynamoDB(NoSQL)がおすすめ
  • 一時的なデータはRedisとか
  • 関数単位のロギング 慣れるまで大変っぽい

実行時間

最大900秒

関数単位で,権限制御ができる

うまく制御すればかなりセキュアにできるが,それには慣れが必要

AWS Identity and Access Management

通称IAM
- IAMユーザ - IAMロール - IAMポリシー - IAMはリソースに対して付与するもの

ソースコードに権限を埋めないコーディングをする

Lambdaの言語使い分け

AWS IoT + IoT 1Click

AWS IoT Core

Greengrass

  • edgeデバイス向け 国内から東京リージョンにアクセスした場合でも、50msのレイテンシが発生する
  • AWSの機能をローカルでもできるようにしたもの
  • 最新の動きをEdgeに適用して,クラウドで集中管理

Greengrass ML inference

  • 推論環境をデバイスに組み込める
  • FPGAとかでも利用できるらしい

バイスクラウドの関係

IoT駆使したデバイスを作る場合,なにを考える必要があるか? Digitalization=ソフトウェアによる価値最大化 = 物理的な制限からの解放

Twilioの紹介

  • Twilioは通話,SMSだけじゃない
  • コミュニケーションをAPIで管理しよう
  • プログラムで電話をかけようとかできるようになる
  • 今までになかったコミュニケーションを実現 -【導入事例】電話活用したスマートロックキー

Channels

  • ここからいろんなサービスに通知を投げたりできる
  • サービスごとに対応するコードを書く手間を減らせる

決済

  • PCI Compliantに準拠しているので,電話で決済できる

    Programmable Video

  • videoの中に含まれている付加価値を提供できる

Programmable Wireless

Programmable FAX

  • もともとはエイプリルフールのネタだったが、意外と使われているらしい

Mail

  • SendGrid買収した

Functions

  • Lambdaてきな
  • Node.jsのみサポート

    Assets

  • S3てきな
  • APIを使ったアップロードはできない

    Sync

    WebSocket的な

Authy

  • 2要素認証

Proxy

  • お互いの番号を知らせずにコミュニケーションできる仕組み

Twilioを使った架電

  • REST
  • Flows.Executions

ハンズオン

次のことをやりました。 - LTE-Mボタンが押されたらメールを送信する - LTE-Mボタンが押されたらTwilioのAPIで電話をかける - LTE-Mボタンが押されたらデバイスの状態を更新する この日使ったデバイスは扇風機

感想

Parsonを使って,JSONのデータをCの構造体に変換する

はじめに

モダンな言語(Goとか,Python)には,JSONをパースしてくれる便利なライブラリが標準で利用できるようになっています.
しかし,C言語にはそのような素晴らしいものは標準ライブラリにはありません.

そこで,C言語JSONをパースしたいときに,どういう方法があるか調べました.

続きを読む

Python Boot Camp in 長野に参加した

2017/6/10(土)にGEEKLAB.NAGANOさんで開催された,Python Boot Camp in 長野に参加しました.

pyconjp.connpass.com

少し日が開いてしまって,記憶があやふやですが,参加した記録を残します.

参加した目的

  • 最近ブームになっているPythonの理解を深めたかった
  • 会社の有志が集まって,Pythonを勉強しているWGがあり,そこに情報展開をしたかった

実際にやったこと

Python Boot Camp Text — Python Boot Camp Text 2016.04.28 ドキュメントを中心に講義形式で行われました.
Python初心者向けに作成されており,とても分かりやすい内容でした.

小学生並みの感想

テキスト以外にも,Pythonの少し深い話も聞けたのはとても興味深かったです.

  • floatのround関数は,偶数丸めになっている.正確な数値を得たい場合はDecimalを使用する
  • Dictはデータの順序を保証していないが,3.6では実装上順序がある状態になっている
    (他バージョンとの互換が怖いかもと思いました)
  • Dictのキーはイミュータブルなデータしか受け付けない.
  • データの集合をDictのキーにしたい場合,ListではなくTupleを使用する

講義の終わりのほう触れた,Pythonの仮想環境(venv)もとても便利な機能だと感じました.
いろいろなPythonのバージョンや,必要のないライブラリの切り分けが簡単にできるのは,Pythonの開発をするときにとても重宝しそうな印象を受けました.
(実際にvenvが活用できないと円滑に開発ができないかも?)

また,PythonC#って似てるところがあるよなーと思いました.

  • PythonのwithはC#のusingみたいな使い方ができる
  • async,await
    (Pythonは3.5から追加されたらしいです.講義には出ませんでしたが…)

この次にやりたいこと

仕事のサポートツールをPythonで作ったり,競技プログラミングとかの問題をPythonで解くとかして,Pythonをとりあえず書く習慣をつけていきたいと思います.

いずれは,PyConにも参加したいですね:-)