タグ

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

  • C言語のカレンダー | Advent Calendar 2017 - Qiita

    About reserved postingIf you register a secret article by the day before the same day, it will be automatically published around 7:00 on the same day. About posting periodOnly articles submitted after November 1 of the year can be registered. (Secret articles can be registered anytime articles are posted.)

    C言語のカレンダー | Advent Calendar 2017 - Qiita
  • D言語くんにもできるRaspberry Piベアメタルプログラミング - Qiita

    今回のソース はじめに D言語のver. 2.076から、-betterCオプションが追加されました。 言語仕様 Blog D as a Better C このオプションを使用すると、druntimeやPhobosはコンパイル時に参照されなくなり、ランタイムライブラリを使用するような機能は使えなくなります。 その代わり、コンパイル時のみで解決できるような機能は制限されません。 つまり、PhobosやC言語の標準ライブラリに依存していないD言語のサブセットを、コンパイラのチェックのもと使うことができます。 これを嬉しく思える人はたぶんごく一部ですが、以下のような場合に該当すると思われます。 OSやドライバなど、ランタイムライブラリを気軽に使用できない部分の実装 マイコンなどの組み込み機器向けのプログラミング リアルタイム性の高い箇所で、GCなどのオーバーヘッドのある言語機能を排除したい場

    D言語くんにもできるRaspberry Piベアメタルプログラミング - Qiita
  • ヘテロジーニアスのマルチコアでパフォーマンスを上げるには - Qiita

    最近、マルチコアでの性能向上についてよく考えている。フューチャーアーキテクト(裏)アドベントカレンダーです。 マルチコアの性能向上の基 マルチスレッドの性能向上というと、アムダールの法則というのが有名で、なにかと引用される。僕のの「Goならわかるシステムプログラミング」でも引用させていただいた。 P は並列化できる仕事の割合、N は並列数です。ある仕事のうち 50% の部分が並列化 可能だとすると、N を無限大にしても(分母の右側の項がゼロになる)、パフォーマン スは 2 倍にしかなりません。90% が並列化可能だとすると、最大で 10 倍になります。 並列化の恩恵がどれだけあるかは、並列化できる仕事の割合によって変わるのです。 アムダールの法則によると、並列化して効率がどれだけ改善できるかは P にかかっ ているといえます。P を改善するには、

    ヘテロジーニアスのマルチコアでパフォーマンスを上げるには - Qiita
  • 世界最小のapkを作る - Qiita

    以下はPlaying APK Golfの日語訳です。 Playing APK Golf Reducing an Android APK's size by 99.99% ゴルフでは、最も得点の小さい者が勝利します。 この原則をAndroidにも適用しましょう。 apkのファイルサイズを減らし、Oreoで実行できる最小サイズのアプリを作成するのです。 Measuring a Baseline Android Studioで生成されたデフォルトのアプリから開始しましょう。 キーストアを生成し、アプリに署名し、そしてstat -f%z $filename.コマンドでファイルサイズをバイト単位で測定します。 また、Oreoが動いているNexus5にapkをインストールし、アプリが実際に動作することも確認します。 すばら! apkのファイルサイズは約1.5メガバイトでした。 APK Analyse

    世界最小のapkを作る - Qiita
  • イマドキのJavaScriptの書き方2018

    PySpa統合思念体です。これからJavaScriptを覚えるなら、「この書き方はもう覚えなくていい」(よりよい代替がある)というものを集めてみました。 ES6以降の難しさは、旧来の書き方にプラスが増えただけではなく、大量の「旧来の書き方は間違いを誘発しやすいから非推奨」というものを作り出した点にあります。5年前、10年前のやウェブがあまり役に立たちません。なお、書き方が複数あるものは、好き嫌いは当然あると思いますが、あえて過激に1つに絞っているところもあります。なお、これはこれから新規に学ぶ人が、過去のドキュメントやコードを見た時に古い情報を選別するためのまとめです。残念ながら、今時の書き方のみで構成された書籍などが存在しないからです。 たぶん明示的に書いていても読み飛ばす人はいると思いますが、すでに書いている人向けではありません。これから書くコードをこのスタイルにしていくのは別にいい

    イマドキのJavaScriptの書き方2018
  • Goのpanicと向き合う。 - Qiita

    Ho!Ho!Ho! Merry Panic!! この記事はGo Advent Calendar 2017の25日目の記事です。 ※記事はOSX及びUNIXシステムなことを前提として向き合います。 package main func main() { var p *interface{} *p = 0 } /* panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x104f386] goroutine 1 [running]: main.main() /Users/nnao45/panic-test/panic01.go:5 +0x26 exit status 2 */ 上は何

    Goのpanicと向き合う。 - Qiita
  • Unicodeと異体字とフォントについて調べてみた - Qiita

    はじめに 外字について色々調べているうちに、自分自身がUnicodeや異体字について、ちっとも分かっていないということが分かりました。そこで、調べた内容をまとめてみました。 情報の密度よりも、文字コードやフォントに関わるときの最低限の知識として、またはCheatsheetとして読み返せる内容としてまとめたつもりです。 誤った内容があればご指摘頂けると幸いです。 JIS97 JIS漢字コードはJISが規定した文字集合。俗にJIS漢字コードというと以前はJIS97を指し、正確には「JIS X 0208:1997」という規格である。 6,879個の図形文字を規定。漢字は第一水準と第二水準を搭載。基的には、区と点で表現し区点コードによって配置している。区点コードは全角文字(非漢字含む)の定義であり、半角文字は含まれていない。 区点コードのような文字集合の中での配置番号を「コードポイント」と言う。

    Unicodeと異体字とフォントについて調べてみた - Qiita
  • わかりやすい画像のdiffを求めて - Qiita

    どうも。フロントエンドエンジニアの @Quramy です。 さて、前回、1日10万枚の画像を検証するためにやったことで書いているとおり、reg-suitという画像に特化した回帰テストツールをメンテしています。 画像回帰テストという文脈において、差分の可視化方法はとても重要なファクターです。なぜなら、画像(=スナップショット)に差分が発生したからといって、それすなわち棄却、というわけではなく、その差分の内容を判断して、意図せぬ変更であれば棄却、意図した変更であればexpectedを更新する必要があります。すなわち、ワークフローに目視による差分のレビューが発生するのです。 そこで、少しだけ異なる2枚の画像について差分を効果的に可視化する、というテーマに向き合ってみました。 主にC++OpenCVでの実装ですが、これらの知識が無くとも読めるよう、コードやAPIへの言及を少なくして、中間画像で説

    わかりやすい画像のdiffを求めて - Qiita
  • ファミコンエミュレータの創り方 - Hello, World!編 - - Qiita

    この記事は「WACUL Advent Calendar 2017」の18日目です。 WACULでフロントエンドエンジニアをしている@bokuwebと申します。 記事ではファミコンのエミュレータの実装について解説していきたいと思います。 2018/11/21 追記 重複しますが以前発表した資料も合わせて参照してください。 はじめに 以前ファミコンエミュレータをJSで実装した記事を書きました。 開発過程の雰囲気はこちらを参照していただけると掴めるかと思います。 上記の記事では技術的な内容にはほぼ触れなかったため順に解説していこうと思います。 今回はまずはHello, World!までに焦点をあてて解説してみたいと思います。ファミコン関連の解説は検索すると結構ヒットはするのですが、ファミコン体の解説が多く、エミュレータを実装するにあたり、どのような手順で進めてくのが、どのような点に気をつける

    ファミコンエミュレータの創り方 - Hello, World!編 - - Qiita
  • パフォーマンス計測に困らない!tracing活用術100 - Qiita

    記事ではChrome内蔵のプロファイリングツール、tracingの活用方法を紹介する。 記事は私の個人的な意見に基づき書かれております。私の所属する組織、団体には一切の関係はありません。 はじめに Chromeは誕生以来、常に最速のブラウザを目指して開発されてきた。しかし処理速度を向上させようと頑張ると、うっかりメモリ使用量や電力消費量を犠牲にしてしまう可能性がある。特にAndroidのような携帯端末ではメモリや電池寿命の制約が強く、あらゆるデバイスで最高の使い心地のChromeを目指す上では、これらのトレードオフを実際のデータで深く理解した上で開発の意思決定をする必要がある。 このような背景から、処理速度・メモリ使用・電力消費をはじめ、あらゆるパフォーマンスデータを時系列で統合的に理解出来るように開発されたのがChrome内蔵プロファイリングツール、tracingである。 多機能が故

    パフォーマンス計測に困らない!tracing活用術100 - Qiita
  • Rust+WebAssemblyのフレームワークを作ってみた - Qiita

    はじめに クライアントサイドでのWebアプリケーション開発の発展は留まるところを知りません。しかし、JavaScriptは 型安全ではない ビルドのための環境構築が大変 といった課題をずっと抱えています。前者はTypeScriptでかなり改善されていますが、ベースがJavaScriptなので当初から型をもつ言語には及びません。後者もWebpackでかなり改善されましたが、依然としてビルドの設定は一番苦労するところです。WebAssemblyが主要ブラウザでサポートされた今、これらのソリューションとしてRust+WebAssemblyのフレームワークを提案します。 フレームワークの要件 フレームワークは既存の課題を解決するだけでなく、使いやすいことが重要だと思います。今回フレームワークを設計するにあたり、4つの要件を定義しました。 型安全 ビルドツール不要 標準HTMLに近いテンプレート記法

    Rust+WebAssemblyのフレームワークを作ってみた - Qiita
  • Implementing keepalive on Fetch API - Qiita

    はじめまして、ひらのです。Blink 上でネットワーク関連の API (XHR, fetch API, WebSocket, …) の実装や、ローディング関連の実装を行っています。 稿では、Fetch API における Request および RequestInit の keepalive プロパティの実装について解説します。このプロパティの実装は、Chromium のリソースローディングパスのかなりトリッキーな既存実装をいじる必要があり、また、Chromium のマルチプロセスアーキテクチャを意識することも必要なため、(いわゆる下位レイヤーですでに実装されているスイッチに配線するだけの実装と違い) 楽しい実装です。 リンク集 稿では仕様の説明はほとんど行いません。以下を参照ください。 Fetch Spec (fetch, CORS) SendBeacon Content Securi

    Implementing keepalive on Fetch API - Qiita
  • React とGUI 設計論、あるいは新世代のホームページビルダー - Qiita

    注意。実装はまだないです。思考実験的な意味合いが強いです。 持論 Reactやredux/Rxのデータモデリング手法の発達で、ツリー構造の末端に渡すまでのデータモデリングが主戦場になりつつあります。これはロジックを注入する部分と、プレゼンテーショナルなものが明確に分離されてきたことを意味します。 僕は個人的に、 GUI にまつわるものは、GUIで設計したい、という気持ちがあります。そう、僕が作りたいと思っているのは、悪名高きホームページビルダーです。 とはいえ、プログラミング抜きでxxxできる!というものではありません。むしろプログラミングとGUIを横断するイメージで、Unity や UnrealEngine のような開発環境を想定しています。 今やりたい理由 ブラウザの仕様が安定してきた 色々と使えるパーツが増えた JS で複雑なツールを作れるようになり、インブラウザな開発ツールが作

    React とGUI 設計論、あるいは新世代のホームページビルダー - Qiita
  • GoのSSA最適化制御オプション - Qiita

    Go2 Advent Calendar 2017 14日目の記事です。 昨日空きを見つけたので代筆させていただきます。 Qiita初投稿となります。お手柔らかにお願い致します。 はじめに 今更ですが、1.7からGoのコンパイラにはSSA最適化が導入されました。 https://golang.org/doc/go1.7#compiler そしてあまり知られていませんが、1.7からGoにはSSA最適化の各フェーズを制御するオプションが用意されています。 おそらくGoのコンパイラをいじる人くらいしか使わないと思いますが、何かの役に立つかもしれませんのでまとめておきます。 なお、このオプションはGoコンパイラのinternalなパッケージの実装を参考にしながら調査をしたものなので、将来のGoでは変更される可能性があります。ご注意ください。 では、オプションを見ていこうと思います。 その前にSSAっ

    GoのSSA最適化制御オプション - Qiita
  • Dockerで最小のGoのイメージを作成する(cgo編) - Qiita

    「最小のNode.jsのDockerイメージを目指すスレ」、「JavaでもDockerでマルチステージビルド」というエントリーでは、Node.jsとJavaを使ったアプリケーションのイメージをなるべく小さくするトライアルをしました。 今度はGoでやってみます。ただし、Pure Goで最小というのはすでに方法があって、scratchという何も含まれないイメージを元に、静的リンクしたバイナリを配置するという方法です。 Building Minimal Docker Containers for Go Applications Goを使う場合に、一部cgoで使われたパッケージを利用したいこともあるでしょうし、雑にコマンドラインを利用することもあるだろう、ということで、今回も、できることを減らさずに(やりたいことにしたがって細かく作戦を微調整する必要がない)、なるべく小さく、という方針でいきたいと

    Dockerで最小のGoのイメージを作成する(cgo編) - Qiita
  • Emscriptenで過去に作った物をwasm対応して性能比較してみた - Qiita

    はじめに 表題の通り、以前Emscriptenを使って作っていたライブラリをwasm対応して性能比較してみます。来ならSION2 HDで比較してみたかったのですが、色々とハマっているうちに時間がなくなってしまったので、SION2 HDの中でも使っているz-music.jsに絞って評価してみようと思います。 なお評価にはChrome 63を使っています。ブラウザ間の比較とかもあれば良かったのかもしれませんが、純粋に時間がなくてやっていません。比較的新しいブラウザは全て実装しているので、いずれ比較・競争は自然と激しくなるでしょう:) 使ったマシンはMac mini (Late 2014)で、性能に関係しそうなプロセッサは3GHz Core i7です。古めのマシンとは言え、シングルコア性能で考えると今でも現役ですね。 一応Chromium Developerです、とか言っておきますが、だからと

    Emscriptenで過去に作った物をwasm対応して性能比較してみた - Qiita
  • WebGL2.0のためのGLSL ES 3.0 - Qiita

    正式にWebGL2.0が使えるようになってきましたので、ここでWebGL2.0に対応するGLSL ES 3.0について、まとめていきたいと思います。 自分でも調べましたが、間違った認識や情報が含まれていたり、足りない情報がある可能性が高いです。 ぜひコメントをどんどん投げていただけるとありがたいですm(_ _)m めちゃくちゃ、読みにくいです。ゴメンなさい。 GLSL ES 1.0 から 3.0 への変更点 Version directive

    WebGL2.0のためのGLSL ES 3.0 - Qiita
  • Raspberry Pi で簡単にネットワークブートができるようになったよ,という話 - Qiita

    Raspberry Pi Advent Calendar 2017 2日目です. 結論 SDカードにbootcode.bin (49kBほど) というファイルを置いておくだけで,全バージョンのRaspberry Piで ネットワークブート USBストレージブート ができます. サーバの設定などは Network Boot Your Raspberry Pi - Raspberry Pi Documentation を参考にしてください. 経緯 まずRaspberry Piのブートは,おおまかには3段階からなります. 1段目 Raspberry PiのSoCにはROMが載っており,ここにファームウェアが書き込まれています. Raspberry Piに電源が投入されると,まずこのROM内のファームウェアがメモリに読み込まれます. 読み込まれたコードはGPUにあるVPUというプロセッサによって実

    Raspberry Pi で簡単にネットワークブートができるようになったよ,という話 - Qiita
  • ID生成大全 - Qiita

    セッションIDやアクセストークン、はたまた業務上で使う一意の識別子など、いろんなところで一意のIDを生成しなきゃいけないケースが存在します。 そこで世間で使われているIDの生成方法について調べてみました。 選択基準 ID生成における要求として、以下の観点が上げられるかと思います。 生成の速度 大量にデータを短期間で処理し、それらにIDを付与する場合、ID生成そのものがボトルネックとなることがあります。 推測困難性 IDを機密情報と結びつける場合、IDを改ざんされても、機密データが見れないようにできている必要があります。 順序性 採番した順にデータをソートする必要がある場合は、IDがソートキーとして使えないといけません。 それぞれについて各生成手段を評価します。 ID生成の手段 データベースの採番テーブル 採番用のテーブルを作り、そこで番号をUPDATEしながら取得していくやりかたです。古い

    ID生成大全 - Qiita
  • mrubyをブラウザで実行するまで (WebAssembly) - Qiita

    更新サマリー - 2017/11/28 print問題について加筆した。/独自マクロを除去。標準のものへ変更した。その他細かい文を修正した。 - 2018/7/19 幾つか正しくない表記を変更した。 はじめに Rubyがブラウザで動作する 先日、主要ブラウザでWebAssemblyを利用できる環境が整ったと話題になりました。 (参考リンク) WebAssembly対応、主要ブラウザChrome/Firefox/Edge/Safariで整う。 このことから、今後はWebアプリ(特にフロントエンド)でJavaScript系列以外の言語が選択肢にはいるようになります。(検索すると、Rustがよく引き合いに出されています。) コンテンツはmrubyインタプリタをWebAssemblyに変換し、ブラウザ上でRubyコード"p 'hello world! ...'を動作させるところまでを目標とします

    mrubyをブラウザで実行するまで (WebAssembly) - Qiita