ブックマーク / qiita.com/mpyw (18)

  • WHERE 条件のフィールドを UPDATE するのって,明示的にロックしてなくても安全?全パターン調べてみました! - Qiita

    WHERE 条件のフィールドを UPDATE するのって,明示的にロックしてなくても安全?全パターン調べてみました!MySQLSQLPostgreSQLDatabaseQiitaEngineerFesta2022 TL; DR MySQL/Postgres とも, MVCC アーキテクチャの恩恵で, SELECT と UPDATE は基的には競合しない。 単一レコードのシンプルな UPDATE でも排他ロックされ,排他ロック中のレコードへの UPDATE での変更操作は トランザクション分離レベルによらず ブロックされる。UPDATE 文に含まれる WHERE 句での検索もブロックされ,これはブロックされない SELECT による検索とは別扱いになる。 但し UPDATE 文の WHERE 句上で,更新対象をサブクエリの SELECT から自己参照している場合は例外。トランザクション分離

    WHERE 条件のフィールドを UPDATE するのって,明示的にロックしてなくても安全?全パターン調べてみました! - Qiita
    kkeisuke
    kkeisuke 2022/07/04
  • ここがつらい! Slack API - Qiita

    半分ネタ記事です。あんまり真面目に書きません。 項目数が多いので,気力でなんとか書きます。分類は諦めます。 他にもある!っていうのがあったらコメント欄で教えて下さい。気が向いたら追記します。 公式の TypeScript 型定義がもはや型定義を諦めている 辛い度: ★★★★★ 辛い中でもこれはかなり上位に来るやつ。 こちらに OpenAPI 形式で仕様が定義されていて, https://github.com/slackapi/node-slack-sdk/tree/main/packages/web-api/types ここに仕様に基づいて TypeScript の型定義ファイルが吐かれるようになっています。 Git 管理されていないので,実際のリリースを見てみましょう。 https://unpkg.com/@slack/web-api@6.7.2/dist/response/Reacti

    ここがつらい! Slack API - Qiita
    kkeisuke
    kkeisuke 2022/06/19
  • これで完璧!今さら振り返る CSRF 対策と同一オリジンポリシーの基礎 - Qiita

    ✎ 基礎知識編 CSRF とは何か? CSRF (Cross-Site Request Forgeries) を意訳すると 「サイトを跨ぐ偽造リクエスト送信」 です。 簡単に言うと,罠サイトを踏んだ結果,自分が無関係な別のサイト上で勝手にアクションをさせられる攻撃です。具体的には,ネットサーフィンをしているうちに知らない間に自分のIPアドレスから掲示板に犯罪予告が書かれていた,といった被害を受けます。 この攻撃を防ぐ責任は「無関係な別のサイト(具体例では掲示板)」側にあります。Web サイト作成者には,利用者が意図しない操作を勝手に実行されないように,利用者を守る責任があります。 また上図からも分かる通り,この攻撃の最大の特徴はアカウントがハッキングされたというわけではないということです。ログイン状態の利用者のWebブラウザを利用して攻撃が行われている,というのが重要です。 オリジンとは何

    これで完璧!今さら振り返る CSRF 対策と同一オリジンポリシーの基礎 - Qiita
    kkeisuke
    kkeisuke 2019/08/31
  • たぶんこれが一番分かりやすいと思います React + Redux のフロー図解 - Qiita

    【追記】 もうこれ古いから参考にしないでください https://t.co/mXtcc73Orf — もし Laravel が流行しなくなってこられてきてたとしたら、絶対に捨てられてこられてたと思うか (@mpyw) January 26, 2021 Redux にはその昔 connect()() とかいうクソ API と, Redux-Saga とかいう宗教がありました という考古学です — もし Laravel が流行しなくなってこられてきてたとしたら、絶対に捨てられてこられてたと思うか (@mpyw) January 26, 2021 読者対象 Tutorial: Intro To React - React Example: Todo List · Redux 「チュートリアルそれぞれ一周した!Reactは何とか理解できたが,Reduxがさっぱりわかんねぇ!」 ぐらいの人向け。自分

    たぶんこれが一番分かりやすいと思います React + Redux のフロー図解 - Qiita
    kkeisuke
    kkeisuke 2017/01/07
  • PHPによる簡単なログイン認証いろいろ - Qiita

    GitHubにダウンロードしてすぐ試せるサンプル置きました↓ https://github.com/mpyw-yattemita/php-auth-examples TLS暗号化を使用できる場合 (https:// の場合) この場合は生のパスワードをそのままクライアント側から送信してもらって構いません. なおパスワードをそのまま平文でスクリプト中に書くことはあまり望ましくないので,下準備としてあらかじめ以下のコマンドを実行してパスワードハッシュを作成しておいてください. mpyw@localhost:~$ php -r 'echo password_hash("パスワード", PASSWORD_BCRYPT), PHP_EOL;' $2y$10$TThG3fsMJegLJHzVQbz8IeHhvpgBg7P5j6gjQWEUOrKKCtsA9L87G Basic認証 危ないと言われるBa

    PHPによる簡単なログイン認証いろいろ - Qiita
    kkeisuke
    kkeisuke 2016/04/01
  • [PHP] Mac版Excelと互換性のあるCSVファイルを出来るだけ効率よく作成する - Qiita

    ポイント mpyw-yattemita/excel-csv-compatibility-check 上記リポジトリで互換性を確認した結果,一般的には,以下の2つのいずれかの選択肢をとるべきであることが分かりました。 Shift_JISでCSV形式にして拡張子csvで保存 UTF-16(LE)でTSV形式にして拡張子csvで保存 この記事では,UTF-16(LE)を取り扱うことを前提とします。 注意点 Unicodeを用いる場合,文字セットに応じたBOMが必要である。 UTF-8なら 0xEF 0xBB 0xBF UTF-16(LE) なら 0xFE 0xFF UTF-16(BE) なら 0xFF 0xFE 「UTF-16(LE)」と「UTF-16LE」は別物なので注意。「UTF-16LE」にはBOMが付かない。 Shift_JISのほうが文字の守備範囲が狭く,絵文字やラテン文字・ハングル文

    [PHP] Mac版Excelと互換性のあるCSVファイルを出来るだけ効率よく作成する - Qiita
    kkeisuke
    kkeisuke 2016/03/31
  • PHP7から private や private static のテストがクソ簡単に書けるぞ! - Qiita

    <?php namespace mpyw\StupidExample; class Example { private static function hello() { return 'Hello'; } } <?php require_once 'Example.php'; use mpyw\StupidExample\Example; $Example = new Çlass { // ハイライトが未対応なので全角文字で小細工 private $rc; public static function __callStatic(string $name, array $args) { $rm = new \ReflectionMethod(Example::class, $method); $rm->setAccessible(true); return $rm->invokeArgs(

    PHP7から private や private static のテストがクソ簡単に書けるぞ! - Qiita
    kkeisuke
    kkeisuke 2016/03/03
  • ReactPHP?時代はRecoilPHPだ! - Qiita

    時代変遷 JavaScript では JavaScriptで非同期処理の時代変遷と言えば,こんな感じでやってきたと思います. (例) 1秒後に+1した値をコールバック引数に渡す関数を使って,以下の2つの流れを同時に処理し,両方終わった段階で「All done !!」と表示することにします. 1→2→3 4→5→6 callback (旧石器時代) function plusOneLater(a, callback) { setTimeout(function () { callback(a + 1); }, 1000); } var active = 2; plusOneLater(0, function (x) { console.log(x); plusOneLater(x, function (y) { console.log(y); plusOneLater(y, function

    ReactPHP?時代はRecoilPHPだ! - Qiita
    kkeisuke
    kkeisuke 2016/01/25
  • PHPでクロージャのuse地獄を回避する裏ワザ - Qiita

    (function () { $name = 'John'; (function () use ($name) { $greet = 'Hello'; (function () use ($name, $greet) { echo "{$greet}, {$name}\n"; })(); })(); })(); call_user_func(function () { $name = 'John'; call_user_func(function () use ($name) { $greet = 'Hello'; call_user_func(function () use ($name, $greet) { echo "{$greet}, {$name}\n"; }); }); }); After PHP7.0以降は new class{} で無名クラスが使えます.全てのクロージャを無

    PHPでクロージャのuse地獄を回避する裏ワザ - Qiita
    kkeisuke
    kkeisuke 2016/01/25
  • 【Promise】再施行出来るPromise (Retmise) - Qiita

    (function (root) { 'use strict'; function Retmise(options) { if (this == null || this.constructor !== Retmise) { return new Retmise(options); } options = options || {}; options.retries = options.retries != null ? options.retries : 5; options.delay = options.delay != null ? options.delay : 500; options.timeout = options.timeout != null ? options.timeout : 0; options.onRetry = typeof options.onRetry

    【Promise】再施行出来るPromise (Retmise) - Qiita
    kkeisuke
    kkeisuke 2015/09/05
  • PHP7で流行って欲しいリクエストパラメータの受け取り方 - Qiita

    みたいなコードの是非を巡ってPHPと闘ってきましたが… $_GET, $_POSTなどを受け取る際の処理 filter_input_simple filter_input_array_recursive いずれにも以下のような欠点がありました。 filter_input で一発処理出来るのは外部から受け取る値かつ文字列のみ 上記に該当しないものには isset と is_string / filter_var の処理がどこかで必要になってくる PHP7からは…? PHP7にはNULL合体演算子??が導入されており、任意の変数に対して 未定義でもNULLでもなければ左オペランドの値を採用 未定義またはNULLのとき右オペランドの値を採用 (内部でisset相当のチェックを行っているのでエラーが発生しない) という処理を記述することが出来ます。 文字列型のみ処理したい場合

    PHP7で流行って欲しいリクエストパラメータの受け取り方 - Qiita
    kkeisuke
    kkeisuke 2015/08/28
  • isset, empty, is_null の動作まとめ - Qiita

    ※ 未定義の変数は Notice: Undefined variable を発生しながら null として扱われます。 複雑な表を書き並べている記事が多いですが、実際は null であれば null でなければ 空値であれば 空値でなければ の4種類の内容しか取り扱っていないものがほとんどであり、覚えるのが難しいなどと悩む必要はありません。至ってシンプルです。但し、(空配列はまだ分かるとして) 文字列のゼロと空要素から成るSimpleXMLElementの扱いには特に注意してください。これはPHPにおいて直感的ではない、最もクセのある実装のひとつです。JavaScriptなどと比較してもこれらの点だけ異なっていたりします。 変数の存在を確認するショートコード これから紹介するissetやemptyは、未定義とnullを区別することが出来ません。issetやemptyについて紹介する前に、純

    isset, empty, is_null の動作まとめ - Qiita
    kkeisuke
    kkeisuke 2015/07/03
  • PHPを利用したBasic認証の仕組み - Qiita

    注意 この記事はBasic認証フローの仕組みを解説することに重点を置いており,セキュリティに関してはあまり考慮しておりません.セキュリティを考慮した実用的な実装に関しては以下をあたってください. PHPによる簡単なログイン認証いろいろ password_verifyは当にタイミングセーフなのか? 導入 「今どきBasic認証みたいな危険なもの使うなんて…」 なんて心配はさておき、何故以下のような記述でダイアログを交えた認証フローが成り立つのか疑問に思っていました。結論からすれば大したことないんですけど、それがイメージしにくかったのでここにメモしておきます。 <?php switch (true) { case !isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']): case $_SERVER['PHP_AUTH_USER']

    PHPを利用したBasic認証の仕組み - Qiita
    kkeisuke
    kkeisuke 2014/11/08
  • PHPオブジェクト指向入門(前半) - Qiita

    コンセプト オブジェクト指向プログラミング未経験者~理解を深めたい人、ノンケ~ホモまで幅広くカバーするつもり。多分。 クラスとオブジェクト(初級) 唐突ですが、量産型のロボットの設計・製造について考えてみましょう。 ロボ太郎 ロボ次郎 イラストで初心者を釣る クラス まず、ロボットの設計図を クラス として定義します。設計図をもとにロボットを製造するには、 new 演算子を使います。製造された物体のことを オブジェクト や インスタンス と呼びます。ここではこれらの用語を区別せずに用いることにします。 Yahoo!知恵袋 - オブジェクトとインスタンスの違い

    PHPオブジェクト指向入門(前半) - Qiita
    kkeisuke
    kkeisuke 2014/05/27
  • PHPで各種バリデーション - Qiita

    $a = filter_input(INPUT_GET, 'a'); // "foo" $b = filter_input(INPUT_GET, 'b'); // false $c = filter_input(INPUT_GET, 'c'); // null $a = (string)filter_input(INPUT_GET, 'a'); // "foo" $b = (string)filter_input(INPUT_GET, 'b'); // "" $c = (string)filter_input(INPUT_GET, 'c'); // "" /* 1. 未定義や想定外の型の検出 */ $email = (string)filter_input(INPUT_POST, 'email'); /* 2. 値の形式に関するバリデーション */ if (false !== filter

    PHPで各種バリデーション - Qiita
    kkeisuke
    kkeisuke 2014/05/23
  • [PHP] リクエストパラメータ・セッションに関するまとめ - Qiita

    予備知識 スーパーグローバル変数とは? 「スーパーグローバル変数って何?」って感じの駆け出しPHPプログラマのために念のためマニュアルへのリンクを記載しておきます.全然知らない人は軽く読んでおいてください. PHP Manual - 変数のスコープ PHP Manual - スーパーグローバル HTTPとは? リクエストヘッダー・レスポンスヘッダー と聞いてピンと来ない人はまず下記サイトにて予習をお願いします.細かいことは覚える必要は無いので,大雑把に「ヘッダーとはどんなものか」ということを理解してください. Qiita - 【PHP超入門】HTTP(GET・POST)について Qiita - 【PHP超入門】Cookieとセッションについて @7968さんによるQiitaの記事です.右も左もわからない人はまずこれで. とほほのWWW入門 - HTTP入門 最初の記事をもう少し体系的にまと

    [PHP] リクエストパラメータ・セッションに関するまとめ - Qiita
    kkeisuke
    kkeisuke 2014/03/02
  • [PHP] ハイフンなしの電話番号からハイフン付き電話番号を復元する - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在の電話番号形式にすべて対応している保証はありませんので,過去の記事として参考程度にご覧ください。 Rubyですでに実践されているコードがあったのでそちらを参考にさせていただきつつ少々工夫してみました。 http://qiita.com/kennyj@github/items/dde3880abb5071f649ab https://gist.github.com/kennyj/4966002 既にハイフンで誤って区切られていた場合も正しく修正されます。 一覧の中から見つからなかったときはそのまま $input を返します。 第2引数の $strict で携帯電話等の番号の区切り方が変わります。 $strict がFALSE(デフォルト)のとき 見慣れた慣用的な区切りになります。 090 - XXXX - YYYY 080

    [PHP] ハイフンなしの電話番号からハイフン付き電話番号を復元する - Qiita
    kkeisuke
    kkeisuke 2013/10/03
  • PHPでデータベースに接続するときのまとめ - Qiita

    【2021/10/15 追記】 この記事は更新が停止されています。現在では筆者の思想が変化している面もありますので,過去の記事として参考程度にご覧ください。PDO に関しては大きく変わっていない部分が多いとは思いますが, PHP 8.x 以降での動作保証はありません。 あらかじめ読んでおきたい記事 Qiita - 【PHP超入門】クラス~例外処理~PDOの基礎 by @7968 初心者がやりがちなミス 以下のどれかに1つでも当てはまるコードは見直す必要があります.付録にリンクを貼っておきましたので,「該当するかも?」という人はクリックして飛んで読んでください.太字にしてあるものは脆弱性に直結する危険度の高いものです. mysql_query などの非推奨関数を利用している SET NAMES あるいは SET CHARACTER SET などで文字コードを指定している そもそもデータベース

    PHPでデータベースに接続するときのまとめ - Qiita
    kkeisuke
    kkeisuke 2013/09/07
  • 1