tetsu040eのブックマーク (1,010)

  • Redisのジオメトリ機能 | フューチャー技術ブログ

    地図・GIS・位置特定に関する連載の4日目のエントリーです。最初はブラウザの座標を取得するAPIとか、IPアドレスから場所を推定するGeoIPを使って、近い場所の人を探すサービスでも作ってみようかと思っていました。Quad-Treeみたいなゲームでよくある座標系を収めるデータ構造を使って、近くのメンバーを探す機能とかを作ろうと思っていましたが、ふと「座標系をそのまま格納して検索できるデータベースとかありそうだな」と思って調べたところRedisがヒットして横道にそれてしまったのでそのまま横道を突き進んでみました。 Redisは2010年ぐらいに有志でドキュメント翻訳したりしたりして、チョットワカル程度でしたが、久々にドキュメントを見ていたら座標情報を保持したり検索したりするコマンドが増えていました。その辺りを少し調べてみました。 Redisのジオメトリ機能Redisのジオメトリ関係のコマンド

    Redisのジオメトリ機能 | フューチャー技術ブログ
    tetsu040e
    tetsu040e 2023/05/10
  • WebSpeechAPIを利用してWebブラウザで音声認識を行う

    はじめに ウェブ音声サービスを調べていた際にWebSpeechAPIと遭遇しました。JavaScriptひとつでブラウザで簡単に音声を扱えるということで気になったので触ってみました。 WebSpeechAPIとは WebSpeechAPIは、W3C(World Wide Web Consortium)によって策定された Web標準のAPIです。音声をテキストに変換したりテキストを音声に変換するなどブラウザ上での音声データの取り扱いを可能とします。 WebSpeechAPI Specification では以下のようなユースケースが挙げられています。(一部抜粋) 音声ウェブ検索 音声コマンド入力 音声運転案内 音声翻訳 など 音声サービスをはじめ、最近ではChatGPTと組み合わせても利用できるのではないでしょうか。 また、Web標準APIとして提供されているためサービスへのAPIコールも不

    WebSpeechAPIを利用してWebブラウザで音声認識を行う
    tetsu040e
    tetsu040e 2023/05/06
  • 検索が爆速になるデータベース設計を公開します

    こんにちは。エンジニアの谷井です。 フォルシアでは、Spookと呼んでいる技術基盤を用いて、主に旅行業界やMRO業界に対して、膨大で複雑なデータを高速検索できるアプリケーションを提供しています。 今回はその高速検索のノウハウのうち、特にDBの扱いに関連する部分について、ベテランエンジニアへのインタビューを通してそのエッセンスをまとめてみました。 一般的なベストプラクティスだけでなく、検索性能を高めることに特化しためずらしいアプローチもあるので、ぜひご覧ください。 フォルシアにおける検索DBについて まず前提としてフォルシアで扱うデータについて軽く説明します。 扱うデータの複雑さ たとえば、旅行会社向けのアプリケーションであれば、宿泊素材の情報としては ホテルの情報「〇〇ホテル」(~約2万件) プランの情報「朝付き・ロングステイ△△プラン」(0~1500件/施設) 客室の情報(~100件/

    検索が爆速になるデータベース設計を公開します
    tetsu040e
    tetsu040e 2023/04/29
  • カーディナリティは低いが、インデックス効果がありそうなパターンの検証 - Qiita

    はじめに カーディナリティとは、あるカラムにおいて、取りうる値の種類の事です 例えば、性別の場合 男性 女性 不明 3種類とすると、カーディナリティは「3」になる。 この場合は、カーディナリティは低いと表現されます B-treeインデックスを作成する際には、一般的にはカーディナリティが高いカラムを指定します。 例えば、性別のようなカーディナリティの低いカラムの場合。 データの比率が同じの場合において、インデックスに絞り込めるのは1/3程度なので、インデックスの効果は薄いと考えられます。 しかし、データ比率が極端に異なる場合。 インデックスが効果を発揮する場合もあるようなので、検証していきたいと思います 環境 mysql Ver 8.0.32 フラグのデータ数に偏りがある場合の検証 インデックスあり CREATE TABLE tests ( id INT PRIMARY KEY AUTO_I

    カーディナリティは低いが、インデックス効果がありそうなパターンの検証 - Qiita
    tetsu040e
    tetsu040e 2023/03/26
  • ソフトウェアエンジニアとしての能力を高める方法について考えてみた - joker1007’s diary

    早朝の寝る前ぐらいの時間にぼやっと下記の様なツイートしたらちょっと反応を貰ったので、取り留めは無いが自分なりに考えていることを書いてみる。 人を育てるのも仕事の内というのは完全にその通りなんだが、そこにドキュメントやがあるから読みます、触って作ってみます、生きたコードを読みます、以外に学ぶ方法なんかねえし、知らねえよ。ただやればいいだけの事に説明も何も無いんだよな……。マジ分からん……。— joker1007 (アルフォートおじさん) (@joker1007) March 2, 2023 タイトルは雑に書いたけど、能力を高めるというと範囲が広過ぎるので、技術的な意味でできる事が増える、ということをテーマとして話をしていこうと思う。基的に自分の考え方の話なのでそこは御留意ください。 ツイートした通りで、状況や対象に依って割合は変わるかもしれないが基的にそのためにやることは3つしかないと

    ソフトウェアエンジニアとしての能力を高める方法について考えてみた - joker1007’s diary
    tetsu040e
    tetsu040e 2023/03/06
    近くに詳しい人がいて教えてもらう機会があるならそれが一番手っ取り早いけど、そうでないならこの方法しかないかな。 これができるのもソフトウェアエンジニア冥利につきるとも言える。
  • コンテナクエリ @container が全ブラウザ対応。新時代のレスポンシブ対応を完全理解する

    日(2023/2/14)、ついに Firefox でコンテナクエリ(container query)に対応しました。Chrome・Edge・Safari はすでに現行ブラウザで対応済みのため、全ブラウザにてコンテナクエリが使えることになります💐 従来、レスポンシブ対応でレイアウトを変えるには @media を使ってウインドウサイズを基準にするかありませんでした。コンテナクエリ @containerを使うと任意の要素を基準にできるので、「A要素の横幅が 500px 以下のとき、子要素のレイアウトを変える」などが手軽に実現できます。 とくにコンポーネントベース開発が主流の現在においては、コンテナクエリをマスターすることで、より柔軟でラクなレスポンシブ対応が可能になります。 記事では、コンテナクエリの基、メリット、デモまでをできるだけ詳しく解説し、コンテナクエリを理解することを目標としま

    コンテナクエリ @container が全ブラウザ対応。新時代のレスポンシブ対応を完全理解する
    tetsu040e
    tetsu040e 2023/02/15
  • IT業界で生き抜く人の特徴 - orangeitems’s diary

    ふと気づいたら、私は日々コンピューターに囲まれている。物理的にパソコンやスマートフォンだけでもたくさんあるが、仕事ではクラウドを扱っていて、多数のサーバーを受け持っている。毎日会話する人間より、コマンドを叩いているサーバーの数のほうが断然多い。 小学二年生のときに、親が気まぐれで買ってきたパソコンを手に入れたときから、きっと方向性は決まっていて、コンピューターのことが心底好きなんだと思う。そのころはコンピューターに触るのも大変で、大人になったらたくさんパソコンを触りたいという夢は、完全にかなっている。 あるサーバーエンジニアに関する記事を見た。コマンドを覚えるのが大変で病んだのだとか。そりゃコマンドだけで言えば世の中には無数にあって、すべてをソラで入力できるようになるのはそりゃ大変だろう。私もほんの一部しか記憶にはない。 でも、そんなに頭の中に記憶してなくたって、一度使えばどんなコマンドか

    IT業界で生き抜く人の特徴 - orangeitems’s diary
    tetsu040e
    tetsu040e 2023/01/20
  • console.log()だけのデバッグはやめよう

    はじめに フロントエンドのWeb開発においてconsole.log()というのは非常によくお世話になります. しかしconsoleオブジェクトにはには他にもたくさんのインスタンスメソッドがあり,それらを使わずに開発を行うのは少しもったいないです. この記事では様々な機能を紹介していき明日から開発で使用していただければ嬉しいです. assert console.assert()は第一引数に論理式をとり,第二引数以降には任意のオブジェクトを取ります. 第一引数がfalseとなった場合,第二引数をコンソールに出力します. サンプル // assert const wishToSuccess = () => { return Math.random() < 0.5 } console.assert(wishToSuccess(), "失敗しました") 出力 log 一般的にログを出力するconso

    console.log()だけのデバッグはやめよう
    tetsu040e
    tetsu040e 2023/01/19
  • ES2022で追加された便利そうな機能

    const array = [1,2,3] console.log(array.at(-1)) // 3

    ES2022で追加された便利そうな機能
    tetsu040e
    tetsu040e 2023/01/19
  • 【Go】値レシーバとポインタレシーバについて

    はじめに Goでメソッドを宣言する際、レシーバには値レシーバとポインタレシーバがあります。 この記事では、この2つのレシーバの挙動について検証しています。 値レシーバの挙動 値レシーバの挙動については、つぎのコードを例に確認します。 package main import "fmt" type Human struct { Age int } func (h Human) PrintAge() { fmt.Println(h.Age) } func (h Human) SetAge(age int) { h.Age = age } func main() { h := &Human{Age: 20} h.PrintAge() // => 20 h.SetAge(30) h.PrintAge() // => 20 } このコードでは、h.SetAge(30)を呼んだ後にh.PrintAge(

    【Go】値レシーバとポインタレシーバについて
    tetsu040e
    tetsu040e 2023/01/19
  • 【Go】for rangeで要素の値が変更されない理由と対処方法

    はじめに Goのスライスなどをfor rangeループさせて、要素の値を変更しようとしたときに、コードの書き方によっては値が変更されない場合があります。 この記事では、その理由と対象方法についてまとめています。 値が変わらない理由 値が書き換わらないコードの例をつぎに示します。 func main() { s := []int{1, 2, 3} fmt.Println(s) // [1, 2, 3] for _, i := range s { i += 1 } fmt.Println(s) // [1, 2, 3] } このコードは、スライスをfor rangeで回すときに値をインクリメントしていますが、ループを終えた後の結果は、変更前と同じままです。 この理由は、スライスの各要素と、for rangeで登場する変数のアドレスを見るとわかります。 func main() { s := []

    【Go】for rangeで要素の値が変更されない理由と対処方法
    tetsu040e
    tetsu040e 2023/01/16
  • 非同期処理とPromise/async awaitについて備忘録

    最近は外部のAPIからデータを取得して表示させるみたいな処理を書く機会が多いため、改めてJavascriptの非同期処理について復習していきたいと思います。 非同期処理とは? jsの処理の流れとして、同期処理と非同期処理があります。 同期処理はjsのコードが上から順番に漏れなく実行されます。 Aの処理が終わったらBの処理を実行する、Bの処理が終わったらCの処理を実行するといった感じです。 一方で非同期処理では、処理が完了していなくても次の処理に進めるようになります。 例えばfetchメソッドは非同期通信でリクエストを発行し、レスポンスを取得できるものですが、レスポンンスが返ってきて処理が完了する前に、次の処理が実行されます。 API通信などは処理が重たく、完了を待っていたら後ろの処理も遅れるため結果的にサイトのスピードが遅くなります。それを防ぐのメリットが非同期処理にはあります。 非同期処

    非同期処理とPromise/async awaitについて備忘録
    tetsu040e
    tetsu040e 2023/01/15
  • DeNAでのセキュリティチェックから分かるゲーム開発で作りがちなチートの穴 | BLOG - DeNA Engineering

    こんにちは、技術統括部セキュリティセキュリティ技術グループの小川です。 今回は Shibuya.gamesec #2 にて発表した内容について、ブログ上で紹介していきたいと思います。ゲーム開発者の方がどのようなことに気を付けて開発をすると良いか、参考になれば幸いです。 DeNA におけるリリース前のチート・脆弱性診断 DeNA ではサービスの新規リリースやアップデートを行う前に、セキュリティ部がコードレビュー等を含むチート・脆弱性診断を行っています。公開する前に「その内容を世の中に出して安全か」を確認し、危険な箇所があれば指摘、安全な状態にしてからリリースをしています。 ここでは、このセキュリティチェックで過去発見・修正した脆弱性について集計し、どのような脆弱性がありがちかに触れていきます。集計対象はゲームアプリ・サーバーに関する脆弱性に限ります。しかし、一般的な統計情報として利用するた

    DeNAでのセキュリティチェックから分かるゲーム開発で作りがちなチートの穴 | BLOG - DeNA Engineering
    tetsu040e
    tetsu040e 2023/01/13
  • フロントエンドとSPA職人の目指したものの歴史と概略

    年末年始にフロントエンド論みたいな記事をいくつか見たが、僕ら古のSPA職人がやってきたフロントエンドという職域と目指していたものが失伝しかけている気がするので、ここに時代ごとに何を考えていたか、雑に書き殴る。 注意点として、 2004から始まるが、自分がプログラミングを始めたのが2010, 業務としてコードを書き始めたのが 2012 なので、解像度が高いのはそれ以降になる。 tl;dr 2004: 動き出す HTML 2011: 構造化のはじまり 2015: 贅沢品としてのSPAとコミュニティ分化 2017: 貧者のSPA 2019: 守破離としてのパフォーマンス 2004: 動きだす HTML AJAX の時代。要は XMLHTTPRequest で取得したコンテンツに応じて、動的書き換えをDOM書き換えを行うこと。今では名付けるほどでもない操作だが、HTMLが静的なものをやめたことは、

    フロントエンドとSPA職人の目指したものの歴史と概略
    tetsu040e
    tetsu040e 2023/01/06
    パフォーマンスが蔑ろにされがちなのはわかる気がする
  • 機能は追加すればいいというものではない

    みなさん、新機能は好きですか。ソフトウェアへの機能追加は、ユーザ目線で単純に考えると「できることが増えていくのでよい」という響きを帯びています。しかし実際は、長く使われるソフトウェアであればあるほど、新機能を追加すべきかどうかはものすごく気を使って決めるものであって、やればいいというものではないのです。この記事の目的は、新機能の追加には細心の注意が必要だとわかってもらうことです。おもな対象読者はソフトウェアを長期間メンテしたことがないかたがたです。 みなさんが使っているOSSに新機能を追加するPRを送った場合を考えてみましょう。ここで重要なのは、PRが送られてきたメンテナやコミッタといわれるコア開発者たちの立場になって考えることです。彼らの役割は、自分たちを含むユーザがそのソフトウェアを使い続けられるようにメンテし続けることです。このメンテのコストに注目すると、機能追加は基的にコストを上

    機能は追加すればいいというものではない
    tetsu040e
    tetsu040e 2023/01/03
  • Bulk insertでも20時間以上かかっていたMySQLへのインサート処理を1時間以内にする - エムスリーテックブログ

    この記事はエムスリー Advent Calendar 2022の30日目の記事です。 前日は id:kijuky による チームメンバーのGoogleカレンダーの休暇予定一覧をスプレッドシート+GASで作った でした。 AI機械学習チームの北川(@kitagry)です。 今回はMySQLへのインサートを20倍以上高速化した話について書きます。 仕事をちゃんとしてるか見張る TL; DR はじめに 今回のテーブル バイナリログを無効化する 追試 LOAD DATA INFILE 追試 テーブルの正規化 インデックスを一時的に剥がす まとめ We are hiring!! TL; DR バイナリログをオフにする LOAD DATA INFILEを使う インデックスを一時的に消す はじめに AI機械学習チームではサイトトップからアプリに至るまで多くの推薦システムがあります。 そこでは推薦ロ

    Bulk insertでも20時間以上かかっていたMySQLへのインサート処理を1時間以内にする - エムスリーテックブログ
    tetsu040e
    tetsu040e 2022/12/30
  • 好きなの使って他のをけなさない - 覚書

    私が生業とするソフトウェア開発において、OSやコードエディタやプログラミング言語など、様々なソフトウェアを使います*1。これらについて私が使っているものを理由付きで書くと次のようになります。 OS: Ubuntu 22.04 細かい設定をしなくてもそれなりに使える。よく普及しているから色々な情報を得やすい コードエディタ: VSCode 細かい設定をしなくてもそれなりに使える。Remote SSH extensionを使ったリモートマシン上での開発が楽 プログラミング言語: 主にGo 使い慣れているから。システムプログラムをするから。覚えやすいから これらにそれなりの愛着はあるものの、今後置かれる状況によって、どんどん変わってくるでしょう。じっさい10年くらい前はGoはほとんど使っていなくて、Cプログラマでした。 私はこんな感じですが、中には特定のソフトウェアに愛情を注ぐ人もいます。それ自

    好きなの使って他のをけなさない - 覚書
    tetsu040e
    tetsu040e 2022/12/27
  • CSSの100vhがスマホで高さいっぱいにならない問題はこれで解決! CSSの新しいビューポート単位の使い方と注意事項

    先日リリースされたChrome 108で、CSSの新しいビューポート単位(svh, lvh, dvhなど)がサポートされました。SafariとFirefoxではすでにサポートされていましたが、Chromeでもサポートされたのは朗報です。 この新しいビューポート単位の基的な使い方と注意事項を紹介します。 The large, small, and dynamic viewport units by Bramus 下記は各ポイントを意訳したものです。 ※元サイト様のライセンスに基づいて翻訳しています。 はじめに おさらい: ビューポートとその単位 新しいビューポート単位の必要性 注意事項 リソース はじめに 先日リリースされたChrome 108で、動的なバーがあるスマホのビューポートを考慮したCSSの新しいビューポート単位がサポートされました。SafariとFirefoxではすでにサポート

    CSSの100vhがスマホで高さいっぱいにならない問題はこれで解決! CSSの新しいビューポート単位の使い方と注意事項
    tetsu040e
    tetsu040e 2022/12/09
  • なんでも知っている職場の Oracle は何でも知ってるわけではなかった話|牛尾 剛

    私は大手のクラウドプロバイダーで開発者をしているが、職場に 同僚からOracle (なんでも知ってる人) と言われる Bala という人がいる。実際に、彼に質問をすると、会社のシステムの細かいふるまいについても答えてくれる。いつも、ほんまに知ってるだけでも凄いけど、どうやって記憶しているのやろうとも思っていた。 質問に備えて自分でコードポインターとかの情報や、Spec を整理しているのだろうか? Bala の実態が判明した日私はリモートワークよりも出勤好きなので、毎日会社に来ている。Balaも最近は3時以降ぐらいから毎日きている。あるとき、立ち話をしているときに、「このコンフィグってどこにも説明ないけど、どういう意味か知ってる?」ってめっちゃ気軽に質問した。雑談のついでで、「知ってたらラッキー」ぐらいの感じだ。 すると、Bala は自分のデスクの方に歩いて行って、巨大なリポジトリを検索して

    なんでも知っている職場の Oracle は何でも知ってるわけではなかった話|牛尾 剛
    tetsu040e
    tetsu040e 2022/10/30
  • mysql8でspatial indexを効かせるためにはSRIDを統一しておく必要があるかもしれない話 - Qiita

    総論 spatial index効かせたかったら列にSRIDをつけろ GISを使って地図情報を扱ったり近傍検索したり mysqlは8になってGIS関連が超パワーアップしたと聞いて。 MySQLGIS機能がやってきた~MySQL8.0最新情報~@OSC2018北海道 MySQL 8.0で強化されたGIS機能のご紹介:「FOSS4G 2018 Hokkaido」での発表資料 準備 何はともあれ環境作成 [qyen@mullet mullet]$ mysql --version mysql Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL) CREATE TABLE `locations` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varcha

    mysql8でspatial indexを効かせるためにはSRIDを統一しておく必要があるかもしれない話 - Qiita
    tetsu040e
    tetsu040e 2022/10/12