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

続きを読む

【Laravel】with関数で処理高速化

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

決済認証システム開発事業部の山﨑と申します。 今年の4月に新卒で入社いたしました。 未経験で入社し、研修と開発で9か月エンジニアリングに関わってきましたが、まだまだできないことばかりで周りの方々にサポートしていただきながらなんとか作業を進めています。

業務に携わるようになってからは約3か月が経ちました。 現在はPHP(Laravel)でAPI開発、AWSの各種サービスを使い医療系コミュニケーションサービスを作っています。 今回はその中で学んだことについて1つまとめたいと思います。

続きを読む

「amplify init」を使わず必要最低限構成でCognitoを用いたAmplifyを使ってみる

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

こんにちは、証券フロンティア事業部の西永です。
今回も趣味の中で見つけた、AWS amplify(以下 amplify)のライブラリを使うのにamplifyを使わない構成を紹介します。

そもそもamplifyとは

AWS Amplify は、それぞれを連携させたり個別で使用したりできる、ツールとサービスのセットです。これらの機能により、フロントエンドウェブおよびモバイルのデベロッパーが、AWS によるスケーラブルなフルスタックアプリケーションをビルドできるようにします。Amplify を使用するお客様は、数分の内にバックエンドを構成しアプリケーションと接続でき、また、静的なウェブアプリケーションのデプロイは数クリックだけで実行できます。さらに、AWS コンソールの外部でも、簡単にアプリケーションコンテンツの管理が行えます。 aws.amazon.com

色々書いてありますが、これを使うことでフロントエンジニアの知識だけでも良い感じにバックエンドの方まで構築できるといった代物です。
なのですが……これには一つ重大な懸念点があります。

続きを読む