Briswell Tech Blog

ブリスウェルのテックブログです

座標変換

物事の考え方や捉え方を変えてみると、新しい発想や解決法が得られることがあります。

  • 別の立場の人の視点に立って物事を考えてみる。
  • 他の人のいつもと違う考えや価値観に触れて、別の視点に気付く。

等、ビジネスを取り巻く環境が大きく変化する今日この頃、多様な視点を持つことはとても大事ですね。

さて、今回を視点を変えるということで...
画像の座標変換という手法を試してみます。

世界地図と地球儀で、大陸や島の大きさがそれぞれで違うと感じたことはないでしょうか?
メルカトル図法の地図は、楕円体である地球を円筒で表現している(緯線はすべて赤道と同じ長さになる)ので、北極や南極に近づくほど実際の面積よりも大きく表示されてしまいます。

matplotlibとMayaviでNASAの画像を『地球儀』にしてみた。 - プログラム日記φ(..)

こちらの記事でご紹介されているように

 x = r \sinθ \cosφ
 y = r \sinθ \sinφ
 z = r \cosθ

球面座標 (動径r, 緯度θ, 経度φ)

直交直線座標 (x, y, z)
へ変換することで、地図の各緯度経度の値を球面にマッピングし、地球儀を作成することができます。

ついでに
mplot3d API — Matplotlib 2.0.2 documentation

view_init(elev=None, azim=None)
# elev: z軸方向から見た仰角
# azim: x, y軸方向の方位角

この関数を使用し、azimの値を0〜360の間で変化させて、地球儀を回転させてみます。 f:id:KenjiU:20220130235421g:plain 地図ではなく、写真を球面にマッピングすると以下のようになります。 f:id:KenjiU:20220130235447g:plain 目が回りそうです。
座標変換ですが、AIで画像解析する際の前処理の一つとして使うこともあります。また別の機会にご紹介しますね。

簿記3級必勝法

こんにちは、ブリスウェル新入社員の辻本です。

財務諸表を読み解いて企業分析ができるようになりたい。

会計周りのシステム構築業務にも活かせる。

...ということもあり、簿記3級を受験しました。

独学の場合、取得するには100時間かかると言われていますが、
この度、50時間ほどで取得できたので、勉強方法を共有させていただきます。


1. Youtubeで全体像把握

【簿記系YouTuber?】ふくしままさゆき

【ゼロから簿記3級(全24回)】基礎18回+じっくり復習6回(テキスト不要!)

まずこの方の再生リストを2周視聴しました。

勘定科目、資産・負債・資本・費用・収益などの用語の理解、
簿記3級試験が3つの大問で分かれていること等、全体像の把握ができました。

このYoutube動画は基礎から噛み砕いて丁寧に説明してくれるので、お勧めです。


2. 模試をひたすら行う

全体像の把握ができたら模試をひたすら行いました。

教育機関において、日商簿記検定試験の予想問題が公開されているので、
参考にしてください。

より多くの問題(丁寧な解説付き)を解いて、ネット試験に挑みたい方にはこの本をお勧めします。

私はブリスウェルの上司(Tさん)に借りたのですが、
問題が本試験にかなり近く、模試数もかなりあるのでお勧めです。

この本の模試で90点以上を安定して取れるようになれば試験に望んでも問題ないかと思います。


3. 簿記3級試験 体験談・注意点

実は私、簿記3級試験に2度落ちています。

<1度目の挑戦>

得点:55点(不合格)
敗因:
・大問③(決算書類作成問題)の書き方があまり分かっていなかった。
・模試で大問②(補助簿・勘定・決算仕訳・会計用語)について満点が取れたことがなかった。

リカバリー内容>

・大問③(決算書類作成問題)の書き方をほぼマスター。
・大問②は、T字勘定以外は解けるようにした。
・模試の点数は80点を安定して取れるようにした。

<2度目の挑戦>

得点:63点(不合格)
敗因:
・大問②でT字勘定が出てきた。
・大問③(決算書類作成問題)で模試には出なかった決算仕訳が出てきた。

リカバリー内容>

・本に載っている模試を全て2周行い、YoutubeでT字勘定、決算仕訳に関する動画をひたすら見ました。
・模試の点数は90点を安定して取れるようになり、100点も取れるようになった。

<3度目の挑戦>

得点:79点(合格)

このように模試のレベルと本試験のレベルは明確に違うので、
必ず90点以上を安定して取れるようになってから試験に臨みましょう。


まとめ

簿記3級を取得したことにより、会計業務を簿記の視点から見ることができるようになりました。次の目標は簿記2級の取得です。
工業簿記も対象になり、難易度は3級と比較し格段に高くなります。
お客様に対してより深いコンサルティングができるようにするため、頑張って勉強します。
弊社には私以外にも簿記に精通している方がいるので、
会計周りのシステムの構築であれば弊社にお任せください。

公転軌道アニメーション

2021年も大詰めとなりました。一息ついて良いお年をお迎えください。

冬の星空はとても綺麗ですね。子供のころ、寒いベランダでずっとオリオン座を眺めてました。星の方からも誰かが同じように地球を眺めているのではないかとわくわくしていた記憶があります。

今回は、Pythonのグラフ描画ライブラリ「matplotlib」のアニメーションを使用して、地球の公転運動を表示してみます。

Pythonアニメーションによるケプラー運動(楕円軌道)の表示 | 地学教材 | 高津科学

こちらのサイトを参考にさせていただきました。ケプラー方程式の実装と、アニメーション方法について大変勉強になりました。ありがとうございました。

その時代の常識を疑い、観察と推測によりケプラーの法則を導き出したケプラーさんには、ただただ敬服するばかりです。江戸時代の日本の天文学者麻田剛立」もケプラーの第3法則を独自に発見したと言われています。

  • 道長半径(周回する天体がとる楕円軌道の長半径): 1(天文単位
  • 離心率(二次曲線の特徴を示す数値で1より小さければ楕円): 0.0167

として、地球の公転運動をアニメーションしてみましょう。

f:id:KenjiU:20211231214442g:plain

1年間があっという間ですね。

子供のように「ときめき」と「わくわく」が溢れていると、時間の感覚が長く感じるようです。「楽しんで◯◯をする事」を大切にして、前へ踏み出していきましょう。

では、来年もどうぞよろしくお願いいたします。

Exif情報を知る

久しぶりの投稿になります
新入社員も入ってきて駆け出し社員ではなくなりつつある中堅社員(?)kobaです。
今年も残り少しですね。。。年々早く時間が過ぎていくような気がしています。

ある案件で写真をアップロード時、Exif情報を画面上に出してほしいとの要望がありました。

エグジフ?イグジフ?Exif情報って??

Exif情報ってなんだろうと思い調べてみると
カメラの機種や撮影時の条件情報を画像に埋め込んでいる情報のことを指しており
デジタル機器のカメラで撮影した写真には
ほとんどExif情報が自動付与されているみたいです

Exif情報の例としては

撮影日時、位置情報、撮影機器名、画像の解像度、フラッシュ使用の有無

などがあります。
フラッシュの有無までわかるとはすごいですね(実用性あるかはわかりませんが笑)

iPhoneで撮影した写真をアップロードしてもExif情報読み取ってくれない?

今回はアップロードした写真を表示する他に
アップロードした写真のExif情報(撮影日時、位置情報)を読み取って
Exif情報あれば撮影日時、位置情報のテキストリンクを表示する要件でした。

f:id:briswellyuki:20211202180813p:plain
Androidでアップロード時の状態

ただiPhoneで撮影した写真をアップロードすると
何故かExif情報読み取ってくれません。
AndroidだとExif情報表示されるのに....

f:id:briswellyuki:20211203111545p:plain
iPhoneでアップロード時の状態

iPhoneの写真がExif情報読み取ってくれない原因?

調べてみるとiPhoneから
SNSへのアップロード時やメッセージへの添付の際に
Exif情報が削除される仕様になっている旨の記載がありました。
上記の仕様で読み取ってくれないのだろうかと考えました。
参照Wiki

解決法

いくつか解決法が記載してあるサイトあったので試してみました。
参照サイト

①メールの添付画像をアップロード
1.該当画像をメールで自分に送信

2.メール添付画像を保存

3.保存した画像をアップロード

上記の方法を試しましたところ、表示されました!
f:id:briswellyuki:20211203122731p:plain

iPhoneカメラ設定変更
1.iPhoneの設定で[カメラ]選択
f:id:briswellyuki:20211203122328p:plain

2.[フォーマット]選択
f:id:briswellyuki:20211203122400p:plain

3.[互換性優先]選択
f:id:briswellyuki:20211203122414p:plain

上記の方法で撮影した写真をアップロードしたところ
表示されました!
上記3の写真でわかりますが、
iPhoneはデフォルトでフォーマットの設定が[高効率]になっています。
[高効率]では画像形式がHEIFで保存されてしまうので
Exifの対応画像形式ではなかったことによることが
Exif情報読み取れない原因だったようです

まとめ

Exif情報は個人情報が特定できる恐れがあるので
気軽にSNSにアップロードできてしまうスマホから
アップロードするときには注意が必要です。
iPhoneSNSへのアップロード時やメッセージへの添付の際に
Exif情報が削除される仕様はある意味優しいかもしれませんね
(今回のような要望がある場合には少し手間がかかりますが....)



「業務のアイカタであり続けたい」
中小企業様向けERPソリューション
ai-cata.com

AKAZEによる文字検出

毎月のブログ更新の期限が近づいてきました!
今年トップレベルの低気圧で頭がクラクラしております。

画像処理技術を一つご紹介いたします。

OpenCVのAKAZE(Accelerated-KAZE)という特徴量検出の手法を試してみました。KAZEは「風」から命名されています。この手法を用いることで「2つの画像に同じものがあるか」の判別ができるようになります。

tech.briswell.com

  1. 前回の記事のWord Cloud画像
  2. 簿記の文字画像

を使用して、それぞれの特徴量をAKAZEにより計算し、その計算した特徴量をマッチングさせてみます。

f:id:KenjiU:20211130211922j:plain

「簿記」取得できました!

実際はまだ3級合格できておりません。次回は4度目のチャレンジです。

AWS Network Firewall の初期設定

こんにちは、としです。
最近はプライベートでウイスキーの勉強を始めました。
元々焼酎ばかり呑んでいたので、新鮮でとても楽しく、美味しいウイスキーにいっぱい出会えて幸せな気分です。

本日は [AWS Network Firewall の初期設定] について書いてみようと思います。

0.初めに

セキュリティ要件で今後必要になってきそうだな、と感じたので、AWS Network Firewall を触ってみました。
AWS Network Firewall とは、などは色々な記事で書かれているので、割愛します。
まだまだルール設定やALBとの同居など、自分の中で問題はありますが、下記構成での導入はできたので、備忘録含め、記載していこうと思います。
※時々、Firewallを間違えてFilewallと記載している部分があります。間違えました🥺

f:id:Toshi_bw:20211109131055p:plain

1.VPCの作成

VPCを新しく作成します。

f:id:Toshi_bw:20211109131114p:plain

作成後です。
f:id:Toshi_bw:20211109134030p:plain

2.サブネットの作成

作成したVPCに対して、サブネットを作成します。
f:id:Toshi_bw:20211109134116p:plain f:id:Toshi_bw:20211109131414p:plain
作成後です。
f:id:Toshi_bw:20211109134200p:plain

3.インターネットゲートウェイの作成

インターネットゲートウェイを作成します。
f:id:Toshi_bw:20211109131504p:plain


作成したVPCにアタッチします。

4.ルートテーブルの編集

作成したサブネットのルートテーブルに対して、作成したインターネットゲートウェイをアタッチします。
f:id:Toshi_bw:20211109131648p:plain

5.EC2インスタンスの作成

適当なEC2インスタンスを作成し、Apacheをインストールし、http通信を可能とし、アクセスができることを確認します。
※EC2の作成方法などは割愛します。

6.Firewall サブネットの作成

先ほど作成したVPCに対して、Firewallサブネットを作成します。
f:id:Toshi_bw:20211109134245p:plain f:id:Toshi_bw:20211109131912p:plain


7.Firewall の作成

VPC画面のLeft menuの下の方にファイアウォールがあるので、そこから新規作成を行います。 
※少し待ち時間があります。
f:id:Toshi_bw:20211109132002p:plainf:id:Toshi_bw:20211109132009p:plainf:id:Toshi_bw:20211109132017p:plain


8.ステートレスルールグループの設定

お試しなので、とりあえず80ポートのみを許可設定しています。
f:id:Toshi_bw:20211109132441p:plainf:id:Toshi_bw:20211109132449p:plainf:id:Toshi_bw:20211109132456p:plainf:id:Toshi_bw:20211109132504p:plain
送信先、カスタムIPはEC2の [プライベート IPv4 アドレス] を入力してください。

f:id:Toshi_bw:20211109134359p:plain

9.ステートレスデフォルトアクション

上記指定ルール以外を拒否します。
f:id:Toshi_bw:20211109132607p:plain

10.ルートテーブルの設定

ルートテーブルは全部で3つ存在します。
※個人的にここが1番躓きました。

Firewall Internet Gataway(新規作成)
f:id:Toshi_bw:20211109132726p:plainf:id:Toshi_bw:20211109132733p:plain


Firewall Public
※EC2で使用しているサブネットのルートテーブル
f:id:Toshi_bw:20211109132744p:plain

Firewall Table
Firewallで使用しているサブネットのルートテーブル
f:id:Toshi_bw:20211109132800p:plain

11.最後に

ここまでの作業で一旦構成図の導入は完了となります。
作成したEC2インスタンスに80ポートでのアクセスは可能で、SSHの接続は拒否されることが確認できると思います。


様々なルールが設定可能なので、ここをいじくり回して今後のシステム開発に役立てていこうと思います。
f:id:Toshi_bw:20211109132917p:plain


最後まで読んでいただき、ありがとうございます。
これからも色々なサービスが出てくる、進化していくので、いっぱい触っていこうと思います。

Word Cloud で記事を可視化

最近のブログ記事の内容を可視化すべく

WordCloud for Python documentation — wordcloud 1.8.1 documentation

こちらの「Word Cloud」ライブラリを利用してみます。その名の通り、頻繁に出てくる「単語(Word)」を、その出現頻度に比例する大きさで「雲(Cloud)」のように並べて表示してくれます。以下のようなパラメータ設定が可能です。

wordcloud = WordCloud(
    font_path = "/System/Library/Fonts/ヒラギノ角ゴシック W6.ttc", #フォントのパス
    width = 900, height = 600, #キャンバスのサイズ
    background_color = "white",   #背景色
    stopwords = ['さん','くん'], #除外する単語
    max_words = 500,   #単語数の上限
    min_font_size = 4,   #最小のフォントサイズ
    collocations = False   #複合語のオプション
    ).generate(words_blog)

Welcome to janome's documentation! (Japanese) — Janome v0.4 documentation (ja)

また、こちらの「Janome」ライブラリを使用して、単語を名詞のみに絞ります。ただし、代名詞(例:そこ)、非自立(例:もの)、数(例:1)は除外します。

word_list=[]
for token in tokens:
    word = token.surface
    part_1 = token.part_of_speech.split(',')[0]
    part_2 = token.part_of_speech.split(',')[1]
     
    if part_1 == "名詞":
        if (part_2 != "代名詞") and (part_2 != "非自立") and (part_2 != "数"):
            word_list.append(word)

では、確認してみましょう。

f:id:KenjiU:20211031224401p:plain

古き良きものを今の時代にも、伝えていきたい所存でございます。

暑さ寒さも彼岸まで

朝晩ヒンヤリとして過ごしやすくなってきましたね。秋到来ですが、弊社には、7月と9月に新しい社員が入社し、春のようなフレッシュさをもたらしています。みんなでガンガン挑戦していきましょう!

という出だしでしたが...
今回は少しネタが切れてしまいまして

最初は人として検出されてしまったが、途中自転車やバイクになりすまそうとし、最終的に気配を消す、お侍くんをご紹介いたします。(少し演出を施しております。お含みおきください。)

f:id:KenjiU:20210926193347g:plain
お侍くん検出

江戸商売と簿記

最近、社内で簿記検定が流行っています。僕は未だに簿記3級の合格ができず、もがいております...

簿記の勉強を始めて感じたのは、ITエンジニアとして会計まわりのシステムの構築に役立つだけでなく、色々な取引や決算手続きを学べるので、経営の流れ・仕組みの理解も深まり、とても面白いです。

ただ、夜な夜な参考書や問題集ばかりを見ていると眠くなってくるので、Pythonと絡めて簿記の勉強が出来ないかと思っていたところ、

Pythonで学ぶ簿記 ~簿記一巡の流れ編~ - Qiita

こちらの記事にて、簿記一巡の流れをPythonで実装されておりました。とても分かりやすいですね。

参考にさせていただき、江戸の呉服商の取引の仕訳を作成していきたいと思います。ちなみに江戸時代の帳簿は、現在の「複式簿記」ではなく「単式簿記」(家計簿のように現金の出入りを記録)の形で作成されていたようです。

1. 呉服屋を設立

明和八年(1771年)の元日に、現金100両を資本金として、呉服屋を設立します。

f:id:KenjiU:20210829225225p:plain

現金(資産)の増加 → 借方
資本金(純資産)の増加 → 貸方

最近、明和八年の江戸地図を購入したので、ずっと眺めています。翌年の明和九年(迷惑年とも言われた)には、江戸三大火の一つの明和の大火が発生しました。

2. 反物を仕入

商品80両分を仕入れ、代金は掛け払いとします。

f:id:KenjiU:20210829225236p:plain

商品(資産)の増加 → 借方
買掛金(負債)の増加 → 貸方

江戸時代は、反物のまま売買するのがルールで、着物への仕立ては自分の家でやるか別途仕立屋にお願いしていました。

3. 反物を販売

仕入れた商品を50両で販売し(原価は40両)、代金は掛け売りとします。

f:id:KenjiU:20210829225306p:plain

売掛金(資産)の増加 → 借方
売上(収益)の増加 → 貸方

f:id:KenjiU:20210829225322p:plain

売上原価(費用)の増加 → 借方
商品(資産)の減少 → 貸方

江戸時代の掛け売りの集金は、お盆・大晦日の年2回が一般的でした。

4. 仕入代金を支払

仕入代金80両のうち60両を支払います。

f:id:KenjiU:20210829225427p:plain

買掛金(負債)の減少 → 借方
現金(資産)の減少 → 貸方

5. 販売代金を集金

販売代金50両のうち40両を集金します。

f:id:KenjiU:20210829225437p:plain

現金(資産)の増加 → 借方
売掛金(資産)の減少 → 貸方

6. 損益振替と資本振替

売上(50両) - 売上原価(40両) = 当期利益(10両)

f:id:KenjiU:20210829225505p:plain

7. 貸借対照表の作成

f:id:KenjiU:20210829234338p:plain

f:id:KenjiU:20210829231841p:plain

8. 損益計算書の作成

f:id:KenjiU:20210829225532p:plain

f:id:KenjiU:20210829231306p:plain

簿記の流れがつかめそうです!かたじけない。

武士の移動経路検索

幕末の万延元年(1860)に紀州和歌山藩の武士である酒井伴四郎は江戸に単身赴任しました。

その時の日々の生活を綴った日記が東京都江戸東京博物館に保管されており、江戸の生活、文化を知る重要な文献となっています。まさか自分の日記が、後の世の人の目に触れて研究対象にもなるとは、想像すらしなかったでしょう。

伴四郎さんは、赤坂の紀州藩江戸屋敷の長屋に住んでいました。休日を利用して、江戸市中を散策していたようで、東京湾や市中を見渡せる観光スポット「愛宕山」にも行っていたようです。

江戸時代の移動手段は、自分の足(または駕籠や馬)です。赤坂から愛宕山(港区愛宕1丁目)までどのような経路でどのくらいの時間で移動していたのでしょうか?

現代の地図になってしまいますが、Googleマップで経路検索してみます。単にGoogleマップで検索するのでは粋じゃないので、Google Maps Platformの「Directions API」をPythonから呼び出してみます。

【Python】「Google Map API」を利用して2点間のルート情報をJson形式で取得する方法。

こちらのサイトを参考にさせていただきました。

赤坂の紀州藩江戸屋敷近くの「紀伊国坂」から「愛宕」までの「徒歩」での移動経路について、以下のように、「Directions API」のパラメーターを指定をすることで検索することができます。

import urllib.request, json
import urllib.parse
import datetime

#Directions API endpoint
endpoint = 'https://maps.googleapis.com/maps/api/directions/json?'
#Directions API Key
api_key = '[Google Maps PlatformのAPIキー]'

#出発地
origin = '紀伊国坂'
#目的地
destination = '愛宕'
#移動手段
mode = "walking"

#リクエストパラメータをセット
request = 'language=ja&origin={}&destination={}&mode={}&key={}'.format(origin,destination,mode,api_key)
#URLエンコード(safeには変換させない文字を指定)
request = urllib.parse.quote_plus(request, safe='=&')
#リクエストURLを生成
request = endpoint + request

#Directions APIを実行
response = urllib.request.urlopen(request).read()
#実行結果を取得
directions = json.loads(response)

for key in directions['routes']:
    for key2 in key['legs']:
        print('距離:' + key2['distance']['text'])
        print('所要時間:' + key2['duration']['text'])

実行結果は

距離:2.9 km
所要時間:37分

となり、直接Googleマップで経路検索した結果と同様でした。

落ち着いたら、実際に歩いてみようと思います。