searchカテゴリー選択
chevron_left

メインカテゴリーを選択しなおす

カテゴリーのご意見・ご要望はこちら
cancel
プロフィール
PROFILE

asonさんのプロフィール

住所
未設定
出身
未設定

自由文未設定

ブログタイトル
i407なプログラマ
ブログURL
https://i-407.com/
ブログ紹介文
すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開!他エンジニアリング情報などネタ多め。
ブログ村参加
2022/01/02
本日のランキング(IN)
フォロー

asonさんの新着記事

1件〜100件

  • AWS-NLBでwwwありなし・HTTP/HTTPS通信に強制リダイレクトする方法(Network Load Balancer)

    AWSのALB(Application Load Balancer)を使って、HTTPS強制や、wwwありなし強制のリダイレクトを行うと思われる。その場合特に難しいことはなくそのための情報も腐るほど出てくる。ALBは料金も少し安いし通常はこのALBを使用すると思われる。 ALBが使えないケース(Route53が使えない)  しかし、ALBを使用できないケースもある。それは、NS(ネームサーバー)をRoute53に設定できない時だ。Route53以外でDNSを設定する場合、ALBへのルーティングはCNAMEを設定せざるを得ない。しかし、例えば、WEBサーバーをドメインaaa.comとwww.aaa.comで運用したい場合(wwwなしをwwwありにリライトして)、「aaa.com」はCNAMEを設定できないのだ。DNSの仕組み上不可能である。そのため、独自ドメイン(aaa.com)をALBへ向けることができないのだ。(自分が知らないだけで、外部NSでALBを運用する方法があるのかもしれないが)  こういう場合は、NLB(Network Load Balancer)を利用すれば、リダイレクトを実現することができる。このNLBの情報があまり引っかからないので紹介する。ちなみに今回は「wwwありSSL通信」へリダイレクトするケースを紹介する。 NLB、NginxでSSL通信  NLBでは、 ロードバランサに対してStaticIPアドレスを設定できる。そのため、DNSにwwwなしもwwwありもAレコードで設定できNLBに向けることができる。しかもAWSのACMによってSSL証明書をセットしてhttps通信も簡単にできる。以下のイメージだ。  そして、Webサーバー側は80ポートで受けるので、ロードバランサではなくNginxでHTTP通信をHTTPS通信へリダイレクトするはずだ。ググると以下のconf設定がよく出てくる。 if ($http_x_forwarded_proto != https){ return 301 https://$host$request_uri; }  しかし、これはALB用の書き方で、NLBではうまくできない!!

  • RustでgRPCが最速か?1msを追い求める

    目次  リクエストからレスポンスまでの時間はなるだけ短いほうがいい。ユーザー操作性的にも好ましいし、昨今ではリクエスト~レスポンスまでの時間で課金されるクラウドサービスも多い(GCPのCloudRunとか)。特にマイクロサービス設計の場合は、リクエスト~レスポンスまでの時間がより重要になってくる。 今回はプログラミング言語や通信プロトコルによってどのくらい時間が変わるのかを紹介。このような記事は量産されてきているだろうけど、その量産に加わることにする。なお以下検証は、普通にググって出てくるような実装方法で行っているので、最速最適化を行ったプログラムコードではないことをご了承いただきたい。 みんなの280時間を奪ってはいないか?  ものすごい単純計算なんだけど、10,000人のユーザーが存在していて、年間で1人あたり1000回コールするサービスがあるとするじゃん?もし、そのWebAPIのレスポンスまでの時間を100ms(ミリ秒)短縮できると、全部でおよそ280時間もの短縮になるんだよね。 逆に言うと、よろしくないプログラムコードを書いたり通信方法の選択によって、 みんなから280時間も時間を奪っているかもしれない。しかもそのうち無駄なコンピュータ処理時間もかかっているため、コストも上がる。もちろんユーザーの通信状態によってレスポンス時間が大きく変わるのは間違いないが、今回は、プログラム言語(プログラムの実行時間)と通信プロトコル(リクエスト・レスポンスの通信時間)のみにフォーカスする。またAPIの実行環境はGCPのCloudRun(1cpu 512MB)とする。

  • なぜみんなFXで勝てないのか。Pythonでシミュレートしてみた

    今回のような検証は多分何十年も前からいろんな人にやり倒されてきたことかと思うが、ここであえて書いてみる。今回はプログラミングは無関係だ。ていうかPythonも無関係だ。 自分は10年ちょいくらい前にFXで多額のお金を溶かしてしまった人間だ。と言っても数百万円程度だが、若かりし自分にとっては首吊りレベルに落ち込んだ。あれから月日はたったが、あのときのトラウマからFXで勝つことは不可能とさえ思っている。以下のような記事で、AIでFXの取引を行うという検証を行っているところだが、投資金額はものすごく少なくしている。 AIでFXのトレード判定実装したらゼニの匂いがしてきた  前回の記事でFX(為替)のレートと速報ニュースの関係についてデータを調査してみたが、今回は速報ニュースを受けたらすぐに機械学習(AI)のNLPモデルで分類し … Read More  いろんな情報を収集したり、テクニカル分析を駆使して自信満々にポジションを持って、朝起きたら給料数か月分が吹き飛んでてオハギャーみたいなのは二度と経験したくないんものだ。以下の内容は、トレーダー達は誰でも知っていることだろうけど、無知な私が気付いたことを書きたい。 な~んにも考えずに無心でランダム取引の場合  ポジションをいつ持つか、LかSかなどの判断が間違えているのか原因は定かではないが、ひとまず何も考えずにコイントスで ランダムに意思決定する場合 を考えてみる。そして膨大な試行回数で一体どのくらいの期待値になるのかを調査してみる。

  • 非認証APIのアクセス対策(粗大ごみセンターのシステムの例)

    目次  前回の記事で書いたとおり、全くユーザーが動作させる機能がないようなコーポレートサイトやLPサイトは静的サイトで作成するほうが、あらゆる面でメリットがある。ところがそれら以外の普通のWEBシステムでは、バックエンドでの動的な処理が必要なはずだ。今回はそのセキュリティの話。 バックエンドのアクセス制御・セキュリティ対策  今回考えたいのは以下のようなことだ。これは静的サイトだけでなく普通のSSRサイト(.NetとかRailsとかlaravelで作ったシステム)でも起こりうることだ。ちなみにクライアントはブラウザやアプリのことを意味する。  つまり、特定のクライアント以外からAPIを悪い人がたたきまくれる状態って非常に怖いよねってこと。ある程度対策が存在するけど、特に静的サイトではこういう対策がお粗末なサイトがたくさん存在する。 これはCORS, CSRFなどの話か、、否!  まず、適切なユーザー認証を行うこと、そしてCORSの許可ドメインをガバガバにしない、CSRFトークンを送信するなどの対策は当たり前にやってほしい。CORSとかCSRF、XSSなどでググるとSSRサイト、SPAサイトそれぞれの対策方法が出てくるので、よくわからない人はチェック。

  • Rustのwasmを逆コンパイルして丸裸にされるのを難読化で抗う

    WebAssembly(wasm)が世の中に登場して久しいが、今回はこのWasmのDecompile(逆コンパイル)の話。 聞くところによるとWasmは、不正にマルウェアの稼働など悪用に使われていることが多いのだとか。またwasmはJavascriptに比べてマシンパワーを効率的に使うことができるタスクがいくつかあるが、2022年現在では未だブラウザ内のほとんどのDOM操作、UI操作がJSの処理速度に劣っているとも言われているので、結局将来的にwasmも消えていく可能性もある。 WebAssembly(wasm)にセキュリティ情報を含めて良いか  コンパイル後のwasmファイルはバイナリデータであるが、当然デコンパイルして人間が理解できそうなコードに戻すことができる。なので、重要なシークレットキー的なものをwasmの中に入れてしまうと抜き出されてしまう可能性がある。なので、結論から言うと 重要な情報(dbの接続情報、他のサービスへのシークレットキーなど)は絶対にwasmに含めてはいけない。 一方、別に抜き取られてもそれだけで何か被害があるわけではなく、できれば知られたくないような情報ってこのwasmに隠せないかなと思ったわけ。例えば認証無しでコールできる公開APIの接続キーとか。もちろんブラウザのインスペクターでNetworkを見ると接続時のキーなどは見えてしまうけど、wasmでワンタイムトークンを発行しさらに暗号化したものをHTTPヘッダーに付与して送信するとかにしたらどうだろう?APIへの接続キーを自由に生成するにはwasmを逆コンパイルして中身を解析しないと分からず、このコストが高ければ高いほどハッカーはあきらめてくれる可能性が高い。 ということで今回はRustによるWebAssembly(wasm)のデコンパイルと文字列の難読化について調査してみた。 Rustでのwasmのコード  今回は以下のコードでwasmをコンパイルして使ってみる。 externcratewasm_bindgen;usewasm_bindgen::prelude::*;#[wasm_bindgen]pubfn secret(key: &str )-> String {ifkey!="this is pass!"{returnString::from("error");}returnString::from("success")} バ

  • 静的サイトホスティングは万能か?

    目次  WEBサイトって一般的にブラウザがHTMLやCSS、Js、その他画像などのファイルを読み込んで描写されているものを言うよね?一方Webサイトを作成するには、Webサーバーが必要という。特に有名なCMSであるWordPressではサーバーでPHPやデータベースが動作してサイトが構築される仕組みになっている。私が学生のとき、WEBサイトはHTMLやCSS,JSによって表示されているのに、なんでサーバーサイドの言語(PHPなど)とかDBが必要なのかなと思ったことがある。 当然PHPとかDBは動的な挙動をするために必要なわけだ。例えばブログのコメント機能とかログイン認証機能とかのためにサーバーサイドのプログラムが必要だということだ。ただ、世の中の多くのサイトやブログにサーバーサイドの処理が必要かって言われると、はっきり言って不要じゃないかと思う。たとえば多くの小さな会社のコーポレートサイトはWPで作成されていることが多いけど、 わざわざWPで作成する必要ある? サーバーでPHPが動いたりMySQLに接続してデータの読み書きが頻繁に行われたり、まるで無駄な動作が多い。 ワードプレス使う必要あるか?  例えば3ページしかないコーポレートサイトで、ユーザーが操作する機能(コメントなど)がないサイトを考えてみよう。トップページとAboutUsページとかプライバシーポリシーとかのページのみで文字列と画像で構成される。こういうサイトは静的サイトと呼ばれる。本来ならサーバーサイドでプログラムが動作する必要はないしデータベースも必要ない。

  • フィッシング詐欺サイトに大量のゴミをプレゼントできるか

    ここ2年ほど スミッシング詐欺(=SMSフィッシング) のメッセージを何通か受けたことはないだろうか?Amazonとか銀行からSMSのメッセージが届き、そこにURLが書かれていてタップすると詐欺サイトに飛ばされるあれのことだ。まぁ普通に若い人はあんなバカな詐欺に引っかかるとは思えないけど、飛んでくること自体にイラついたりする。なぜ電話番号を知っているのか?って思うかもしれないが、なんでも、犯罪者はランダム(または連番で大量)でSMSを送信しているらしいから、たまたまあなたの携帯に届いてしまっているってことだ。  今回この詐欺師達の手口を分析して、反撃手段を考えてみたい。ジョーダン半分で楽しんでもらいたい。 実際に届いた詐欺SMS  URLを見てみて。“https:abnrno.com"って。いや、どこかに"amazon"くらい入れろよってくらいやる気なし。でもお年寄りとかはURLなんて見ずにポチるからどうでもいいんだろうね。そしてこのURLをタップした先が以下だ。  amazonのログイン画面やん!これにあなたの本当のamazonのアカウントを入力したら、個人情報が抜き取られるっていう詐欺ね。実際の本物のAmazonのログイン画面は以下で、見た目は少し違っている。 詐欺師に関する情報はどこかに書かれているか?  WHOISコマンドで見ても、所有者の情報は全く分からないようだ。分かるのはnamesilo.comというサービスで取得されているドメインってことくらい。  dig打ったら以下の情報が出た。 abnrno.com. 0 IN A 172.

  • リーダブルコードを意識して人に優しく

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • Dockerのヤバさを再認識

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • Gitがなかった時代はみんな頭悪かった

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • ロボットで「私はロボットではありません」を突破してみる

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • AIでFXのトレード判定実装したらゼニの匂いがしてきた

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • Pythonでニュース速報と為替レートの関係を調べてみる

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • WordPressサイトを守る最低限の設定

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • 情弱が運営するWordPressサイトを攻撃する

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • RESTfulなAPI。それは魔法です。

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • 特定の箇所を自分でいじって。それがWebAPI開発上達の基本

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • Webサーバーが出来上がるまで

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • HTTP通信の基本をイメージできなければバックエンド実装は何もできない

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • リファクタリングが自分を成長させてくれる

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • 簡易投票システムプレビュー

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • え、ウソ!?プログラミング簡単すぎ!

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • プログラミング下手な人、変わりたいならまず

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • プログラミング宝典目次

    プログラミングの初心者が誰でもすぐに上達できるノウハウをまとめた宝典!

  • まずはこれだけ!VSCodeのショートカット操作!

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • いいから黙ってVSCodeとVimバインド

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • 初心者プログラマは基本動作だけで年間66時間以上も損しているかも?

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • 誰でも短期間でプログラマになれる

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • 検索結果

    i407プログラミング技術サイト検索結果

  • 膨大なサイズのCSVファイルから爆速でMySQLへインポート

    CSVファイルからDB(MySQL)にインポートする機能はよくあるし、情報もゴロゴロとある。前回の記事では大量のデータをCSVファイルとして素早く書き込む方法を書いたが、今回はその逆と言っても良い。  ただ、CSV→DBは色々な制約を受けるので最も早く確実なただ一つの答えがあるわけではなさそう。今回紹介するのはサーバーのupload_max_filesizeや利用可能メモリについては度外視している。 CSVのMySQLインポートの手段  先に方法を列挙すると以下のようになる。 1レコードずつインサート(激遅) バルクインサート(速い) バッチでインサート(ちょっと遅い) LOAD DATA LOCAL INFILEインサート(最速)  全てのやり方ができる環境かどうかも考慮に入れる必要がある。  また今回はフレームワークで使用されることを前提としてPHP(Laravel)で検証しているが、Insertの処理速度という意味ではDBの問題なのでどのフレームワークであろうが、どの言語であろうが同じである。

  • 【PHP】大量データをfputcsvで瞬時にCSVファイル出力する方法

    phpでcsvを作成する場合、fputcsv関数を使用するだろう。しかし数十万行・20MB以上のデータをcsvファイルとして書き込みする場合、かなりの時間がかかってしまう。  今回通常のレスポンスタイム内(3秒以内)でPHPのfputcsvでファイルを書き出す必要があり、多少情報が少なくて調べたことをまとめる。 クッソ遅いfputcsvのやり方  ネットで調べると以下のやり方がずらりと出てくる。ほとんどこればっかり書かれている。 $list = [ ["hoge", "fuga"], //省略 ] $fp = fopen('export.csv', 'w'); foreach ($list as $fields) { fputcsv($fp, $fields); } fclose($fp);  30万行以上のデータを上記のfputcsvでファイル書き出ししようとしたら30秒程度かかったのだ。そりゃ一行ずつflieにputしていくからそのくらいかかるのだろう。

  • Android端末とリーダー(外部機器)をUSB接続して充電する

    ソフトウェアの話から逸れるのだが、アプリケーション(iOSやAndroidなどのスマホアプリ)からUSBで機器に接続する場合、USBハブなんかでポート増やしたい時がある。 今回Androidタブレットを充電しながらリーダー(felicaなど)にUSB接続するアプリを開発する必要があった。 通常のスマホやタブレットにはUSB端子またはライトニング端子が1つしかないはずだ。そのため、端末からハブを使って端子を増やす方法をとるだろう。 充電しながら外部機器とusb接続って普通に考えてできそうなことであり、ネットでもこのような情報が出てくるのに、えらくハマったので以下に書き記す。そこにはアプリ開発以前の問題が存在したのである。 USBハブにはホスト・クライアントがある まず、タブレットと外部リーダーを通常のUSBハブで接続してみたが充電状態にはならなかった。 そもそもUSBハブとは接続元(ホスト)のUSBポートを分岐させるもののようで、分岐先(クライアント)同士でデータのやり取りもできないようだ。 上記の例では電力はそれぞれ供給されているが、タブレットと外部機器をUSB接続できない。 クライアントポート同士で接続できない、そしてハブにはホストポートが1つ、クライアントポートが複数という事実。 スマホ・タブレットを充電しながら外部機器にUSB接続できない? そしてもう一つの事実として、通常のUSBハブではクライアント機器に対しては電力を供給するが、ホストには電力供給されない。 つまり通常のUSBハブではホスト(タブレット)に電力供給を行えない。(充電できない) このような単純な構成がなぜできないのか!?さっぱりわからん。もしスマホやタブレット側にUSB端子以外の充電方法があればUSBポートから電力供給されなくても問題ないのだが。 USBハブにはPD(Power Delivery)対応のものがある 2015年にUSB 3.1の追加仕様として定義されたもので、従来のUSBバスパワーでは4.5W、USB BC(Battery Charging)仕様でも7.5Wまでだったが、最大で20V/5Aの100Wの電力を供給することができる。

  • Node.jsのclass-validatorでユニークバリデーション

    nodejsのclass-validatorについて。 https://github.com/typestack/class-validator class-validatorインストール  modelクラスのプロパティにアノテーションでバリデーションルールを記載し、1つのメソッドでバリデーションチェックしてくれるライブラリだ。  ほとんど使い方は公式にある通りでする理解できるが、ユニークチェックに少しハマったのでメモ。 class-validatorでユニークバリデーションチェック  Hogeクラスはhogeテーブルのモデルで、emailカラムの重複チェックをしたい時は以下のようにする。 import { validate, registerDecorator, ValidationOptions, ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments } from "class-validator"; export class Hoge { @Unique({ message: "このメールアドレスは既に使用されています。" }) public email: string | null = null; } @ValidatorConstraint({async: true}) export class UniqueConstraint implements ValidatorConstraintInterface { async validate(value: any, args: ValidationArguments) { // DBに接続してvalueの一致レコードを取得 // 一致レコードが存在する場合はfalse(バリデーションエラー) return true } } export function Unique(validationOptions?

  • AxiosでCookieを送信してSessionを共有する

    ブラウザからAxiosでCookieセット  ブラウザのSessionCookieなどをaxiosでそのままサーバーに送信したい時は以下のようにセットする。 axios.get('url', { withCredentials: true } )  そしてサーバー側は次のように許可する。(cors使用) 今回はサーバーサイドがNoneJSのexpressの場合の例だが、他の言語・フレームワークでも同じだ。 import * as express from "express"; const cors = require('cors') const app = express() app.

  • CentOSサーバ上DockerコンテナでDNS解決されない時は

    dockerコンテナ内でDNS名前解決されない  本番サーバーを以下の環境で構築する場合。 CentOS7 Docker  Dockerコンテナ内から外部のエンドポイントにアクセスするとき、DNS名前解決できず困ったことがある。 以下の2つのうちどちらかの方法でコンテナにDNSを指定することで解決できた。 docker-compose.ymlでDNS直接指定  docker-compose.ymlに以下のように記述。 version:'3.3'services:app:restart:alwaysdns:8.8.8.8 resolv.confマウント  以下のresolv.confを作成し、コンテナ内の/etc/resolv.confにvolumeマウント。 search google.internal nameserver 8.

  • No Search Found

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

  • Contact

    すべてのプログラマを上級者に導くサイト!最短距離で一人前のプログラマになるためのノウハウを公開します!

ブログリーダー」を活用して、asonさんをフォローしませんか?

ハンドル名
asonさん
ブログタイトル
i407なプログラマ
フォロー
i407なプログラマ
カテゴリー一覧
商用