タグ

ブックマーク / zenn.dev (429)

  • 建築設計会社に一人情シスとしてSaaSを導入した話

    概要 普段はソフトウェアエンジニアとして活動していますが、訳あってITとは全く関係ない建設業界の社内システムを作った時の話をします。古い体質と言われる建設業界ですが、高齢化により若者が定着しない、IT化の遅れから労働生産性が悪いといった問題が、そのまま「人手不足」「3Kイメージ」に繋がっています。 記事では、全くシステム導入が進んでいないとある建築設計会社の情報システムを担当し、どんなSaaSを組み合わせて社内システムを構築したかを紹介します。紹介するSaaSは一例であり、全ての会社に当てはまるわけではないので、あくまで参考としていただきたいです。 導入したSaaS Microsoft 365 コアとなるグループウェアとしては、Microsoft 365を使用しています。通常のIT・ソフトウェア業界ではGoogleのグループウェアが多いですが、建築の会社では以下の理由でMicrosoft

    建築設計会社に一人情シスとしてSaaSを導入した話
  • メモ: 『Linuxで動かしながら学ぶTCP/IPネットワーク入門』

    3章 Network Namespace - 1 helloworld ip netns コマンドでNetworkNamespaceの作成や操作が可能になる 作成したNetworkNamespace内で独自のネットワークを構築できる $ ip netns add helloworld $ ip netns list helloworld $ ip netns exec helloworld ip addr show 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 $ ip netns delete helloworld # NSを作成 $ ip netns add ns1 $ ip n

    メモ: 『Linuxで動かしながら学ぶTCP/IPネットワーク入門』
    bongkura
    bongkura 2022/07/14
  • OAuthの言葉周りを整理する

    OAuthの仕組みとToken認証周りの言葉はいつまで経ってもはっきり理解できないものの一つでした。 しかし最近ようやく理解できるようになってきたのでとりあえずそれぞれの言葉の指すものや定義をここで整理してみようと思います。 リフレッシュトークン リフレッシュトークンとは アクセストークンの有効期限が切れたときに、認可サーバーにアクセストークンの更新リクエスト認証をするためのトークン。 OAuth自体はリフレッシュトークンがなくとも実装できるが、リフレッシュトークンはOAuthをより便利にするためのもの。 一般的に有効期限は長い。 ないとどうなるのか アクセストークンの期限が切れたらその度にSNS認証のあのログイン画面に飛ばされてメアドとパスワードの入力が必要になる。 セキュリティに関すること 有効期限が長くても安全性に問題がないと考えられる理由としては、アクセストークンの期限切れ時にしか

    OAuthの言葉周りを整理する
    bongkura
    bongkura 2022/07/12
  • PlayStationエミュレータ作りに取り組んだ

    最近暇だったのでPlayStationのエミュレータ作りに取り組みました。そのまとめをしたいと思います。 PlayStationエミュレータ作りと聞くと難しそうに聞こえますが、実はかなり分かりやすいガイドブックが存在し、これに従うことであまり詰まることなく実装できました。 結果として5日ほどで、懐かしいオレンジのロゴが見れる程度の必要最低限の実装が行えたので、紹介したいと思います。 ※テクスチャは未実装なのでロゴが赤い四角になってる The ガイドブック 以下のPDFは、CPUの仕組みの簡単な説明から入り、0からBIOSのオレンジのロゴが表示できることろまで網羅した神ガイドブックです。言語は英語Rustです。 https://svkt.org/~simias/guide.pdf 普段のエミュレータ作りで時間のかかる作業は: 地獄のデバッグ PCのタイミング調整(パイプラインがある場合)

    PlayStationエミュレータ作りに取り組んだ
    bongkura
    bongkura 2022/07/11
  • 排他制御のためだけに Redis 渋々使ってませんか?データベース単独でアドバイザリーロックできるよ!

    トランザクション分離レベルについての教養があったほうがこの記事の内容を理解しやすいため,必要に応じてまず以下を参照されたい。 背景 以前, Qiita で以下の記事を投稿した。今回の議題に直接的な関係はないが,関連している部分があるため引用する。 MySQL/Postgres とも, MVCC アーキテクチャの恩恵で, SELECT と UPDATE は基的には競合しない。 単一レコードのシンプルな UPDATE でも排他ロックされ,排他ロック中のレコードへの UPDATE での変更操作は トランザクション分離レベルによらず ブロックされる。UPDATE 文に含まれる WHERE 句での検索もブロックされ,これはブロックされない SELECT による検索とは別扱いになる。 但し UPDATE 文の WHERE 句上で,更新対象をサブクエリの SELECT から自己参照している場合は例外。

    排他制御のためだけに Redis 渋々使ってませんか?データベース単独でアドバイザリーロックできるよ!
  • MySQLで発生し得る思わぬデッドロックと対応方法

    はじめに この記事は実際の業務で発生した MySQL のデッドロックとそのいくつかの回避方法や対応方法を(テーマは変えて)手元で実行できるコードを用いて解説する記事です。具体的には「トランザクション張っておけば大丈夫」と思ってませんか? バグの温床になる、よくある実装パターンの記事で紹介されている「1on1 チャットサービス」で紹介されているデッドロックとデータベースレイヤでは同じ状況だったのですが、記事で紹介されている方法とは別の方法でデッドロックを回避する必要があったため、同じ状況に遭遇した人の助けになればという思いで記事を書きました。また、こちらの記事が無ければ私自身も現象を理解するのにもっと苦労したと思うので、この場を借りてお礼申し上げます! 出金サービス履歴登録サービスを例に考える コードと説明が https://github.com/shuntagami/withdrawal_

    MySQLで発生し得る思わぬデッドロックと対応方法
    bongkura
    bongkura 2022/07/05
  • Webブラウザのレンダリングの仕組みを理解する

    どうもフロントエンドエンジニアのoreoです。 今回はWebブラウザのレンダリングの仕組みについてまとめたいと思います。あまり意識していなくても開発はできますが、知っていればパフォーマンスの改善やAccessibilityの向上に役立ちそうですね。 1 レンダリングとは? 普段私たちは、WebブラウザにURLを指定することで、そのリソースをブラウザ画面に表示できます。この時の 「指定したリソースをブラウザ画面に表示すること」を「レンダリング」と言います。 Webブラウザは、下記のように多くの機能を搭載していますが、この中でRendering engineが、レンダリングを実行します。 参考:https://web.dev/howbrowserswork/ ちなみに、ブラウザごとのRendering engineは下記になります。 Rendering engine Browser 参考:ht

    Webブラウザのレンダリングの仕組みを理解する
  • 現代は開発抽象化レイヤーが重層化している、あるいは何を見ても開発抽象化レイヤーに見える

    「開発抽象化レイヤー」とは 「開発抽象化レイヤー」(Development Abstraction Layer)はご存知でしょうか。 これはJoel Spolskyが言い出した言葉で、彼の2006年のエッセイのタイトルにもなっています。このエッセイは大変おもしろいので必読です。ご存じなかった方はいますぐ読むことをおすすめします。 日語訳もInternet Archiveから読めます。 ちなみに組込み方面では「HAL」という用語があります。これは「Hardware Abstraction Layer」の略です。HALはハードウェアの違いを吸収することで、プログラマにはハードウェアを意識させないよう「抽象化」するためのものです(が、実際には「抽象化の漏れ」が生じやすくて微妙な話が展開されるようなのですが、それはまた別の話になります)。 この「開発抽象化レイヤー」も、実際にはプログラマーが活動

    現代は開発抽象化レイヤーが重層化している、あるいは何を見ても開発抽象化レイヤーに見える
  • 社内で実施している「10分勉強会」のご紹介

    マナリンクCTOの名人です。 2022年3月頃から社内で実施している「10分勉強会」という取り組みと、実際の内容についてざっくり紹介していきます。 10分勉強会の目的 10分勉強会の目的は以下のとおりです。 すぐに実務で使えるかは分からないけど、知っておいて損はないことを先に学ぶ機会を作る 実務にて学んだことで、他のメンバーにも知ってほしいと思ったことを共有する機会を作る 前者については、たとえば「新しいバージョンのPHPについて調べてみた」といった、すぐには役立たないがいずれ使うであろう知識が挙げられます。後者については、たとえば「ある施策の実装をきっかけにCSSの◯◯プロパティについて学びなおした」といった例が挙げられます。 (ちょっとあまり上手な図解ではない気がしますが)学習機会の必要性について図解してみました。 エンジニアがある施策Aを実装するには、最低限これさえ分かっていたら実装

    社内で実施している「10分勉強会」のご紹介
  • Postgres と MySQL における id, created_at, updated_at に関するベストプラクティス

    読者対象 ある程度データベースに関する知識を持っている,経験年数 1 年以上のバックエンドエンジニア 特定のプログラミング言語に依存する部分は含めないため,すべての SQL 使用者を対象とする また,ゼロからの丁寧な説明というよりは,リファレンス感覚で使える記事という形にまとめる。 RDBMS の対象バージョン PostgreSQL: 9.4 以降 MySQL: 8.0.28 以降 id (データ型と INSERT 時のデフォルト埋め) 導入 一般的に採用されやすいプライマリキー用の値として,以下を考える。 連番整数 MySQL では AUTO_INCREMENT, Postgres では IDENTITY や SERIAL と呼ばれるもの UUID v1: ハードウェアごとにユニークな単調増加値 UUID v4: ランダム値 UUID v7(ドラフト): 単調増加であるタイムスタンプとラ

    Postgres と MySQL における id, created_at, updated_at に関するベストプラクティス
  • Web 技術解体新書「第二章 Cache 解体新書」リリース

    Web 技術解体新書「第二章 Cache 解体新書」リリース Intro 「Web 技術解体新書(Web Anatomia)」の第二章として「Cache 解体新書(Cache Anatomia)」をリリースしました。 これで予定している八章のうち二章が終わりました。 第一章: Origin 解体新書 第二章: Cache 解体新書 Cache 解体新書 以下の Response Header Field がどういう意味を持つか正確に説明できますか? おそらく多くの Web 開発者が一度は見たことがあり、これを「1 時間キャッシュする」という意味で指定している人もおおいでしょう。 では、どこから 1 時間で、 1 時間経ったらなにが起こるのか、これが Response でなく Request に付与されたらどう変わるのか、きちんと把握できていますか? そもそも、一般的にキャッシュ機構における

    Web 技術解体新書「第二章 Cache 解体新書」リリース
  • Redisの25倍のスループットDragonflyを試してみる

    インメモリデータストアを現代風に再実装したら? 高速なデータアクセスのためのインメモリデータストアとしては、RedisやMemcachedが有名です。ただし、これらは10年以上前に設計されており、Memcachedに至っては、2003年と約20年前です。 長い年月を経て、機能追加や最適化が進む一方で、どうしても設計の古さも目立ってきます。 その課題を解決すべく開発されたのがDragonfly です。 全ての操作がアトミック 高スループットでもミリ秒未満のスループット を目指し、Redis/Memcached互換なAPIを提供します。 Redisの25倍のスループットを誇り、1インスタンスで百万オーダーのQPSをさばけます。 開発者が実施したAWS EC2上のベンチマークによると、Dragonflyは家RedisやRedisのマルチスレッドforkであるKeyDBよりも圧倒的なスループット

    Redisの25倍のスループットDragonflyを試してみる
  • WSL2で開発中のWebアプリを同じLANのスマホで動作確認する方法

    WSL2で開発中のWebアプリをスマホで即座に動作確認したい スマホとPCが同一のWifiに接続している状態でスマホのブラウザから http://<PCIPアドレス>:<Webアプリのポート> にアクセスして動作確認出来ることがよく知られています。 私は普段PC向けの業務システムやライブラリを作っているのでこの方法を使う機会がほとんどないのですが、久しぶりにスマホでの確認が必要になりました。 開発環境がWSL2の場合に固有処理が必要だったのでメモ代わりに公開しておきます。 WSL2固有処理だけ知りたい人のための結論 PowerShellを管理者権限で開いてください。 以下を1行ずつ入力してもいいし、ps1ファイルに書いて実行でもいいはずです。 私はPowerShellに慣れてないので1行ずつ打ち込んでます。 開始 $ports = @(3000, 8000) # Webアプリで使うポート

    WSL2で開発中のWebアプリを同じLANのスマホで動作確認する方法
  • VSCode のリモートコンテナ機能を用いて、あるリポジトリ専用の環境を開発者間で統一する

    概要 VSCode のリモートコンテナ機能を用いると、開発環境を dockerfile の形でコード管理することができます。これにより、開発者が開発に用いる環境をリポジトリごとに統一できます。 VSCodeのリモートコンテナ機能とは コンテナの中に開発環境を押し込んで、その中にディレクトリをマウントして開発するVSCodeの機能です。 リモートコンテナ機能を用いて開発するメリット リモートコンテナ機能を用いて開発することには以下のようなメリットがあります。 local環境を汚さない 複数のプロジェクトで開発するにつれて、local マシンにはそのための様々なアプリ・設定が導入されていきます。この状態には以下のような欠点があります。 導入されたアプリや設定が膨大になって管理しきれなくなり、何のために導入されたか、変更してよい設定なのかが分からなくなる 異なるプロジェクトで必要な設定・アプリ同

    VSCode のリモートコンテナ機能を用いて、あるリポジトリ専用の環境を開発者間で統一する
  • Kubernetesをだいたい理解するまで

    インフラ初心者がいきなり実務でKubernetesを使うことになったので、その学習記録✎ 流れとしては、 概念的なところを抑える 実際に手元で動かしてみる です! また、すでにKubernetesについて書かれたわかりやすい記事がたくさんあるので、記事はそれらをもとに自分の理解をまとめたものになります。 概念的なこと まずはこれで概要把握 まずは👇を読もう。(ありがたやありがたや...) 僕らは何故Kubernetesを使うのか Kubernetesというものが出てきた背景を、オンプレの時代からどういうふうに変わっていったかわかる KUbernetesの概要がわかる メリデメがわかる Argo CDの例などを用いてどういうふうに使われているのかイメージが付く Kubernetesとは ざっくりいうと、 サービスをコンテナ上で動かすようになったことで起こった、 複数のサーバ上で複数のコン

    Kubernetesをだいたい理解するまで
  • 君には今から3時間で機械学習Webアプリを作ってもらうよ

    新人: 「日データサイエンス部に配属になりました森です!」 先輩: 「お、君が新人の森さんか。僕が上司の馬庄だ。よろしく!」 新人: 「よろしくお願いします!」 先輩: 「さっそくだけど、練習として簡単なアプリを作ってみようか」 先輩: 「森くんは Python なら書けるかな?」 新人: 「はい!大学の研究で Python 書いてました!PyTorch でモデル作成もできます!」 先輩: 「ほう、流石だね」 新人: 😊 先輩: 「じゃ、君には今から 3 時間で機械学習 Web アプリを作ってもらうよ」 先輩: 「題材はそうだなぁ、写真に写ってる顔を絵文字で隠すアプリにしよう」 先輩: 「あ、デプロイは不要。ローカルで動けばいいからね。顔認識と画像処理でいけるよね?」 新人: 😐 新人: (えぇぇぇぇぇぇぇ。3 時間?厳しすぎる...) 新人: (まずモデルどうしよう。てかもら

    君には今から3時間で機械学習Webアプリを作ってもらうよ
  • だからお前のチームはスクラム導入で満足して、いつまでたっても生産性が上がらないんだよ

    最初に タイトルは煽りで釣りです。ごめんね。 この記事の結論を先に書くと タイトルは釣り スクラムチームは導入当初はスムーズに成功できるように感じる。しかし途中でどこに進むべきかの方角を見失い、迷走してスクラムバットに陥る スクラムに求める効能はベロシティの安定が必須なものが多いのに、ベロシティの安定を意識すらしないままスクラムをやるので、迷走に陥る じゃあどうしてそうなってしまう?という話を個人の経験をもとに書いていこうと思います。 前提として この記事を書いた人はWebサービスの内製開発をしているアプリケーションエンジニアだったので、基的に内製開発のWebサービスでのスクラム導入について語ります なぜこの記事を書いたか やっとむさんのツイートを見て思いつきました。 スクラムの導入をしたいというチームは数多く見ますが、かなり中途半端なところでスクラムのレベルアップをやめて、小手先の「改

    だからお前のチームはスクラム導入で満足して、いつまでたっても生産性が上がらないんだよ
  • GitHub ActionsにおけるStep/Job/Workflow設計論

    この記事について GitHub Actionsには、以下3つの実行単位が存在します。 Workflow Job Step パイプラインを組む中で出てくる複数個の処理を、1つの実行単位でまとめてしまうか、それとも分割するのかというのは悩むポイントかと思います。 一つのstepのrunフィールドにコマンドを詰め込む?それともstepを分けた方がいい? 一つのJobの中のstepとして記述した方がいい?それとも別のJobに定義した方がいい? 一つのWorkflowの中にJobをたくさん定義する?それともWorkflowを別にする? この記事では、Workflow・Job・Stepそれぞれの性質を踏まえた上で、ベストな処理単位の選び方を考察します。 使用する環境・バージョン GitHub Actions: 2022/5/15時点での機能をもとに考察 読者に要求する前提知識 GitHub Actio

    GitHub ActionsにおけるStep/Job/Workflow設計論
  • ITエンジニア採用入門

    今、IT関連の技術は様々な企業の競争力の源泉です。一方で、実際に企業が必要とするよりもITエンジニアの数は少ないため、採用競争は激化するばかりです。そこで、元ウェブエンジニアITエンジニアの採用担当を経験した私の視点で、ITエンジニア採用に関する情報をまとめることにしました。 なお、ここでいうITエンジニアはアプリケーションエンジニアインフラエンジニア機械学習エンジニア、QAエンジニアなどIT関連エンジニア全般を指します。 # 更新情報 * 2022/05/17 - 公開 * 2022/05/17 - 中途採用前提であることを Chapter 1 に追記 * 2022/05/18 - 誤字の修正 Chapter 15 「行進」 -> 「更新」 ※はてなブックマークでの指摘ありがとうございます * 2022/05/19 - 活用事例の Chapter を追加 * 2022/05/20

    ITエンジニア採用入門
    bongkura
    bongkura 2022/05/17
  • 作業環境をDockerfileにまとめて、macOSでもLinuxでもWSL2でも快適に過ごせるようになった話

    こんにちは、CLI生活至上主義?の、 ひのしば です。 まぁ、至上主義というのは、ちょっと言い過ぎかもしれませんが、screen, vim, mutt, newsboat, pass, あとは、gitやssh 辺りを使う生活をしており、1日の作業がこれだけで完結するような事もあるような生活を送っています。 さて、そんな私が、ワークステーションサーバに、macOSや、Windows, Linuxから接続して操作するといった構成から、 作業環境をDockerfileにまとめ、手元で上がる環境をdockerコンテナへ統一し作業する構成とした話を紹介します。 この環境は、ここ数ヶ月、不自由なく使えている事もあり、自身の整理のためにも、どのような点が気になって対応したのかを挙げていきます。 詳細は下部に記載する通りですが、 例えば、dockerfile上のuidの問題に気をつける点、Linuxとma

    作業環境をDockerfileにまとめて、macOSでもLinuxでもWSL2でも快適に過ごせるようになった話