サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
WWDC25
qiita.com/kawazu1008
概要 社内で、z-indexの値が可変な要素があったとして、その値に関わらず「それよりも常に全面に任意の要素を表示することは可能か?」という話題になったので調べてみたところ、下記の記事が出てきました。 かなりざっくり言えば、dialog要素をshowModal()で表示すればz-indexの値を超越できるという内容です。 Qiitaにも紹介記事ありますね。 https://qiita.com/nako_n/items/114e51b878753e250ce1#dialog ということで試してみました。 See the Pen z-indexを超越するモーダル by kawazu1008 (@kawazu1008) on CodePen. 詳細 HTMLは、以下の3つの要素を用意。 z-indexを指定した要素 z-indexを指定していないモーダル モーダルを表示するトリガーボタン <di
qiita.com/kawaz
ロードバランサを筆頭に最近のWEB開発の現場では Proxy サーバがよく出てきます。で Proxy サーバが存在するとよく問題になるのが「ユーザの本当の接続元IP」を知りたいという要求で、通常それは Proxy サーバがバックエンドのリクエストに X-Forwarded-For ヘッダを付けてくれることで大体解決します。でその値を更に便利に使えるようにしてくれる mod_remoteip ってのがあって、今まではほぼメリット部分が大きく、その副作用で困ることはあまりなかったんですが、今回ちょっとハマったケースがあったので備忘録としてその内容を記録しておく。 X-Forwarded-For ヘッダの役割と仕組み X-Forwarded-For ヘッダは ip1[, ip2[, ip3[, ...]]] といった構造の値が入ることになっていて、ip1が「ユーザが最初に直接アクセスしたProx
qiita.com/kawazu255
TD;TL Google Speech to Text APIとWeb Speech APIを併用することで実現する 音声検出のみWeb Speech APIを使い、文字起こし自体はGoogle Speech to Text APIを使うことで、ブラウザ文字起こしにおいてリアルタイム感と精度の高さを両立する 発端 現在開発中のプロダクトの中で、Speech to Textの仕組みを導入するために様々な方法を調べていました。 オンライン会議中の会話を文字起こししたり、アジェンダや議事録を一括で管理できるサービス「Telelogger」というサービスなのですが、コアとなる機能が会議中の会話の文字起こしです。 サービスはWebアプリケーションとして提供するため、ブラウザでの文字起こしを想定しています。 対象ブラウザをGoogle Chromeに絞った上で、最初はWeb Speech APIを試し
qiita.com/kawazu191128
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
pam_tid.so と pam_reattach.so pam_tid.so は TouchID 認証を利用するための macOS 付属の PAM モジュール。 pam_reattach.so は pam_tid.so が tmux 内だと利用できない問題を解決してくれる PAM モジュール。 これら2つの設定を /etc/pam.d/sudo ないし /etc/pam.d/sudo_local に追記してやることで、sudo で TouchID が使い放題になります。 /etc/pam.d/sudo_local に sudo の設定が書けるようになりました! 2024年9月16日リリースの macOS Sequoia から /etc/pam.d/sudo の頭に auth include sudo_local という設定が追加されました。これにより今後はユーザが追加でsudoのpam設
tarはアーカイブ作成が最後まで完了しても終了ステータスが 0 以外になることがある! tar コマンドはアーカイブ作成時にワーニングが発生することがあり、ワーニングが起きてもアーカイブ作成自体は最後まで完了してくれるので、簡易なバックアップ用途であれば大抵無視してよいのだが終了ステータスが 1 になってしまうので、終了しないようにしましょう。(ちゃんと考えるならファイルシステムやブロックデバイスレベルでスナップショットを取るところ) なお致命的エラーの場合は 2 とかで終了するのでこれは止まって良いです。 駄目な例 ↑これだとファイルのアーカイブ中に以下のような状況が起きた際などに最後までアーカイブ作成は完了するが、終了ステータスが 1 になってしまい。そこでスクリプトが終了してしまう。 アーカイブ開始した時より後にファイルの更新があった時 tar: target/file: file
# 停止中コンテナの削除(起動中のコンテナはrmがエラーになるので細かいことを気にしなければこれで問題ない) # docker rm $(docker ps -a -q) # 停止中コンテナの削除(少し丁寧版?停止中のコンテナのみを削除) docker rm $(docker ps -f status=exited -f status=created -f status=dead -f status=paused -q) # 不要なイメージの削除(REPOSITORYが<none>の奴) docker rmi $(docker images -f dangling=true -q) # 最近のバージョンでは↓これでOK docker system prune -a
WEBアプリケーションの前段に CDN として CloudFront を使っているとスマホ判定やhttps判定でCloudFront用の特別設定を開発者側にしてもらう必要がある。 具体的には User-Agent が取れない代わりに CloudFront-Is-Mobile-Viewer, CloudFront-Is-Tablet-Viewer, CloudFront-Is-Desktop-Viewer, CloudFront-Is-SmartTV-Viewer などを見るようにする。 また、一般敵なProxyを経由したときのhttps判定では X-Forwarded-Proto を見るところ、CloudFront では CloudFront-Forwarded-Proto というヘッダを見てやる必要がある。 で、多くのアプリでは User-Agent 判定に iPhone/iPad など
最近は lego を使う方がトラブルが少なくてオススメ。特に dns-01 が使える環境だとWEBサーバも不要になるのでとても便利です。そしてlegoもDockerから利用すればインストールの手間がなく便利です。 ↓は今や古い記事です。当時のアレコレの参考文献までに。 元記事 certbot は普通にインストールしようとすると色んなパッケージとかをローカル環境に入れ始めるので気持ち悪い。 証明書さえ手に入れば良いのでプログラムは Docker 内で実行させれば十分。 ドメイン確認に http を使うが /.well-known/acme-challenge/* のパスが通ればよいだけなのでそこだけ Proxy する形が外側の設定がクリーンに保てて楽ちんでよい。 手順 certbot の実行前にホストのWEBサーバに設定しておく。
git 2.9 の新機能で core.hooksPath という設定が出来るようになったようだ。 これは何かというと、今まで git のフックスクリプト置き場は リポジトリルート/.git/hooks というパスに固定だったのが、core.hooksPath を設定することでその場所を変えられるようになったというもののようだ。 指定可能なのは以下の3種類のどれか。 絶対パス (e.g. /home/kawaz/.config/git/hooks) ~ から辿れるパス (e.g. ~/.config/git/hooks) 相対パス(リポジトリルートから) (e.g. myhooks が指定してあったら リポジトリルート/myhooks の意味) 僕の事情:dotfiles のパスが不定なん… 大抵の環境では上述した3種類のパス記述で十分かもしれないが、僕は自分の設定を kawaz/dotfi
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? このエントリの内容は pattern - Vim日本語ドキュメント を見れば全て書いてある。 個人的によく見直すものを自分なりに整理してまとめなおしたものです。 メモ vimの正規表現には \ でエスケープする必要な文字がオプションによって変わる。これには magic / nomagic / very magic / very nomagic と4つのモードがあるけど、vim では magic モードを基本とします。 繰返し制御系(量指定子) a* は0回以上の a の繰り返しにマッチする。(最長一致) a+ は単に a+ という文字列
ダメ人間の日常 例えば適当なファイルを一時的に落としてきてちょっと使ったら捨てたいだとか、そんなとき僕はよく mkdir /tmp/a; cd /tmp/a してから何かするとかやってたんだけど、これ良くない点が色々ある。 一時ディレクトリに使う名前のボキャブラリが貧困な上に掃除もサボるので名前が被りまくってmkdirが中々出来ない→結果こうなる 後始末しないで放置も多いのでゴミファイルが増えてディスクの無駄だしパスワードや個人情報とか消すべきセンシティブな情報が含まれてると色々問題。 一時ディレクトリでの作業が終わったら元いた場所に戻りたいけど元いた場所が深いとこだったりすると戻るのが面倒だしそもそも何やってたか忘れてる事も…。 tmpspaceコマンドで解決だ! そこでそんな問題を解決するために以下のような bash 関数を作って、~/.bashrc とかに書いておくことにした。 #
はじめに vim のプラグイン管理ではこれまで NeoBundle がデファクトだったけど、今後は dein.vim を使えってことなので移行してます。 で dein#add で追加したプラグインの設定をどこでどう書くかを色々試した結果、TOML管理機能を使うのが一番よさげ、という結論に至ったので、こうしておくとよさそうという現時点での僕の設定を書いておきます。 設定例 init.vim (neovimじゃない場合は.vimrcと読み替えてOK) は最終的に↓こんな感じに凄くシンプルになった。 if !&compatible set nocompatible endif " reset augroup augroup MyAutoCmd autocmd! augroup END " dein settings {{{ " dein自体の自動インストール let s:cache_home =
# force https RewriteCond %{HTTPS} !=on RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteCond %{HTTP:CloudFront-Forwarded-Proto} !=https RewriteCond %{HTTP_HOST} !=unsecure.example.com RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L] mod_ssl 判定は %{HTTPS} で行う。 ELBなど一般的なリバースプロキシで https してるときは X-Forwarded-Proto ヘッダを見る。 CloudFrontの場合は CloudFront-Forwarded-Proto ヘッダを通す設定をしたうえでそれを見る。 https リダイレ
はじめに glibcでヤバメな脆弱性キター! 「glibc」ライブラリに脆弱性、Linuxの大部分に深刻な影響 - ITmedia エンタープライズ Google Online Security Blog: CVE-2015-7547: glibc getaddrinfo stack-based buffer overflow CVE-2015-7547: Critical Vulnerability in glibc getaddrinfo - SANS Internet Storm Center Carlos O'Donell - [PATCH] CVE-2015-7547 --- glibc getaddrinfo() stack-based buffer overflo 内容見るに、getaddrinfoの名前朝解決時に悪意あるDNSレスポンスパケット食わされるとexploit発動
外部から通信できる必要は無いので default セキュリティグループのみ付けておく(ホントは何もいらないけど1つは選択必須なので) 最後のキーペア選択はもちろん キーペアなし を選択(このデモでssh使う予定は無いので!) で、起動! クライアント側(本題) では本題の EC2 Run Command (Linux) を簡単実行するスクリプトを書いてみます。 基本的な使い方ですが、ドキュメントやAPIをざっと読んでみて流れ的には以下のようにすれば良いっぽい事がわかりました。 aws ssm send-command で対象インスタンスにシェルスクリプトを送りつける。 AWSの中の人が当該インスタンスの ssm-agent にコマンドを送り届けてくれて、 ssm-agentはコマンド実行が完了したらAWSに結果を返してくれるといったことをやってくれてるはず。 send-commandを実行
# 標準入力を指定の変数名に1行1値の配列として読み込む関数 read2arr() { [[ $1 =~ ^[a-zA-Z][a-zA-Z0-9_]*$ ]] || return 1 local IFS= eval "local $1_" eval "$1=()" eval "while read -r $1_ || [[ -n \$$1_ ]]; do $1+=(\"\$$1_\"); done" } $ # 関数を読み込んでおく $ . read2arr.sh $ # テスト用ファイルを作る(空行とか行頭行末の空白とかタブ文字やクオート入りとか最終改行無しとか嫌な感じのデータを作る) $ echo foo > /tmp/file1 $ echo >> /tmp/file1 $ echo $'\ta b ' >> /tmp/file1 $ echo 'a\tb\\n' >> /tmp/f
追記:openssh-7.3 以降なら ProxyJump や -J が使えます ホスト名を + で繋げることで多段Proxy接続も簡単に、がコンセプトだった本エントリの設定ですが、OpenSSH 7.3 から ProxyJump という設定が使えるようになったので、使えるなら ProxyJump を使う方が健全だし柔軟で使い勝手も良いのでそちらを覚えて帰ることをオススメします。 使い方は簡単で以下のような感じです。多段も行けるし、踏み台ホスト毎にユーザ名やポート番号を変えることも出来ます。 # 1. bastion.example.jp -> internal.example.jp ssh -J bastion.example.jp internal.example.jp # 2. bastion.example.jp -> internal.example.jp -> super-de
色々試した結果、以下手順に落ち着いたのでメモ。 手順 1.Windows7/8を入れる Windows7/8のISOを仮想CDドライブにアタッチしてWindows7/8のプロダクトキーを入れて普通にセットアップする。 ※ Windows7/8でWindowsUpdateする必要はない。後で消すので時間とディスク容量の無駄 2.Windows7/8のライセンス認証を行う 「Windows ライセンス認証」を開いてライセンス認証を行う。必要があればインターネットや電話によるライセンス認証を行う。まぁとにかく普通にライセンス認証を完了させる。 これにより現在のParallelsの仮想ハードウェア構成の情報がマイクロソフトに登録される。 ※ Windows7/8でWindowsUpdateする必要はない。とにかくハードウェア情報がライセンス認証と紐付きさえすれば良い。 3.Windows10をクリ
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1393841669000", "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Sid": "Stmt1393841669001", "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupEgress", "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", "ec2:RevokeSecurityGroupIngress" ], "Resource": [ "arn:aws:ec2:ap-northeast-1:1
次のページ
このページを最初にブックマークしてみませんか?
『@kawazのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く