はじめに 本記事は電子書籍版もあります。 linuxカーネルはC言語のマクロを駆使して書かれています。それらのうち、凝ったマクロになじみの無い人には初見では意図がわからない&わかってみれば面白いであろうものをいくつか紹介いたします。対象読者は、C言語のユーザだけれども、マクロは定数定義くらいにしか使わないというライトなマクロユーザです。 マクロを使用する場所に依存するエラーを防ぐ 次のマクロは、二つの引き数の値を置換するだけの単純なものです。
![linuxカーネルで学ぶC言語のマクロ - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/b041778fecb776e7529f1bc02ae55cc389e04712/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fogp-background-1150d8b18a7c15795b701a55ae908f94.png%3Fixlib%3Drb-1.2.2%26w%3D1200%26mark%3Dhttps%253A%252F%252Fqiita-user-contents.imgix.net%252F~text%253Fixlib%253Drb-1.2.2%2526w%253D840%2526h%253D380%2526txt%253Dlinux%2525E3%252582%2525AB%2525E3%252583%2525BC%2525E3%252583%25258D%2525E3%252583%2525AB%2525E3%252581%2525A7%2525E5%2525AD%2525A6%2525E3%252581%2525B6C%2525E8%2525A8%252580%2525E8%2525AA%25259E%2525E3%252581%2525AE%2525E3%252583%25259E%2525E3%252582%2525AF%2525E3%252583%2525AD%2526txt-color%253D%252523333%2526txt-font%253DAvenir-Black%2526txt-size%253D54%2526txt-clip%253Dellipsis%2526txt-align%253Dcenter%25252Cmiddle%2526s%253D5d55eb82a88c61cf6feec0d4c6c52c2a%26mark-align%3Dcenter%252Cmiddle%26blend%3Dhttps%253A%252F%252Fqiita-user-contents.imgix.net%252F~text%253Fixlib%253Drb-1.2.2%2526w%253D840%2526h%253D500%2526txt%253D%252540satoru_takeuchi%2526txt-color%253D%252523333%2526txt-font%253DAvenir-Black%2526txt-size%253D45%2526txt-align%253Dright%25252Cbottom%2526s%253D4d7b9e0858a67385a93b62706bc78045%26blend-align%3Dcenter%252Cmiddle%26blend-mode%3Dnormal%26s%3Dd41532d8278049be507faa22cdf33110)
アメリカ人です。 Hello 👋 この記事の目的 多くの日本人は自分の英語力には自信がないではないでしょうか。残念ながら「英語がわからん」、「英語が全然できない」という声をしょっちゅう聞いています。でも、今まで英語ができて意味がちゃんと伝わる何人かの日本人に会ったがあります。完璧な英語ではないけど(外国人も英語でミスる時もある...)、がんばって話そうとするので充分仕事ができる人たち。そういうがんばる姿勢はオープンソースのプログラムや英語圏のプログラムに手を出すためには一番大事なことだと思います(外国人側もすごく助かります)。日本の文化では「私はできる!」と自慢することは少ない中、この記事を通して、流暢に話せなくても自分のプログラミングの命名の仕方にはちょっとだけでも自信を持たせたいなと思います。完璧じゃなくていいです。Let's go! 合わせて読んでいただきたい 【日本人エンジニア必
Python3.6.0 が2016年12月23日にリリースされ、新たにアップデートされた項目がいくつかあります。 What’s New In Python 3.6 やはりPythonを使ってプログラミングをする人にとっては、新たに追加された文法機能などが特に気になるのではないでしょうか? そこで今回は3.6.0で追加された文法機能である、 PEP 498: 書式化済み文字列リテラル PEP 515: 数値リテラル内のアンダースコア PEP 526: 変数アノテーションのシンタックス PEP 525: 非同期ジェネレータ PEP 530: 非同期内包表記 について紹介します。 書式化済み文字列リテラル(f-strings) Pythonには、文字列(string)クラスにformat()メソッドが用意されており、str.format()を用いて変数置換や値のフォーマットを行うことができます。
こんにちは。18歳女子高生ながらエンジニアとして色々なところでアルバイトをしている 7coco です。 Rails で ArgumentError 先日 Rails で validation を書いていたら The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option? (ArgumentError) と Rails に言われました。 要するに「^と$はセキュリティ的に問題があるかもよ。\Aと\zを使いたかったんじゃない?そうじゃなかったら :multiline => true をオプションで
※ 最新版が公開されました。 ライブラリが更新され、かなり使い方が変わっています。 以下の記事にて新しいバージョンの説明をしてありますので、ご確認下さい。 PyCallを使ってRubyからPythonのライブラリを使い倒す はじめに mrknさんがPyCallというライブラリを開発されているので、早速試してみました。 インストール 2017年2月24日現在、以下の手順でインストールできるようになりました。 mrknさん、ありがとうございます。 旧インストール方法 備忘録的に残しておきます。 もし、上記手順でインストールできなかった場合にお試し下さい。 ソースコードがGitHubからダウンロードできます。 2017年2月23日現在、開発中のブランチからダウンロードするとのことだったので、以下のコマンドで入手しました。
thorで作ったコマンドラインツールのZsh補完スクリプトを自動生成してくれるthor-zsh_completionでホクホクしてサクサクしてみるRubythor 自作コマンドラインツールでも補完してサクサク使いたい! ホクホク顔になりたい! でもツールを作るたびに補完用の設定を手書きするのはめんどくさい! という方は多いのではないでしょうか。 そんな方には @labocho さん作の thor-zsh_completion という gem があります。 ※この gem は thor を前提にしています。 前提 thor って何?という方は以下をご確認ください。 Ruby の CLI ツールの作成を支援する、 thor gem の基本について サンプル 以下のリポジトリの内容をベースに試します。 tbpgr/fizzbuzz 変更前 thor を使った CLI の定義部分は以下のようになっ
ジャパリパークのみんなー! フレンズのためのプログラミング言語ができたよー! サンプルコード Socrates すごーい! かばんちゃん は ヒトの フレンズ なんだね! すごーい! あなた が ヒトの フレンズ なら あなた は しっぽのない フレンズ なんだね! だれ が しっぽのない フレンズ なんだっけ? すごーい! 0 は 自然数の フレンズ なんだね! すごーい! きみ が 自然数の フレンズ なら きみ の 次 も 自然数の フレンズ なんだね! すごーい! 0 は 3の倍数の フレンズ なんだね! すごーい! きみ が 3の倍数の フレンズ なら きみ の 次 の 次 の 次 も 3の倍数の フレンズ なんだね! すごーい! 0 は 5の倍数の フレンズ なんだね! すごーい! きみ が 5の倍数の フレンズ なら きみ の 次 の 次 の 次 の 次 の 次 も 5の倍数
はじめに 本書の主な対象読者はlinuxを含むOSのプロセススケジューラについて聞いたことがない人や、名前は知っているけど具体的に何をするものかをよく知らない人です。 linux kernelは複数プロセスを同時に動作させる(正確にはさせているように見せかける)ためのプロセススケジューラという機能を持っています。といっても、みなさんがlinuxシステムを使う場合は通常プロセススケジューラを意識しないで済むようになっています。では、あえて意識したい場合、どのような機能なのかを知ってみたい場合はどうすればよいのでしょうか。 kernel機能(ここではプロセススケジューラ)の挙動を明らかにするには、ソースを読む、色々ソース改変しながら動かしてみる1、などが有効です。しかし、ここでは一切ソースを読まずに、ユーザプロセスを使う実験のみによってカーネルの挙動を観測してみます。これは、まるで神様2の作っ
機能は「カンバン」のみ Trello は有名なトヨタの「カンバン」方式を利用できるウェブアプリです。 タスク管理として、有名な「JIRA」に似た機能を無償プランで使えるという面もあり、利用されている方も多いと思います。 「カンバン」の他に、Slackなどの他サービスと連携できたり、アドオンで機能強化したり、期限を決めたり、ボードを他ユーザと共有することができます。 自分的には「カンバン」さえ使えればよかったので、このアプリで利用できるのは「カンバン」だけです。 必要があれば、個々に好きなものを入れられるよう、基本となるものを作ったつもりです。 そのため、ライセンスは MIT にしてあります。ご自由にお使い下さい。 GitHub https://github.com/mikiakira/php-simple-kanban 使っているもの PHP 5.6+ (PDO is required)
Railsのdefault_scopeは悪だ!(default_scope is evil) ということらしいRubyRailsActiveRecord Rails Best Practiceのサイトを見ていたら、結構あおり気味なタイトルの記事があった。 default_scope is evil | Rails Best Practices 要約すると、Rails(ActiveRecord)の default_scope は2つの理由から使うべきではないとのことです。 default_scopeのオーバライドができない モデルをイニシャライズするときにdefault_scopeの副作用が影響する サンプルコードもあったので自分の環境でも試してみました。 以下の環境で試してみました。 Rails4.1.5 Ruby2.1.2 ベースとなるモデルは以下の様なUserクラスがあると想定(def
はじめに:これは誰のための記事か? Perl で書かれた比較的大きなスクリプトやプロジェクトを保守する必要のある人. Perl 5 との戦い Perl5 (以下 Perl) といえば一時期 CGI を作るための標準的な技術として Web の開発で利用されたり、テキスト処理用の言語として昔から広く使用されている言語です。 かつてはサーバー上で CGI を動作させるために Perl でなければならない というような状態がありましたが、近年では Ruby on Rails や PHP 製のフレームワークなどがサーバー上で普通に利用できるようになっており、かつてのような Perl が必要とされる ようなシチュエーションは減ってきているかと思います。 また、オブジェクト指向プログラミングや関数型プログラミングをサポートする新しい言語が普及してきている現在では、新規の開発に Perl を採用するメリッ
はじめに 本記事は第二回の続きです。前回までの記事を既に見ていることが前提です。 今回は、今後凝ったカーネルモジュールを作るにあたって必要になってくる、デバッグに有用なdebugfsというファイルシステムについて学びます。debugfsはカーネルとユーザとの間で簡単に情報をやりとりするためのファイルシステムです。linuxにはprocfs, sysfsという、このような使い方ができる他のファイルシステムもあります。しかし、前者は原則としてプロセスに関連する情報だけを扱うというルールがあること1、および、後者は扱いかたが少々難しい上に1ファイルにつき1つの値しかやりとりできないという制限があることより、おいそれと使えません。 debugfsは通常/sys/kernel/debugというディレクトリ以下にマウントされています。その下のファイルを読み書きすることによって、カーネルの情報をユーザプ
はじめに 本記事は第一回の続きです。前回までの記事を既に見た上で開発環境ができていることを前提としています。 前回書いたコードはモジュールをロードした時とアンロードしたときだけ動いていました。今回は、ある時点から一定時間後に所定の処理をする方法を学びましょう。そのためにカーネル内のタイマー機能を使います。タイマー機能はカーネル内のいたるところで使われています。 今回書くソースはすべてelkdatのソースディレクトリ以下のdev/module/timer以下に配置するものとします。 一番簡単な例 モジュールロードから10秒後にメッセージを出してみましょう。次のようなソースになります。 #include <linux/module.h> #include <linux/timer.h> MODULE_LICENSE("GPL v2"); MODULE_AUTHOR("Satoru Takeuc
はじめに 本記事の内容はUbuntu16.04でのみ確認しています。同名の電子書籍においてはUbuntu 18.04に対応しています。 本記事の目的は、linuxのカーネルモジュール(以下カーネルモジュール)というものの作成を通じてlinuxカーネル(以下カーネル)の開発に最低限必要な知識をつけることです。C言語のポインタがわかる程度の開発スキルがあれば多分読めると思います。 本記事は、過去にセキュリティ&プログラミングキャンプ2010というイベントの中のLinux開発者育成コースにおいて使用した資料を加筆、修正したものです。1つの記事に納めるのは無理がある分量なので、(不定期)連載という形式をとることにしました。 本記事に記載されているコードを実際に試すためには、仮想化機能を持つCPUを搭載したPCにインストールされたUbuntu16.04が必要です。CPUの仮想化機能を持っているどうか
はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合
今北産業 Memcachedではexpiration timeに絶対指定と相対指定をすることができる expiration timeに30日を超える秒数を指定すると絶対指定(epoch)として扱われる つまりexpiration timeに30日を超える秒数を相対指定のつもりで指定した場合、絶対指定として処理されて大抵の場合は死に至る Memcachedのexpiration Memcachedのexpirationには無効値とするまでの相対的な時間を秒数で指定する方法が一般的だ。 だが、実はMemcachedはepochによる絶対指定によるexpirationもサポートしている。 https://github.com/memcached/memcached/wiki/Commands#standard-protocol ドキュメントを引用: An expiration time, in
はじめに コマンドラインツールが多数作られるプロジェクトがあるとします。 複数人で開発していると、オプションの意味付けが人によってばらばらになってしまう――そんな事象は、おそらくよくあることだと思います。 ので、そのような環境では、なんらか規約を設けるのがよさそうです。 本記事では、その規約の作成、またはオプションの意味付けにおいて、参考となるであろう情報を提示します。 特に、ショートオプション(英字1字のみのオプション)にフォーカスします。 ロングオプション(英字複数字から成るオプション)については、意味は自明になることが多いでしょう。 ただし、「ショートオプションをどのロングオプションに対応付けるべきか」という問題は、本稿でも扱います。 また、コマンド文法やオプションのフォーマットはOSやプログラムによって異なりますが、ここでは以下を前提とします: ショートオプション ... -a,
シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん Bash 以外のシェルでは動きません。これに関するありがちな罠は、以下のように発生します。 Bash が /bin/sh として使われている環境でシェルスクリプトを書く。うっかり Bashism がシェルスクリプトに含まれていても、 /bin/sh は何も
この記事では、detached HEAD がどういう状態なのかを git の内部構造から読み解きます。 あなたは、この2つのコマンドがどう違うか答えられるでしょうか? 問い: 下の 2 つのコマンドは同じでしょうか?違うでしょうか? A: git checkout <ブランチ名> B: git checkout <ブランチの指すSHA1> 正解は、違う です。 もし、答えに詰まってしまった場合は、ぜひこの記事を読んでみてください。 この解説の中で、下の2つのコマンドがどう違うのかが見えてきます。 (ちょっとだけ宣伝: 学生向けに git challenge というイベントを開いています。いくつか git にまつわる問題を公開しているので、興味がある方はチャレンジしてみてください!: http://alpha.mixi.co.jp/entry/2015/11/24/083300 ) deta
Rubygems には現在 Kaminari 1.0.0.rc1 が出ているが、近いうちに 1.0.0 をリリースする予定である。大きな変更点がいくつもあるので、利用者のためにこれらの重要な変更点をまとめておこうと思う。 古い Ruby と Rails のバージョンのサポート打ち切り Kaminari 1.0.0 では、以下のバージョンのサポートを打ち切ることにした。 Ruby 1.9.3 JRuby 1.7 Rails 4.0 とそれ以前のすべてのバージョン これらのバージョンを使っている人は、まず kaminari 0.17.0 で Ruby や Rails をアップグレードしてから kaminari 1.0.0 へアップグレードしてほしい。 Gem を細分化 Kaminari 1.0.0 で最も大きな変更はなんといっても、今まですべてのコードを一つの gem で管理していたものを、k
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く