家にパソコンがはじめて来てから30年くらい、プログラミングを始めてから20年以上が経ちました。その間、IT技術に対する愛は変わらずに、ずっと走り続けてきました。では当時の自分と今の自分で何が違うのだろうと考えてみたところ、めちゃくちゃ変わっていたのでびっくりました。本記事では何がどう変わったのか、それを見てなにを思ったかなどを書きます。 昔は次のようなこだわりがありました。 大きなものは一つの仕事をする単純で小さなツールを組み合わせて作るべし ソフトウェアは可能な限り設定可能になっていてほしいし、それを自分の好みになるまでカリカリチューニングしたい 可能な限りすべてキーボードだけで操作できるようになっていてほしい いわゆるUNIX哲学をはじめとして、いろんな本やWebサイトなどに強い影響を受けていることがよくわかります。 ところが今は次のように全然違うことを考えています。 トラブルハマった
この記事について この記事では、ファイルに書き込みを行うプログラムを実装する時の注意点について説明します。 ファイル書き込みは、プログラミングにおいて比較的よく利用される機能でありながら、実装時に注意していないと、システムクラッシュ(意図しない電源の喪失や OS のクラッシュ等)後にファイル上のデータが整合性を失う可能性、平たく言えば、データが破損する場合があります。 今回の主な内容はトランザクションに関連する事柄で、ご存知の方からすると当たり前と思われることだと思われますが、執筆者がプログラミングの勉強を始めて以降知らない期間が長かったことと、他にもご存知ない方がある程度いらっしゃるのではないかと思ったため、このように記事にさせていただきました。 また、ここで説明する注意点は、クラッシュ後にデータの整合性が重要でない場合は、気を付ける必要がないものであることを先に書いておきます。 先にこ

Linuxの生みの親であるLinus Torvalds氏は、もう講演はしていない。フランスのリヨンで開催された「Open Source SummitEurope」で同氏が行ったのは、友人であるVMwareの最高オープンソース責任者Dirk Hohndel氏との対話であり、同氏は以前もこの形式で登壇している。Torvalds氏はこの基調ディスカッションで、自分はもはやプログラマーではないと考えていることを明らかにした。 では、誰もが「プログラマーの中のプログラマー」だと考えている同氏は今、何をやっているのだろうか。Torvalds氏は次のように説明した。 もうコーディングは全然やっていない。私がコードを書くのは、ほとんどがメールの中だ。誰かがパッチを送ってくると、私は擬似コードを書いて返す。パッチの修正にはとても慣れているので、最近ではテストもしないままパッチを修正したり、そのパッチを送っ

はじめに この記事では、UnixのプロセスのことやUnix環境のことについてチョットワカッタ気持ちになっていただくことを目的に、RubyをつかってUnixプロセスについて触れていきます。読み終わったあと、チョットワカッタカモという気持ちになっていただけたり、著者が訳者として関わっている『なるほどUNIXプロセス』を手に取ってもらえたりすると幸いです。 なお、この記事の内容は、オープンソースカンファレンス2015 Hokkaido でのjus 研究会で行った発表内容をまとめ、原稿におこしたものになります。 それでは、さっそく本題に入っていきましょう。 コマンドを実行する ふだん、みなさんは作業中にターミナルからたくさんのコマンドを実行しているはずです。まずは、この「ターミナルからコマンドを実行する」ことについて見ていきましょう。 コマンドとプロセス Unixでは、あらゆるコマンド、プログラ
EF15形は高性能な電気機関車であったが、引き出し性能が蒸気機関車に劣ると誤解されていた。 誤った運転方法により本来の性能を引き出せていなかったのである。 (spaceaero2 [CC BY 3.0], ウィキメディア・コモンズより) こんにちは、エムスリー・エンジニアリングG・基盤開発チーム小本です。 WEBサイトはRailsやSpringなどの「本体部分」だけでは完結しません。レポート作成・データ更新などの細かい処理も必要です。 過去にはこうした用途にはBashがよく使われました。しかし、Bashは落とし穴が多かったり、クラスなどの抽象化機能がなかったりして、規模が大きくなると辛くなります。 そこで、Bashの代替候補に挙がるのがPythonです。エムスリーでもかつてはBashを使っていましたが、現在は新規案件にはPythonを推奨しています。 しかし、実際にPythonで書き直そ

Post author:sider Post category:Uncategorized Reading time:4 mins read Post published:2018-02-26 もし過去のOSに断絶があったら、Rubyが絶命していた可能性はかなり高い。25年のRuby開発の歴史を振り返りつつ、そんな意外な見方を示したのはRubyの生みの親として知られる、まつもとゆきひろ氏だ。 日本生まれのプログラミング言語「Ruby」(ルビー)が25歳の誕生日を迎えた。Rubyが生まれたのは1993年2月24日のこと。それからちょうど25年目となる2018年2月24日に、Ruby25周年記念イベント「Ruby25(ルビー・トゥエンティーファイブ)」が、Rubyアソシエーションおよび日本Rubyの会の後援で東京の品川インターシティーで開催された。 基調講演を行ったまつもと氏は、25年を振り返

今回はソケットプログラミングについて。 ソケットというのは Unix 系のシステムでネットワークを扱うとしたら、ほぼ必ずといっていいほど使われているもの。ホスト間の通信やホスト内での IPC など、ネットワークを抽象化したインターフェースになっている。 そんな幅広く使われているソケットだけど、取り扱うときには色々なアーキテクチャパターンが考えられる。 また、比較的低レイヤーな部分なので、効率的に扱うためにはシステムコールなどの、割りと OS レベルに近い知識も必要になってくる。 ここらへんの話は、体系的に語られているドキュメントが少ないし、あっても鈍器のような本だったりする。 そこで、今回はそれらについてざっくりと見ていくことにした。 尚、今回はプログラミング言語としてPython を使うけど、何もこれは特定の言語に限った話ではない。 どんな言語を使うにしても、あるいは表面上は抽象化さ

シェルスクリプトは環境依存が激しいから…… などとよく言われ、敬遠される。それなら共通しているものだけ使えばいいのだが、それについてまとめているところがなかなかないので作ってみることにした。 「どの環境でも使える=POSIXで定義されている」と定義 「どの環境でも使える」とは、なかなか定義が難しい。あまりこだわりすぎると「古いものも含め、既存のUNIX全てで使えるものでなければダメ」ということになってしまう。しかし、私個人としては 今も現役(=メンテナンスされている)のUNIX系OSで使いまわせること にこだわりたい。 とはいっても全てのOSやディストリビューションについて調べられるわけではないので、この記事では基本的に最新のPOSIXで定義されていることをもって、どの環境でも使えると判断するようにした。(飽くまで「基本的に」ということで) 従って、互換性確保のため、シェルの中で使ってよい

言語処理学会第19回年次大会 (NLP2013) チュートリアル資料(岡崎担当分) 岡崎 直観 東北大学大学院情報科学研究科 okazaki at ecei.tohoku.ac.jp http://www.chokkan.org/ @chokkanorg 研究者流 コーディングの極意 1 研究におけるコーディングの極意? • 今回のチュートリアルをきっかけにサーベイ – ソフトウェアエンジニア向けの指南書は存在 – でも,研究者向けの資料は数少ない • 自分が修士課程の頃は完全に我流だった – 複数文書自動要約のプログラムをすべてC++で実装 – *NIXを使うスキルはなく,すべてWindows上で実行 – 今から考えると,無駄だらけの実験作法だった • ほとんどの大学では実験の講義があるが… – 研究のためのコーディング作法は教えてくれない 2 繰り返される残念な光景 • 論文の締切前日
デザインの「悪い方がよい」原則 The Rise of "Worse is Better"rpg@lucid.com 日本語訳: daiti-m@is.aist-nara.ac.jp 私や Common Lisp と CLOS のデザイナーのほとんどは、MIT/Stanford 方式の設計に親しんでいる。 この方式の核心は、「正しい」やり方をせよ、という ことにつきる。デザイナーにとっては、以下の点をすべて正しく満たすことが 重要である。 簡潔性 デザインは実装と使用法の両面において単純でなければならない。 このとき、使用法が単純な方が、実装が単純なことより重要である。 正当性 デザインはすべての点において正しいものでなければならない。 誤りは許されない。 一貫性 デザインは一貫性を欠いたものであってはならない。一貫性を保つ ためには完全性は少しだけ犠牲にしてもよい。一貫性は 正当性と同
4.10 Table of Long Options ¶ Here is a table of long options used by GNU programs.It is surely incomplete, but weaim to list all the options that a new program might want to be compatible with. If you use names not already in the table, please send bug-standards@gnu.org a list of them, with their meanings, so we can update the table. ‘after-date’ ‘-N’ in tar. ‘all’ ‘-a’ in du, ls, nm, stty, unam
パイプライン は、最近のソフトウェアエンジニアリングにおいて、非常に便利な(そして驚くほど活用されていない)アーキテクチャパターンです。ソフトウェアでデータの流れを制御するためにパイプとフィルタを用いる考え方は、最初のUNIXシェルが作られた1970年代からあります。もしターミナルエミュレータでパイプ” | ”を使ったことがあるなら、”パイプとフィルタ”を活用できていることになります。以下の例を見てみましょう。 cat /usr/share/dict/words | # Read in the system's dictionary. grep purple | # Find words containing 'purple' awk '{print length($1), $1}' | # Count the letters in each word sort -n | # Sort l


序 「文字列を文字の列とみなす単純化」について議論がありますが、前提が抜け落ちてるように思うので書くことにします。 そもそもこの話はどのような文脈の上にあるかというと、テキスト処理 (wikipedia:en:Text_processing) の文脈になります。ここでいう「テキスト処理」とは plaintext (wikipedia:プレーンテキスト) の検索・加工のことで、ここでは特に UNIXText Processing の系譜が念頭に置かれています。つまり、複雑な装飾を含むリッチテキストではなく、処理の対象を ASCII 文字列といくつかの制御文字へと抽象化することで、正規表現のような強力な道具を用いた処理を可能とした世界です。UNIX でのお話ですから、ここでの具体的な処理の単位は char であり、全体としては char[] になります。この char の中身は上で述べたと
fork() can fail: this is important あー、fork()のことね。プロセスがもっとプロセス作るためのやつな。いや、他にもプロセス作る方法はあるけどな。ま、面白い話がもうひとつあるから聞かせてやるよ。 forkは失敗するんだぜ。分かってるか? マジで分かってるか? マジだぜ。forkは失敗するもんだ。mallocと同じさ。失敗することもある。そんなに頻繁にってわけじゃないけどさ、でも失敗したら、無視できっこないぜ。ちっとは脳みそ働かせなきゃならん。 forkが0を返したら、そいつは子プロセスで、親なら正数を返すってことは、みんな知ってるよな。その値は子のpidだ。こいつを保存しといて、あとで使うってわけだ。 失敗を確認しない場合どうなるか知ってるか? そうだよ。お前多分、"-1"(forkのエラー通知)をpidとして扱ってるんだろ。 さて、問題の始まりだ。本当
なんとなくシェルに対してどういう態度で接しているのか思い出した順に書いておく。 こういうポリシーがあるからこうする、というよりも、こうなってることが多いのでこういうポリシーが背景にあるようだ、という知見をまとめた感じ。 dotfilesはこれ:https://github.com/uu59/dotfiles エイリアス なるべく使わない。これはgitのエイリアスなどについても同様。 https://github.com/uu59/dotfiles/blob/c7a44a1699ee82cc07a15d3ea1e2e516b7e17846/.zshrc#L84-L103 $ alias C='| xsel --input --clipboard' aptf='sudo apt-file search' apti='sudo apt-get install' apts='sudo apt-ca
なぜこんな文書を書いたか わたしは Jargon Fileの編集者で、またその他似たような有名文書いくつかの著者なので、しばしば熱心なネットワーク初心者から「ウィザード級の大ハッカーになるにはどうやって勉強すればいいの?」といったようなお尋ねメールを頂きます。でもかつて 1996 年に、こんな大事な問題を扱った FAQ や Web 文書 はみあたらないことに気がつきました。というわけで、これを書き始めました。多くのハッカーがいまやこれを決定版と見なしているし、つまり実際に決定版なんだと思います。でも、この問題について自分が唯一無二の権威だと主張するつもりもありません。気にくわなければ、自分なりのヤツをどうぞ。 この文書をオフラインで読んでいるなら、最新版は次のところにあります。 http://www.catb.org/~esr/faqs/hacker-howto.html なお、この文書の
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く