タグ

ブックマーク / qiita.com (674)

  • go generate のベストプラクティス - Qiita

    概要 Go 言語におけるコード生成 (go generate) について、自分の中でベストプラクティスと思えるものが増えてきたので、ここでまとめて紹介してみたいと思います。 2020/05/30 初版 2020/06/03 次の節を追加 マップを元データとするときは要素の出力順をソートする 使用するコードジェネレータのバージョンをモジュールに記録する 2020/06/03 次の資料を公開 go generate 完全入門 (プログラミング言語Go完全入門 質問会 発表資料) wtz.go と time について go generate のベストプラクティスを説明するにあたり、この記事では wtz.go と time の 2 つのライブラリを実例としてとりあげます。 wtz.go は筆者が Go 標準ライブラリの time の Windows ランタイム部分を参考にして作成したもので、 Wi

    go generate のベストプラクティス - Qiita
  • Unikernelな情報 (in Japanese) - Qiita

    はじめに 「Unikernelって知ってますか!?」という質問を日で(というか海外でも)聞くとだいたい「知らない」と冷たい回答が返ってくるので、啓蒙活動の一環としてこの記事を書いてみることにしました。 サーバ仮想化用ハイパバイザの中の人のおしごとに就いて5年くらい経った頃、「次の面白いネタは何かなぁ」と探していたらフラッとUnikernelの話が一部の界隈で盛り上がり始めたのが2016年前半。 そこからずっと、「将来のコンピューティングスタイルを変えるのはUnikernelだね」と超個人的に熱い視線を注ぎ続けています。 Unikernelとは ちょっと"Unikernel"とググると、英文で結構記事が出て来ます。よく目にする記事は「2016年1月にDocker社がUnikernel Systems社を買収した」という内容で、有名な企業がUnikernelという技術に注目し始めたという点で

    Unikernelな情報 (in Japanese) - Qiita
  • メインフレームの異常処理 - Qiita

    はじめに この記事では、メインフレームでは異常時の処理でどのようなことをやっているのか、また、Linuxの異常処理との違いなどについて話してみようと思います。 この記事を書くに至った直接的なきっかけは、とある人からリクエストがあったからです。が、日ごろからメインフレームの異常処理の考え方については、PCサーバーやクラウドによるシステムがメジャーになった現代であっても、参考になることは多いと感じていてはいました。 筆者は今でこそLinux Kernel周りの仕事をしていますが、20年ぐらい前のころはメインフレームのOS開発部隊に配属されていて、メインフレームのとあるコプロセッサのドライバを書いたりしていました。この際、その異常処理における考え方を体験する機会が多々あり、当時のその経験が20年後の現在でも大いに役にたっていると感じていたからです。 そもそもメインフレームは、これまで長年にわたっ

    メインフレームの異常処理 - Qiita
  • GolangのdiffMatchPatchライブラリで行単位diffをする - Qiita

    diff-match-patch便利ですよね? これで行単位のdiffを出そうと思ったんですが、APIのリストとにらめっこしてもわからなかったのですが、検索したら大Google謹製の方のWikiにあったので、実装のメモです。 import "github.com/sergi/go-diff/diffmatchpatch" func lineDiff(src1, src2 string) []diffmatchpatch.Diff { dmp := diffmatchpatch.New() a, b, c := dmp.DiffLinesToChars(src1, src2) diffs := dmp.DiffMain(a, b, false) result := dmp.DiffCharsToLines(diffs, c) fmt.Println(result) return resu

    GolangのdiffMatchPatchライブラリで行単位diffをする - Qiita
  • QtでGitHubのような差分を出力する - Qiita

    Diffの計算はそれこそ論文が書けてしまうような難しいコンピュータサイエンスなんですが、かっこよく表示するのもちょっと工夫しないと難しかったりします。多くの人が見慣れている、GitHubのような差分をQt上で表示するウィジェットを作ってみました。コードはQt依存なところもありますが、考え方は他のコードに移植できると思います。 Diff-Match-Patchを使ってみた→失敗 まず最初に使い慣れたDiff-Match-Patchを使ってみようと思いました。僕はGo版を使い慣れていて、なおかつオリジナル実装にはQtを使ったC++用のライブラリが入っている。 ですが、普通にやってみたら、以下のようにうまくいきませんでした。適当に"log"という行を足してみた結果です。 "log"という行だけの差分になってほしいのに、前の行の末尾のダブルクオートを巻き込んだdiffが取れてしまっています。前の行

    QtでGitHubのような差分を出力する - Qiita
  • Python: Queue に型を付ける - Qiita

    皆さん、普段 Python でコードを書くときはちゃんと型を書いてますよね? まだ型の書き方を知らない場合は Software Design 2020年 5月号の『Python でも型チェックしよう』を読むといいと思いますよ (宣伝)。 レビューのお手伝いをした『Python でも型チェックしよう』(by @t2y)が掲載されているSDが発売されました。型ヒントを使ってみたい方におすすめです。また、3.8で導入された Protocolなども紹介されており、すでに使っている方にもお勧め! / Software Design 2020年5月号 https://t.co/JL5GgO0mcq — tk0miya (@tk0miya) April 18, 2020 私はコードに型をつけ始めておおよそ 3年ぐらいになるのですが、いまでは型がないと落ち着かなくなっています。 コード規模がある程度大きく

    Python: Queue に型を付ける - Qiita
  • H.265/HEVC特許暗黒時代 - Qiita

    TL;DR 暗黒時代。H.265/HEVCの未来はさほど明るくない。 免責事項 記事ではH.265/HEVCに関する知的財産のみを取り上げるため、その技術論には一切言及しません。 H.265/HEVCコーデック特許問題をとりまく状況は、関連する企業・団体の動向により大きく左右されます。 公知情報のみに基づくよう努力していますが、記述内容の正しさについて保証するものではありません。 特許プールとライセンサー企業・団体 2017年6月現在、少なくとも 3つの特許プール と 1つの企業 が特許権を行使しています。 これは、H.265/HEVCコーデックの利用者は 少なくとも4つの特許プール・企業と個別に契約し、それぞれに対して特許使用料を支払う 必要があることを意味します。また、明らかに関連特許を保持していると考えられるものの、現時点では権利行使の態度を明らかにしていない企業も存在します。 H

    H.265/HEVC特許暗黒時代 - Qiita
  • PEP 585 (Type Hinting Generics In Standard Collections) を読んだよメモ - Qiita

    PEP 585 (Type Hinting Generics In Standard Collections) を読んだよメモPythonPython3mypypep __origin__ という属性がどこからやってきたのを調べていたところ、 PEP 585 -- Type Hinting Generics In Standard Collections という PEP を見つけたので、来の目的を忘れて流し読みしてました。まだ Draft ステータスですので、今後採用されるかどうかはわかりませんが、自分の理解をメモに残しておきます。 概要 これまでの型アノテーションでは、コレクションを表現するのに専用の型を使っていた (typing.List や typing.Dict など) コレクションの実装クラスと型クラスを統合し、標準のコレクションクラス(list や dict など)で型アノテ

    PEP 585 (Type Hinting Generics In Standard Collections) を読んだよメモ - Qiita
  • PythonでPDFファイルのテーブルデータを読み取る - Qiita

    PDFデータ 世の中の人はPDFが大好きなようで、嫌い嫌いと言っていても扱わざるを得ません。しかし、それに何時間もかけるのはちょっと・・・と思うのが人の常です。PDFの表データをしかないというケースもありますが、そのような際に便利なtabula-pyという超便利なライブラリがあったのでメモしておきます。 https://github.com/chezou/tabula-py tabulaにかんして tabulaはPDFの表を抽出するためのJavaのライブラリです。tabula-pyはそのラッパとなっております。そのため、利用するためにはJavaのインストールが必要です。 Javaをインストールした後、下のようにするとPythonのライブラリが利用できます。

    PythonでPDFファイルのテーブルデータを読み取る - Qiita
  • effective java 3rdまとめ - Qiita

    Effective Java 3rdの内容をまとめていく。 2章 オブジェクトの生成と消滅 Item 1~9 3章 全てのオブジェクトに共通のメソッド Item 10~14 4章 クラスとインターフェース Item 15~22 Item 23: Prefer class hierarchies to tagged classes Item 24: Favor static member classes over nonstatic Item 25:Limit source files to a single top-level class 5章 ジェネリクス Item 26: Don't use raw types Item 27: Eliminate unchecked warnings Item 28: Prefer lists to arrays Item 29: Favor gen

    effective java 3rdまとめ - Qiita
  • てめえらのRailsはオブジェクト指向じゃねえ!まずはCallbackクラス、Validatorクラスを活用しろ! - Qiita

    てめえらのRailsはオブジェクト指向じゃねえ!まずはCallbackクラス、Validatorクラスを活用しろ!RubyRails ちょっと煽り気味のタイトルにしてみましたが、Railsで開発する時は意識的にOOPに寄せないとオブジェクトの力が活かせなくなるよってことと、Railsが提供しているクラスの責務を分割することを支援してくれる機能について話をします。 ActiveRecordの性質 Rails開発においては、モデル層にロジックを書いてコントローラーは薄くしろ、というのはしつこく言われているので、概ね浸透してきていると思います。 それに加えて、最近私が結構しつこく主張しておきたいのが、モデル = ActiveRecordでは無いよ、ということです。 ActiveRecordは成り立ちから言うと、ロジックとDBへの永続化をまとめてカプセル化するアーキテクチャパターンから来ています。

    てめえらのRailsはオブジェクト指向じゃねえ!まずはCallbackクラス、Validatorクラスを活用しろ! - Qiita
  • 2020年20年目を迎える IE6 に対応した SPA を TypeScript で作る - Qiita

    現況 Internet Explorer 6 は 2001/8/27 にリリースされまして、ブラウザシェアは現在 0.01% となっております。 ちなみに2年前に調べた時は0.1%強だったのでかなり減っています。 使ったもの Lang: TypeScript UI: Hyperapp v1 i18n: i18next HTTP client: jQuery 1 CSS: Cascade Framework Icon: Material design icons Hosting: Google App Engine IE6 に対応することとは IE6 環境を用意する TypeScript を ES3 ベースに独自の実装を加えた JScript に変換する バージョン毎に実装が異なるスタイルと向き合う Web API を JSONP で作る TLS 1.0 に対応したサーバに設置する というこ

    2020年20年目を迎える IE6 に対応した SPA を TypeScript で作る - Qiita
  • 高階関数は何であるかを簡潔に説明する - Qiita

    はじめに なんか、高階関数で、一部界隈が盛り上がっているぽいので、なんとなくエントリを書いてみました。一言で言うと、「関数を引数に取る関数」あるいは「関数を返り値とする関数」が、高階関数と呼ばれます。それだけです。 あとは、各言語で、引数や返り値になれるような「値としての関数=第一級関数」をどのように実現するかが問題になります。ここで、「関数を引数に取る」というのは、「値としての関数」を引数に取る、という意味であることに注意してください。 というわけで、以降、いくつかの言語で、第一級関数をどのようにして表現しているかについて述べてみたいと思います。他にも方式があると思いますが、ツッコミ歓迎。 いわゆる「関数型プログラミング言語」の場合 多くの「関数型プログラミング言語」では、「関数」それ自身がプリミティブでかつ値なので言うまでもないのですが、いくつか例を挙げます。 たとえば、Schemeで

    高階関数は何であるかを簡潔に説明する - Qiita
  • NewSQLのコンポーネント詳解 - Qiita

    4.2.1 Shardingの手法 先ほどの表1を理解するにはSharding手法の列にあげられた各用語の理解が必要となる。 YugaByteDBのブログ「Four Data Sharding Strategies We Analyzed in Building a Distributed SQL Database」には、非常に詳しくShardingの手法が紹介されている。この記事では、大きく以下4つの分類があるという。 Algorithmic Sharding (例: Memcached/Redis) Linear Hash Sharding (例: 過去のCassandra) Consistent Hash Sharding (例: DynamoDB、Cassandra) Range Sharding (例: Spanner、HBase) 詳細は割愛するが、1つ目のアルゴリズム・シャー

    NewSQLのコンポーネント詳解 - Qiita
  • Python標準実装より速い!?Oracleが作ったGraalPythonをJython・CPythonとベンチマークしてみた!! - Qiita

    Python標準実装より速い!?Oracleが作ったGraalPythonをJython・CPythonとベンチマークしてみた!!Pythonoracleベンチマークgraalvmgraalpython GraalVM・GraalPythonとは GraalVMは2018年4月27日にOracleから公開された仮想マシンです. GraalVM is a universal virtual machine for running applications written in JavaScript, Python, Ruby, R, JVM-based languages like Java, Scala, Clojure, Kotlin, and LLVM-based languages such as C and C++. GraalVMJavaScript,Python,Ruby,R

    Python標準実装より速い!?Oracleが作ったGraalPythonをJython・CPythonとベンチマークしてみた!! - Qiita
  • OpenJDKと各種JDKディストリビューションの情報源まとめ #minjava - Qiita

    はじめに この記事は、2020年3月13日に正式出版された共著『みんなのJava』タイアップ企画としてお送りします。 英語版の記事は「Summary of information about OpenJDK and JDK Distributions」を参照ください。(リンク先も若干異なる箇所があります。) 【新刊】2020年3月13日発売『みんなのJava OpenJDKから始まる大変革期!』体2,280円+税、きしだ なおき、吉田 真也、山田 貴裕、蓮沼 賢志、阪田 浩一、前多 賢太郎 著 Javaの変化を一気にキャッチアップ! https://t.co/ec8tnNF3g7 pic.twitter.com/IMEhI3w989 — 技術評論社販売促進部 (@gihyo_hansoku) February 21, 2020 簡単に紹介したときのブログ記事はこちらですが、私の担当した2

    OpenJDKと各種JDKディストリビューションの情報源まとめ #minjava - Qiita
  • 証明書300万件を強制失効。Let's Encrypt に一体何が起きたのか? - Qiita

    無料 SSL の認証局である Let's Encrypt は、有効な証明書のうち 2.6% に当たる300万件の証明書に対し、2020年3月4日に失効手続きを行うと宣言しました。しかもその事がユーザーに通知されたのは失効手続きの数時間前です。一体、Let's Encrypt に何が起きたのでしょうか? 私が調べた事を共有したいと思います。 この記事は Let's Encrypt の証明書失効に関する一連の出来事についてまとめた物です。今回の失効処理の対象となっているかどうかの確認方法等については、以下の記事をご覧下さい。 Let's Encrypt に重大なバグが発覚。該当サイトは2020/3/4 までに対応が必須 更新しました(2020/3/7) 影響の度合いについての記載が正しくなかったので修正 現在の Let's Encrypt の見解が正しくなかったので修正 何が起きているのか?

    証明書300万件を強制失効。Let's Encrypt に一体何が起きたのか? - Qiita
  • Kafka StreamsのWindowStateStoreを利用した集計処理で未来のタイムスタンプを扱う際の危険な罠 - Qiita

    Kafka StreamsにはWindow Aggregationという仕組みがある。 特定の時間間隔毎にイベントの数を数えたり等を行うための機能だ。 で、それを利用してユーザー毎のイベント実行回数をカウントする処理を書いていたのだが、何故か結果が合わない。 テストコードでは再現しないし確率的に結果がズレるという状況が発生した。 物凄くハマったが、原因は未来のtimestampが来た時の処理にあった。 検証バージョン kafka-streams-2.4.0 問題の詳細 一度書き込んでバックエンドのKafkaトピックまでデータが届いているにも関わらず、データを再度取得しようとした時に既存の集計カウントが取得できない。 そのためカウントがリセットされるし、他の箇所でも結果が取得できない状態になっていた。 確実にput処理は行われている 紐付いているKafkaのトピックには確実にデータが届いてい

    Kafka StreamsのWindowStateStoreを利用した集計処理で未来のタイムスタンプを扱う際の危険な罠 - Qiita
  • COVID-19のデータでネットワーク図を作成した。 - Qiita

    はじめに 厚生労働省のCOVID-19の感染状況のデータを基に、グラフやネットワーク図、データテーブルを作成し、Webアプリケーション化しました。作成したアプリは下のリンクのものとなります。 アプリリンク: https://chomoku.herokuapp.com/covid-19 下はネットワーク図の画面です。 利用しているデータは厚生労働省のサイトから取得しています。スクレイピングといっても、pandasのread_html関数を使っているだけです。下のgithubからも取得できますが、後述するようにアプリからも取得できます。 今回アプリを作成したきっかけは、東洋経済さんの可視化を見て、自分ではこういうところを見てみたいなと思うところがあったのがきっかけでした。 アプリはタブでページが切り替えられ、次の3つの部分に分かれます。 1つ目は普通のグラフを表示するページ。 2つ目がネットワ

    COVID-19のデータでネットワーク図を作成した。 - Qiita
  • Rust のエラーまわりの変遷 - Qiita

    Rust LT #6 で発表したスライド Error トレイトについて std::error::Error トレイトとは 2014 年 10 月 にRFC 入りしたトレイト (rfcs#201) Rust 1.0 の半年前 Box<dyn Error> として使うことを想定 Error トレイト こんなの pub trait Error: Debug + Display { fn description(&self) -> &str; fn cause(&self) -> Option<&dyn std::error::Error>; }

    Rust のエラーまわりの変遷 - Qiita