Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 10年以上組込みエンジニアをしている@yagisawaです。 Qiitaのトップ記事では新しいフレームワークの使い方とかモダン言語の新しい言語仕様の解説とかが流れてきて、いつも羨ましいなーと思いながら読んでいます。 本記事は組込みシステム開発をしていて経験したこと・感じたことを自虐ネタとして書き連ねていこうと思います。他ITエンジニアの人に「うわっ、可愛そう」って思ってもらうのが目標です(ぇ 各業界それぞれに悩みはあると思うので、自分たちが一番不幸とかは思っていません。おそらく隣の芝が青く見えているだけです。それよりあまり組込
要約: Ncurses は、ファンクションキーの割り当てやスクリーン表示、オーバーラップしない複数のウィンドウの作成などを、テキストベースのターミナル上で行うためのライブラリです。 Ncurses とは 自分のプログラムにターミナルベースのカラフルなインターフェースを持たせたい? ncurses というライブラリを使えば、テキストベースのターミナル上でウィンドウ機能を持たせることができます。 ncurses を使ってできることは次の通りです。 画面全体を好きなように使う。 ウィンドウを作ったり管理したりする。 8 つまでの色を使う。 マウスをサポートする。 ファンクションキーを使う。 ncurses は、ANSI/POSIX に準拠した UNIX システムであれば、どれでも動作します。 加えて、システムのデータベースからターミナルの属性を読み込んで適切に動作しますので、ターミナルに依存しな
プログラミング言語としてのCは、初学者にとっては難しい言語であるのは確かです。中には、初心者が学ぶべき言語ではないと言い出す人もいます。ですが、私たちセキュリティ・ネットワークコースの教員は、我々のコースの学生は早期にCを学ぶべきであると考え、このカリキュラムを設定しています。以下に理由を列挙します。 Cはコンピュータの構造に深く根ざした言語なので、コンピュータそのものの学習を同時に進めることで、相互の理解が深まると考えています。例えば主記憶(メモリ)上にプログラムとデータの双方が置かれるフォン・ノイマンアーキテクチャや、メモリ上のデータ配置の問題、エンディアンの問題などを直接感じられるのはCならではだと思います。 CはOSや、コンパイラなどの言語処理系、組み込み機器などで広く使われており、その構造や動作と深く関わっているため、セキュリティとネットワークの理解のために欠かせないからです。
printf に関する以下のツイートが流行っていました。 上のツイートでは割とあっさり説明されていますが、amd64 SysV ABIでこの現象が起こる理由にはもっと深遠なものがあると思うので、可変長引数とからめて説明してみたいと思います。 前提条件として「ABI」「可変長引数」「non-prototyped関数」の知識が必要なのでそこから説明します ABIとは ABI (Application Binary Interface) とは、機械語レベルでのインターフェースのことです。 機械語そのもののルールはISA (Instruction Set Architecture) によって規定されていますが、たとえばC言語の「関数呼び出し」などの概念を機械語でどのように表現するかについては規定していません。そのルールを定めたのがABIです。したがって、ISAとABIはおよそ1対多の関係にあります
# include <stdio.h> # include <stdlib.h> // 構造体の宣言 typedef struct { int num; char *str; } strct; int main(void) { // 実体を生成 strct *entity; // 動的メモリの確保。確保したメモリをstrct型ポインタにキャスト。 entity = (strct*)malloc(sizeof(strct)); // メンバの初期化 entity->num = 0; entity->str = (char*)malloc(sizeof(32)); // メモリに文字列を代入 sprintf(entity->str, "%s %s!", "Hello", "World"); printf("%s\n", entity->str); // メモリの解放 free(entity->
[ゼロから始めるGPU Computing] (http://www.gdep.jp/page/index/market) http://www.gdep.jp/page/view/248 一般的に数倍~100倍以上の速度と言われている 補足:なぜ演算性能が高いのか? GPUでは、CPUに搭載されている分岐予測・投機実行 アウトオブオーダーが簡素化されており、その分、コア数を増やすことができる。 分岐予測・投機実行とは? 条件分岐した際の処理を前もって実行しておくこと。 過去の実行履歴から実行される可能性の高い命令を実行しておく。 [イメージ] arr = [1, 3, 5, 7, 8]; for (elm as arr){ if(elm % 2 == 1){ echo "odd"; //奇数が続くためCPUは事前にこの処理を予測し実行しておく }else{ echo "even"; //
NVIDIAが提供するCUDAは、NVIDIA製のGPUを用いて高速な並列処理を行うためのプラットフォームであり、ツールキットです。ここ数年話題になっている深層学習でも基本的な技術の一つとして採用されています。今回はこのCUDAの最新版である8.0をUbuntu 16.04 LTSにインストールする方法を紹介しましょう。 CUDAを使うために必要なハードウェア グラフィック処理の心臓部であるGPU(Graphics Processing Unit)は、その用途からシェーダーの汎用化・並列化が進んだ結果、特定の精度の単純な計算処理であればCPUの数倍の能力を持つまでに至りました。これは3Dゲームを主体としたCGのレンダリングに使われるべく進化したのですが、せっかくの計算能力をゲームだけに使うのはもったいないとして生まれたのが「GPGPU(General-Purpose computing o
私はつい最近まで勘違いしていました。 ここのページに書いてあるような方法で、一様分布する整数が得られると。 int random(int n) { return (int)(( rand() / (RAND_MAX + 1.0) ) * n); } この方法、一見すると実に一様分布が得られそうに見えるんですよね。 どういう思考回路を通っているかというのを自己分析すると、次のような感じです。 1. rand() では 0〜RAND_MAX のランダムな整数が得られる。 2. それを RAND_MAX + 1 で割ると、[0, 1) に一様分布する実数が得られる。 3. [0, 1) の一様な実数を n 倍して小数点以下を切り捨てたら、0 から n-1 に一様分布する整数が得られる。 これの罠なところは、1 と(特に)3 が正しいというところだと思います。 ただ、2 がダウト。 思いっきりダウ
サービス終了のお知らせ NAVERまとめは2020年9月30日をもちましてサービス終了いたしました。 約11年間、NAVERまとめをご利用・ご愛顧いただき誠にありがとうございました。
2012年12月時点でのgccまたはGNAT GPLをインストールした際に付属する「公式」ツール群の紹介を行う。 多岐に渡るので、一つ一つの詳しい説明は行わない。 各ツールの細かい情報はそれぞれのドキュメントを参照して欲しい。 もし知らないツール名があったらちょっと読んでみて欲しい。 もしかしたらあなたの問題を解決するツールがあるかもしれないから。 ★は重要度。五点満点。 なおこの記事は某所のパクリです。あとAda Advent Calendarとは何の関係もありません。 gcc ★★★★★ コンパイラ。説明不要。 Adaという言語のポテンシャルを全く引き出していない上にバグの多い糞コンパイラですが、現状Ada2012が使えるフリーのAdaコンパイラはこれしかないので仕方がないです。 (別に私一人が言ってるわけでもなく、comp.lang.adaでAda, the best languag
問.Cでオブジェクト指向プログラミングを行なえ。ただし「オブジェクト指向プログラミング」とは、次のような特徴を持つプログラミング技法であるものとする: オブジェクトの実装はオブジェクトのユーザーからは隠蔽される(カプセル化/隠蔽) 同一型のオブジェクトと同一メソッドを与えた時、実際のメソッドの動作はオブジェクトの内容により変化する(ポリモーフィズム/多態性) なお、ユーザーが既存のオブジェクトをカスタマイズして新たなオブジェクトを作成する機能は、必要ないものとする。 この問いの狙い よく、「オブジェクト指向プログラミング」と「オブジェクト指向言語」は混同されます。が、前者はプログラムを設計する上での考え方で、後者はその考え方を容易にソースコードに書けるような仕様になっている言語の事で、全く違うものを指しています。 その証拠を示すため、「非オブジェクト指向言語」たるC言語で「オブジェクト指向
はじめに 開院準備 昔むかし/ レベル差/ 教育/ ネットワーク/ 情報集め/ 隠すことについて/ プログラムコンテスト/ ドキュメント/ 楽するように/ 手抜きと下手の違い/ 開院 第1部 外来 第1章 普通の初心者 最初から充実した(!?)プログラムが登場 関数を短くし、コメントを改善する 上手になる秘訣/ プログラムの紹介/ 何だ、このプログラムは!!/ 短くするには/ コメントについて/ 無駄な努力をやめよう/ 名前/ 気になる個所/ 修正プログラム/ 課題/ まとめ 第2章 これでもプロ 売りものであるにもかかわらず、超きたない! 構造的な欠陥の指摘〜引数、ポインタの活用 プログラムの紹介/ 「超」基本的問題点/ 関数分解/ 構造的欠陥/ 引数を使おう/ ポインタ/ その他/ まとめ(修正プログラム) 第3章 上司が問題 まさに驚異的なプログラムの見本というべき 内容の修正から、
図 6 を見ると、ラムダ式で変数と値を取得する方法を、プログラマが完全に制御できることがわかります。しかし、これによって値を使用するという考え方は保持できますが、複雑なデータ構造を値として効率よく操作することには役に立ちません。 不変データ型 不足しているのは、一部の関数型プログラミング言語にあるような効率的な不変データ構造です。このような言語では、不変データ構造は共通データを共有するため、非常に大きくなった場合でも、効率性を高めることができます。データを共有するデータ構造を C++ で作成するのは簡単です。データを動的に割り当てるだけで、各データ構造がそのデータへのポインターを保持します。残念ながら、共有変数の有効期間を管理するのが難しくなります (ガベージ コレクターが普及したのはこのためです)。さいわい、C++ 11 には、std::shared_ptr テンプレート クラスで共有変
Star Trek was a very popular game on early microcomputers and minis, and lots of versions existed at one time. The "standard" was originally written in BASIC for a Sigma 7, then rewritten in Hewlett Packard BASIC, by Mike Mayfield in 1972. It was included in the HP library early in 1973. Most versions are BASIC or FORTRAN adaptations of this, which was based on an 8 x 8 galactic grid. David Ahl tr
emacs は人生 先日, また Life Changing なものに出会ってしまいました. 最近, 毎週のようにこの言葉を使っていて僕はどれだけ人生を変えれば気が済むのかという話なのですが, 出会ってしまったのです. c-eldoc.el に. eldoc.el 皆さん, eldoc.el をご存知でしょうか. Emacs Lisp を少しでも書かれるという方なら絶対に使っておきたいパッケージの一つが, この eldoc.el です. カーソル付近の関数に対する引数のリストをエコーエリアへ表示してくれたり, カーソルの位置から対応する引数を割り出しハイライトしてくれたり, もうこれなしで elisp を書く気などおきません. さらには eldoc-extension というパッケージを入れることにより関数や変数のドキュメントを表示してくれる機能まで追加され, もう至れり尽くせりです. 詳
例の冷却ファンを修理してもらいに秋葉原に行ったのですが、最近の同人ゲームのクオリティはすごいなあと感心していたら、その二階はもっととんでもないことになってて、ひとつ大人になってしまったmikioです。今回は、Tokyo Cabinetのテンプレート直列化機能を駆使して、たった100行のCプログラムでWebチャットシステムを実装してみます。 古式ゆかしいWebチャットシステム 10年くらい前にCGIスクリプトでチャットシステムを作るのが流行していたのを覚えている方も多いと思います。チャットログは現在のようにデータベースサーバに転送して格納するのではなく、ローカルファイルシステム上のファイルにCSVやTSVなどのフォーマットで格納したり、同じくローカルのDBMファイルに格納するのが主流でした。2ちゃんねるの「datファイル」もそのようなデータファイルの一種と言えるでしょう。 その頃から、CGI
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く