GASで定期実行しているスクリプトのエラー通知をLINEに飛ばすようにしてみた

本投稿は TECOTEC Advent Calendar 2021 の21日目の記事です。

こんにちは。次世代デジタル基盤開発事業部の近藤です。

Google Apps Script(以下GAS)で毎日定期実行しているスクリプト(某暗号資産取引所のAPIを呼んでいる)があるのですが、極稀にエラーが発生してしまいます。

エラー発生時は元々GASからメール通知が来るようになってはいるのですが、即座に気がつくことが難しいです。

そこで、LINEに通知を飛ばしたいと思いました。実際やってみると予想以上に簡単だったので、やり方を紹介したいと思います。

続きを読む

【Laravel】APIを使って天気予報を取得してみた

本投稿は TECOTEC Advent Calendar 2021 の20日目の記事です。

はじめに

こんにちは。決済認証システム開発事業部の阿部です。
2021年4月に新卒で入社し、サーバーサイドエンジニアをしています。

業務の中でAPIを触ることが多いため、今回はOpenWeatherAPI(天気予報)を例にとってAPIの使い方を紹介しようと思います。

準備

アカウント登録

まずは、こちらからアカウント登録を行います。
アカウント登録後、API Keyが発行されます。ページ上部の[My API Keys]をクリックします。
f:id:teco_abe:20211216111827p:plain

発行されたAPI Keyを一覧できるページが開きます。このページの中のKey欄にある文字列をテキストファイルなどに保存しておきます。 f:id:teco_abe:20211216113142p:plain

APIの使い方の確認

プログラムを書く前にAPIの使い方の確認をします。

続きを読む

OAuth、OpenID Connectについて改めて調べてみた

本投稿は TECOTEC Advent Calendar 2021 の19日目の記事です。

はじめに

2021年9月に入社した決済認証システム事業部の田中です。
これまでバックエンドの開発・設計などを担当してきて、今はある案件のPMをやっています。

ふとAPIの認可/認証周りについてなんとなくの理解になっているなと思い、アドベンドカレンダーの記事執筆を機に改めて調べてみました。
すごく簡単ではありますが、OAuthとOpenID Connectについて触れていきます。

続きを読む

AWS Workshopsで学ぼう

本投稿は TECOTEC Advent Calendar 2021 の18日目の記事です。

はじめに

こんにちは、証券フロンティア事業部の内田と申します。
AWSでは様々なサービスが用意されています。
が、触ってみたいと思ってドキュメントを開いてもいまいちわからなかったり、料金が気になって諦めてしまうこともあると思います。
そこで、今回はAWS Workshopsについて紹介させていただこうと思います。

目次

  • はじめに
  • 目次
  • AWS Workshopsとは
  • やってみた
  • 感想

AWS Workshopsとは

様々なAWSサービスの使い方を学ぶことができるワークショップです。
AWSが公式で用意してくれているのは素晴らしいですね。

workshops.aws

続きを読む

dockerはufwに穴を空ける。

本投稿は TECOTEC Advent Calendar 2021 の17日目の記事です。

決済認証システム事業部の下江です。 今年の夏ごろ、ふとサービスを作りたいなと思い、仮想レース配当サービスを個人で作っていた時に起きたDB情報を全部抜かれた話をしていこうと思います。

<2021.12.17 追記>
※本記事はあくまで個人開発上で起きた問題であり、弊社開発ではセキュリティ専門の部隊がこの要な事態が発生しないよう対応しています。

構成

OS: Ubuntu 20.04.2 LTS
フレームワーク:Laravel
フロント : blade
デザイン : TailwindCSS

DB情報が抜かれるまでの流れ

サーバの初期設定を行い、動作確認のためBasic認証を掛けて知り合い内共有して、 いくつか細かい問題の修正を行いとりあえず動作するところまで終わらせた後就寝しました。

翌日、知り合いから「500出てるよ」と連絡があり調査を行ったところ、サーバのエラーログにUnknow Database の文字列がずらり。
dbを確認しに行くと、メインのデータベースが消されており正体不明のReadmeデータベースが作成されていました。 中身には要約すると、データ取ったから返して欲しかったらここに振り込んでねと書いてありました。
f:id:teco_shimoe:20211215132952p:plain
ひえ…

続きを読む

Swiftで文字を圧縮表示したい!

本投稿は TECOTEC Advent Calendar 2021 の16日目の記事です。

みなさま、おはこんばんちは。
証券フロンティア事業部でiOSエンジニアをやっております赤池です。


皆さん、AttibutedTextの機能は使っていますか?
UILabel等のプロパティのひとつで、文字に下線を引いたり途中でフォントサイズを変えたりす等々、文字に装飾を施すときに使うアレです。
色々と文字に装飾ができて便利なのですが、開発を進めていくと、時には機能にないことを求められたりもします。

今回はそんなAttributedTextの機能にない、文字の圧縮(正しい言い方かどうかは解りませんが)を実装していくお話です。


何をしたいか

そもそも文字の圧縮とはなんぞや?
ということですが、この表現があっているか解らないので実際に画像を例に説明すると、

f:id:tecotec_akaike:20211215120702p:plain
↑これを
f:id:tecotec_akaike:20211215120730p:plain
↑こうしたい
ということです。


少し調べてみましたが、AttributedTextの中には該当の機能がなさそう(もしもあったら教えて下さい!)だったので、どうにかして実装してみたいと思います。

実装

では具体的にどうやって実装しようかと考えたところ、
UILabelを画像化して横方向に縮めてしまえばよいのでは?
という考えに至りました。

今のところ他に思いつかなかったのですが、他になにか良さげな方法があれば教えていただければと。


1. Storyboard

ということでまずはおなじみ、Storyboardの設定から。

今回は75%と50%の2種類を表示させようと思うので、
大本の文字列表示用のLabelと加工をした後の文字列を表示するためのUIImageViewをふたつ用意します。

配置に関してはそこまで厳密に設定しなくても大丈夫だと思いますが、念の為、widthだけはすべて同じにしたほうが良いかなともいます。

一応Storyboardの見た目だけ

f:id:tecotec_akaike:20211215120744p:plain
Storyboard

(さり気なく、圧縮率表示のUILabelにAttributedTextを適用して、そっちもちゃんと使ってますアピール)


2. コーディング

ではお待ちかねのコードを書いていきましょう。

IBOutletで大本の文字列Labelと2つのUIImageViewをViewControllerに紐づけていきます。

名前はそれぞれ、以下の通りとしました。

/// 大本の文字列表示Label
@IBOutlet var originalLabel: UILabel!
/// 75%圧縮の文字列を表示するImageView
@IBOutlet var threeQuarterImageView: UIImageView!
/// 50%圧縮の文字列を表示するImageView
@IBOutlet var halfImageView: UIImageView!

続いてUILabel(UIView)のスクリーンショットを取得するロジックを作成します。

他でも流用できるようにUIViewの拡張として作成しました。

extension UIView {
    /// UIViewのスクリーンショットを取得し、画像化する
    func createImageFromView() -> UIImage?{
        let image: UIImage?
UIGraphicsBeginImageContextWithOptions(frame.size, false, 0) layer.render(in: UIGraphicsGetCurrentContext()!) image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext()
return image } }

更に今度は、UIImageのサイズを調整するロジックを作成します。

こちらも同様にUIImageの拡張として作成しています。

extension UIImage {
    /// 画像の縦横のサイズを、指定された割合に縮める
    func resize(widthScale: CGFloat = 1.0, heightScale: CGFloat = 1.0) -> UIImage? {
        let resizedSize = CGSize(width: size.width  widthScale, height: size.height  heightScale)
UIGraphicsBeginImageContextWithOptions(resizedSize, false, 0.0) draw(in: CGRect(origin: .zero, size: resizedSize)) let resizedImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext()
return resizedImage } }

ここまでできればもう少し。

あとは実際に圧縮して画面に表示させるだけです。

今回は動的に文字列を変えたりはしないため、viewDidAppear内で表示させれば大丈夫でしょう。

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        createArchivedText()
    }
/// 圧縮した文字列を表示する func createArchivedText() { guard let textImage = originalLabel.createImageFromView() else { return } threeQuarterImageView.image = textImage.resize(widthScale: 0.75) halfImageView.image = textImage.resize(widthScale: 0.5) }

これでコードの実装は終わりです。

意外と簡単に実装できたんじゃないかなと思います

実行結果

それでは、実行結果を見てみましょう。こんな感じで表示されたら大成功です。

f:id:tecotec_akaike:20211215120659p:plain
実行結果

まとめ

やる前は何じゃそりゃ? でしたが、終わってみればいい感じで圧縮表示されて満足いく結果になりました

今回はやっていませんが、heightScaleを変えれば縦方向の圧縮もできます。

なかなか使う機会は少ないかもしれませんが、
AttributedTextでは設定できない項目でもやり方を変えれば表示できるかも?
というお話でした。

tecotec.co.jp

数学的に最適な寄せ鍋を考えてみた

本投稿は TECOTEC Advent Calendar 2021 の15日目の記事です。

はじめに

はじめまして。こんにちは。次世代デジタル基盤開発事業部の安彦と申します。
2021年4月に新卒で入社し、フロントエンドエンジニアをしています。

気が付けば12月も中旬、寄せ鍋が食べたい季節です。
寄せ鍋の具材は様々考えられますが、どんな具材の組合せにしたらおいしい鍋になるのでしょうか?
ということで、数学プログラミング最適な寄せ鍋の具材を考えてみたいと思います!

続きを読む