サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
qiita.com/yohhoy
参考資料 次期C標準 (C23) の内容が固まったらしい cppreference.com - C23 🙇 Q. これはC++の記事というよりも、Cの記事ではないですか? A. 「お前がそう思うんならそうなんだろう お前ん中ではな」 C99言語機能では_Boolキーワードとして導入され、ヘッダstdbool.hによりbool型とtrue/false定数が有効となっていた。C23以降は常にbool/true/falseとして利用可能となる。 ↩ C99言語機能では_Static_assertキーワードとして導入され、ヘッダassert.hによりstatic_assertが有効となっていた。C23以降は常にstatic_assertとして利用可能となる。またC23からC++17同様に第2引数を省略可能となる。 ↩ C99言語機能では_Thread_localキーワードとして導入され、ヘッダt
“こんなゾンビだらけの言語に居られるか!俺は他の言語に出て行くぜ!” -- 行方知れずのプログラマー 🧟Zombie Names📛 C++17標準ライブラリ仕様から「Zombie names」というセクションが追加され、過去バージョンで利用していた識別子(クラス名や関数名など)が予約済みとして列挙されるようになりました。1 ...嘘じゃないよ:https://eel.is/c++draft/zombie.names C互換ライブラリ[C++11で非推奨, C++14で削除] gets バッファオーバーラン脆弱性につながるため、今すぐ利用停止してください。バッファサイズを明示指定するfgets関数で代替可能です。 スマートポインタauto_ptr<T>[C++11で非推奨, C++17で削除] auto_ptr auto_ptr_ref C++11以降はunique_ptrクラスで代替可
C++20 では全C++プログラマ待望[要出展]の「コンセプト(Concepts)」が正式導入されました。 この記事では“入門以前”と称して、C++コンセプトのメリットをざっくりと説明します。詳細な仕様説明は行わないことを予めご了承ください。 後日追記: 2020-12-15付けで国際標準規格 ISO/IEC 14882:2020 としてC++20が正式発行されました。 C++コンセプトって何? 例えば cppreference.com(日本語版) 冒頭では下記のように説明されます。なるほど分からん。言語仕様の説明としては間違いありませんが、これだけでC++コンセプトを理解するのはさすがに難しいでしょう。 クラステンプレート、関数テンプレート、および非テンプレート関数 (一般的にはクラステンプレートのメンバ) は、制約と紐付けることができます。 制約はテンプレート引数に対する制限を指定しま
H.266/VVC(Versatile Video Coding) ITU-T Rec. H.266 Versatile video coding ISO/IEC 23090-3 MPEG-I Versatile Video Coding H.264/AVC および H.265/HEVC の直接後継となる動画像コーデック国際標準規格。 "Versatile"=多用途 とあるように、HD~UHD(4K,8K)解像度をもつSDR/HDR(Standard/High Dynamic Range)動画像、360°パノラマ動画像、Light-fieldカメラ、スクリーンコンテンツまで広範な用途での利用を目指している。 コーデック性能比較 新しい H.266/VVC コーデックは、一世代前の H.265/HEVC コーデックにくらべると1: 同等の客観的画品質(PSNR-Y)であれば、ビットレートを
はじめに C++プログラミングにコンパイルエラーは付き物です。コンパイラからのメッセージに頼らずに、正しいC++プログラムを書き上げることなど不可能です。(ここでは脳内C++コンパイラ搭載型超人の存在は無視します:D) C++標準ライブラリは便利なアルゴリズムを数多く提供しており(通称 "STL")、大部分のC++プログラマはその恩恵を受けています。しかしSTLを駆使したコードのコンパイルエラーは、時として長大で難解なメッセージを出力することがあります。 この記事ではソートアルゴリズムsortを題材にして、現状(C++17)エラーメッセージの問題点を確認し、きたるC++20時代のエラーメッセージを読み解いていきます。 C++17時代のエラーメッセージ 下記ソースコード片をコンパイルすると、どんなエラーメッセージが出力されるでしょう? 注:このコードはコンパイルに失敗します。 #includ
https://mpeg.chiariglione.org/standards/mpeg-5/essential-video-coding 正式名称「MPEG-5 Part 1 Essential Video Coding」 ISO/IEC 23094-1 Essential video coding 特許問題により普及しないH.265/HEVCコーデックの代替を狙った、ライセンス・フレンドリ(licensing-friendly)な動画像コーデック。 目的 ロイヤリティフリー(RF; Royalty-Free)な枯れた技術1のみを用いる Baseline Profile と、特許技術を用いてより高効率を目指す Main Profile という2オプションを提供する。 ロイヤリティフリー・コーデック運用ができるよう、任意の Main Profile 向け符号化ツールは選択的に無効化可能。
Where have all the declarations gone? 某日某所、3人のプログラマの雑談より: Xさん「C言語って関数先頭でしか変数宣言できないから面倒だよねぇ。」 Yさん「何いってんすか、{~}ブロックの先頭ならいつでも変数宣言できるしょ。」 Zさん「いやいや、イマドキのC言語ならどこでも変数宣言できますから。」 さて3名のプログラマのうち、誰の主張が正しいのでしょう?もしかして、過去には彼らが言うような制限も実在したのでしょうか?これってトリビアになりませんか? このトリビアの種、つまりこういうことになります: 「C言語で変数宣言を配置できる場所は ○○」 "C99"(1999年) ~ 現在まで 実際にプログラミング言語Cの言語仕様(Language Specification)を調べてみた。 2019年6月現在のC言語仕様は国際標準規格 ISO/IEC 9899:
template <auto N> auto func(auto x) { auto r = N + x; return r; } // 呼出し例 assert( func<1>(0.5) == 1.5 ); この記事では、C++言語仕様改定により導入された各autoキーワードの役割を説明します。同時に、該当用法が存在しなかった時代でもコンパイル可能なソースコードへの書換えも行います。 C++20時代 C++20では 関数パラメータ型にautoを書ける ようになります。これはC++言語仕様へのコンセプト(Concept)導入とともに追加された、関数テンプレート定義の短縮記法 です。
低レイテンシ(low-latency)で計算コストの小さい(lightweight)、視覚的ロスレス(visually lossless)品質のデジタル静止画像圧縮技術(コーデック)。 特徴と応用先 JPEG XSコーデックの特徴は下記の通り: 最大解像度: 8K フレームレート: 24 ~ 120fps 色空間: RGB, YCbCr(YUV)系 品質劣化の小さい視覚的ロスレス 圧縮率 1/2 ~ 1/6 で7回の反復エンコード後 [IIS-INTRO] 軽量な画像処理のため低消費電力 低レイテンシなエンコード/デコード処理 処理レイテンシ=32ライン未満 [IIS-INTRO] 比較的簡易なアルゴリズムのため実装が容易 小さなASIC/FPGAハードウェア実装面積 SIMD命令やGPU利用による高速なソフトウェア実装 JPEG XSコーデックは、低計算量・低レイテンシが要求されるアプリ
Alliance for Open Media(AOM) により開発されているロイヤリティ・フリー(Royalty-Free)な動画像コーデック「AV1」と、同コーデックにおける特許(Patent)の考え方についての情報収集メモ。 超要約: コーデック仕様 と エンコーダ/デコーダ実装 の ロイヤリティ・フリーを保証する。 この保証が 現在から将来に渡って担保される よう最大限配慮されている。特に 防御的解除 条件により特許訴訟への対抗策が明示されている。 防御的解除=(発端の)訴訟を起こした団体/個人に対して、即時のライセンス解除を発動する。 旧来のMPEG系コーデックとの違い: AV1では 特許ライセンス許諾範囲がエンコード処理を包含する。MPEG系ではデコード処理の必須特許のみが許諾範囲であり、エンコーダ実装には別途での考慮が必要であった。 AV1では 特許ライセンス許諾範囲がエンコ
本記事は「ポインタ/参照とconstキーワードについて、なんとなく分かってきたかも?」という学習ステージの方が、const修飾の役割を イメージできる ような理解を目指しています。 図解(凡例) int val = 123; // 普通の変数 int* ptr = &val; // ポインタ(pointer) int& ref = val; // 参照(reference) const int cval = 45; // 定数(constant) 本記事では、上記C++ソースコードに対応する図示を次のルールで行います。"白色の箱"が普通の変数(cval)やポインタ型変数(ptr)を、"赤色の箱"が定数(cval)を、"黄色タグ"が参照型変数(ref)をそれぞれ表します。箱の中身は、各変数が保持している値に対応します。ポインタ型変数は"差し先変数のアドレス値"を保持しますが、分かりやすさのた
ソース画像ファイル{source}から生のHEVCビットストリームへエンコードし、続いてHEIFファイル形式に格納する。 $ ffmpeg -i {source} -vcodec -pix_fmt yuv420p -codec:v libx265 ¥ -crf 15 -preset placebo -x265-params info=0 -f hevc temp.hvc -y $ MP4Box -add-image temp.hvc -ab heic -new output.heic 上記コマンド中の-crfで画質とファイサイズのトレードオフを制御する。値が小さいほど高画質だがファイルサイズが大きくなり、値が大きいほどファイサイズが小さくなるが画質は劣化する。 HEIFファイルの表示 NokiaによるJavaScript実装を利用すると、既存のWebブラウザ上でHEIFファイルを画像表示で
TL;DR 暗黒時代。H.265/HEVCの未来はさほど明るくない。 免責事項 本記事ではH.265/HEVCに関する知的財産のみを取り上げるため、その技術論には一切言及しません。 H.265/HEVCコーデック特許問題をとりまく状況は、関連する企業・団体の動向により大きく左右されます。 公知情報のみに基づくよう努力していますが、記述内容の正しさについて保証するものではありません。 特許プールとライセンサー企業・団体 2017年6月現在、少なくとも 3つの特許プール と 1つの企業 が特許権を行使しています。 これは、H.265/HEVCコーデックの利用者は 少なくとも4つの特許プール・企業と個別に契約し、それぞれに対して特許使用料を支払う 必要があることを意味します。また、明らかに関連特許を保持していると考えられるものの、現時点では権利行使の態度を明らかにしていない企業も存在します。 H
変換前は画像全体で 180000ビット だったものが、ピクセル値とビット列の対応を変更した だけで 143602ビット へと縮みました。変換前後でのビット量比は 1:1.25 (1÷1.25=80%)、わずか20%ですがデータサイズ削減に成功しました。このとき、デジタル画像を構成するピクセル値は一切変化していませんから、この変換こそが可逆圧縮です!...納得できるまで読み返してくださいね。 ここで使った対応表は、JPEGコーデックでも利用する「ハフマン符号(Huffman coding)」によるものです4。ハフマン符号はエントロピー符号(entropy coding)の一種であり、前節で説明したエントロピーつまり "データの統計的な偏り" を利用した可逆圧縮アルゴリズムです。5 偏ったデータ Is Awesome データ圧縮は魔法ではなく数学ですから、どんなデータでも可逆圧縮できるとは限り
JPEGエンコーダやデコーダは、その入出力データとして画像を取り扱うプログラムです。その実装にあたっては、コンピュータが扱えるよう数値化された画像、つまり「デジタル画像(digital image)」に関する知識が不可欠です。本記事ではJPEGコーデックの理解と、JPEGデコーダ実装に必要となる知識を中心に解説していきます。 画像=波(なみ) あらゆる画像(image)、普段何気なく目に入ってくる風景・人物、書籍やキャンバスに書かれた文字・絵画は、空間的に広がるアナログデータ(アナログ画像)です。簡単のため、まずはモノクロ写真を思い浮かべてください。モノクロ写真のように色彩をもたず濃淡のみで構成される画像は、グレイスケール(grayscale)画像と呼ばれます。 グレイスケール画像は、画像上のそれぞれの位置(X,Y座標)に対する "明るさ(輝度; luminance)1" 情報から構成され
Webを席巻し続ける JPEG(じぇいぺぐ) 画像圧縮。あのJPEGファイルからフルカラー画像へと変換する JPEGデコーダ を、あなたの手で一から作り上げよう!「週刊 JPEGデコーダをつくる」創刊。創刊号は特製バインダー付きで特別定価290円。 …ごめん。ほとんど冗談です。 週1ペースは無理なので不定期、特製バインダーは付きませんし、そもそもお代は頂きません(あ、貰えるならいつでもウェルカム)。全体構想もぼやーっとしかないので何分割するかも未定ですが、少なくとも実装だけは終わっています(後述)。 まえがき 本連載記事では、JPEGファイルからRGB画像データへとデコード処理を行うJPEGデコーダを、既存ライブラリ1を一切使わず フルスクラッチで実装 していきます。このJPEGデコーダ実装とその解説を通じて、JPEGコーデックが用いる 画像圧縮アルゴリズムの理解 を目指します。 この目的
2017年3月にGoogleから発表された新しいJPEGエンコーダ「Guetzli」と、同エンコーダが用いる画品質評価アルゴリズム「Butteraugli」について思うところとか。 Announcing Guetzli: A New Open Source JPEG Encoder GitHub google/guetzli GitHub google/butteraugli 多くのニュースサイトで『Google、JPEGを35%小さくできるエンコーダー「Guetzli」をオープンソースで公開』のようにセンセーショナルに紹介され、またGoogle社の手によるネームバリューもあったのか、世間の強い興味を引いたように思います。OSS方式にてソースコード公開されており、実際にエンコーダを動してみた方による良い/悪い評価結果が出てきています。 この記事では、同エンコーダ作者 Jyrki Alaku
int a = /*...*/; int b = /*...*/; // 変数a, bの値を交換 a ^= b; b ^= a; a ^= b; この記事の1行まとめ:あのC/C++言語もプログラマ・フレンドリに変化しているよ。それでも自分の足を撃ち抜きたくなければ、小賢しいコードは書かないように。 おことわり 本記事は、はてなダイアリーの記事でも利用した draw.io サービスを使ってお絵かきしたい欲求(8割)と、同記事をまとめた後に気づいた内容の整理(1割)と、昨年(2016)のC++ Advent Calendar残り1枠を埋める目的(1割)で書かれました。 このように不純な動機にもとづくため、あまり丁寧な解説を行っていません。特に後半C++11以降の説明では、Cryoliteさんによる一連の連載記事を前提とします。もし未読であれば連載記事を一読してから、本記事に戻られることを強く
本記事は C言語 Advent Calendar 2016 22日目(2週間ぶり3度目) にエントリしています。 当初、12/1で参加した時は4エントリしか参加表明がなかったのに、自転車操業のごとく2度目の参加につながり、気が付いたら25日分全てのエントリが埋まったようです。おめでとうございます。みなさんC言語好きなんですね(?) プログラミング言語Cの sizeof演算子 に関するネタを、基本の"キ"から重箱の隅つつきまで揃えました。1 各話題にはマニアック度(=どうでも良い度合い)を独断と偏見で3段階評価してあります。★が少ないほど広くC言語プログラマに知っておいて欲しい事項(=重要)です。...普通のランキングと逆じゃねーか。 なお本記事の内容は、特に断りがない限りISO/IEC 9899言語仕様(C90/C99/C11)に準じます。また用語の日本語訳はJIS X 3010規格票に合
時は2016年、プログラミング言語Cの言語仕様は2度のメジャーバージョンアップを経て、"ISO/IEC 9899:2011"(通称 C11)にたどり着きました。ところで誰か使ってるの? もちろん、これでC言語の進化が止まったわけではありません。次世代標準 C2x に向けた検討が始まっているのです。C2xリリーススケジュールとして、2021年末までの検討作業、2022年末までの国際標準(IS)発行が予定されています。 C2x憲章 ISO/IEC JTC1/SC22/WG14 N2086 "Programming Language C - C2x Charter"より、プログラミング言語Cの 次世代標準 C2x に向けて、基本原則として考慮される15項目のリストを訳出しました。各項目では冒頭の要約文のみを訳出しているため、詳細について知りたければ原文を参照ください。 オリジナル原則 1. Ex
#include <cstdio> #define NUMBER 42 static void func(int& rv) { int local = rv; if (local == NUMBER) { std::puts("hit"); } else { std::puts("stay"); } } int main() { int v; // indeterminate value func(v); } 答え: gcc 6.1, -O2オプション: stay clang 3.9.0, -O2オプション: hit は?clangなにやってんの? clangの場合、マクロNUMBERを任意の数値にかえたとしても結果はhitになります。 一方のgccは何となく正しいようにも思えますかね? コンパイラのバグだろ? いいえ、C++ソースコードのバグです。悔い改めてください。 変数vは不定値(i
Visual Studio(2010以降)のIDEエディタ内で、コードの一括自動インデントを行うキーボードショートカット。下記キーストロークを順番に入力する。 ファイル全体:Ctrl+K, Ctrl+D 選択範囲:Ctrl+K, Ctrl+F Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up
C#でマルチスレッドのベストプラクティスって何かある?(What are the best practices with multithreading in C#?)C#非同期処理StackOverflowマルチスレッド翻訳 StackExchange/Code Reviewでの質問"Exporting doc types using queues and multithreading"へのEric Lippert氏による回答より訳出。回答内容はオリジナル投稿"What are the best practices with multithreading in C#?"に呼応するため、編集前のタイトルを採用。原文および訳文のライセンスは引用元サイト規約の通り CC-BY-SA 3.0 に従う。 (補足:回答内容のトーンに合わせて口語調かつ意訳気味に訳出しました。誤訳指摘および訳出改善は歓迎
int get_mem6Dmv(MotionVector *******array6D, int dim0, int dim1, int dim2, int dim3, int dim4, int dim5) static int get_mem_bipred_mv(Slice *currSlice, MotionVector ******* bipred_mv) { get_mem6Dmv(bipred_mv, 2, 2, currSlice->max_num_references, 9, 4, 4); return 576 * currSlice->max_num_references * sizeof(MotionVector); }
cppreference.comサイト "History of C" ページ(2015年12月時点)より訳出。1 本文書は訳出元に準じたCC BY-SA 3.0ラインセンスとする。 補足:"TR"は技術報告書(Technical Report)、"TS"は技術仕様書(Technical Specification)、"Draft"は草案文書の意味。TRとTSの扱いはほぼ同じ。"FP"は浮動小数点(Floating-Point)の略記。 初期のC(Early C) 1969: Unix向けシステムプログラミング言語としてPDP-7アセンブラを置き換えるため、BCPL言語をベースにして、B言語が誕生。 ++と--演算子、複合代入式が追加されるも、BCPL同様に型無し(typeless)言語のまま。 1971: B言語をPDP-11へ移植する際に、NB("new B")が作られる。 型(int、
プログラミング言語Cの特徴ってなんでしょうか?この質問に対して「ポインタ(Pointer)」を挙げる人はそれなりに居るでしょう。…たぶん居るよね。居ることにします。 他のプログラミング言語にもポインタに相当する概念(「参照(Reference)」と呼ばれることが多い)はありますが、とりわけC言語のポインタは難しいと言われること多いようです。時にはこんなコーディング規約を持ち出して、ポインタ使用が禁止されることもあるそうです。 (俺がコードを理解できないから)ポインタの使用は禁止する。 なんだか心の声が漏れ聞こえる気もしますが、そこは大人な対応で迎えましょう。ええまあ、この記事は大人げないんですけど。ルールがポインタを使うなと言うなら、私だってちゃんと従いますよ。*とか&とか危なくて使えませんよね。 準備編 ここから本題。この記事では、プログラミング言語Cでポインタを一切利用しない「ポインタ
#include <iostream> #include <opencv2/opencv.hpp> int main() { const char * const window = "Capture (Press ESC to exit)"; const double scale = 0.75; const int delay = 32; // [msec] cv::VideoCapture cap(0); if (!cap.isOpened()) { std::cerr << "fail to open cv::VideoCapture" << std::endl; return 2; } const double width = cap.get(cv::CAP_PROP_FRAME_WIDTH) * scale; const double height = cap.get(cv::CA
T/O マルチスレッド・プログラミングの文脈では、「データ競合(data race)」と「競合状態(race condition)」は直交した異なる概念を表す1。両者ともに回避すべき事象だが、問題を取り扱うレイヤは明確に区別されるべき。 データ競合(data race)は、マルチスレッド・プログラム実装上の問題である。 競合状態(race condition)は、並行処理システム設計上の問題である。 ここではJava, C#, C++あたりのマルチスレッド対応手続き型ベースのプログラミング言語を取り上げるが、言語パラダイムによらずマルチスレッド処理(共有メモリ型の並行処理機構)ならば広範に適用可能である。また言語仕様として両者を明確に区別するRust言語も取り上げる。 「データ競合(data race)」が何であるかは、それぞれのプログラミング言語仕様にて定義される。競合状態(race c
Rustドキュメントの日本語訳は Rustドキュメント翻訳プロジェクト に移行しました。 http://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/guessing-game.html にてRust 1.6原文に追従した版があります。 Rust 1.0時点の Learn Rust - Guessing Game より訳出。 元ソース:https://github.com/rust-lang/rust/blob/1.0.0/src/doc/trpl/guessing-game.md ライセンス:MIT licenseまたはApache License 2.0, https://github.com/rust-lang/rust/blob/1.0.0/COPYRIGHT 訳者注:Qiita Markdownソ
次のページ
このページを最初にブックマークしてみませんか?
『@yohhoyのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く