製作著作 © 2005-2013 Karl Fogel, 高木正弘, Yoshinari Takaoka(a.k.a mumumu), under a CreativeCommons Attribution-ShareAlike (表示・継承) license (3.0, 2.1-jp)
ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog 前回の記事「JavaScript の不思議な面白さ」はお楽しみいただけたでしょうか? 一例として正攻法で突入していった例については賛否両論あるようです。確かに結果としてできたプログラムは見た目にも美しくなく、目を覆いたくなるばかりでした。 今回は解答編として JavaScript ならではといえる "奇妙な" 例をひとつお見せしたいと思います。ヒントは前回もちらっとお話させていただいたものです。 コード改善に向かって その前に前回の問題はなんだったのかをプログラマ視点で見ていきます。 コードが美しくないと感じるのはなぜでしょうか? 改善するならどうすればよいのでしょうか? ひとつの方法は "隠す" ことです。関数化・クラス化・ライ
生産管理システムや販売管理システムといった「業務システム(基幹システム)」を開発する場合、ふつうは何らかのフレームワークを用いる。フレームワークを利用する際、オブジェクト指向等の「言語特性」を意識する必要があればあるほど、フレームワークはプリミティブである――「フレームワークはオブジェクト指向を隠蔽する」でそのように説明したが、その話題に関連して、フレームワークの「成熟度」を測るための別の観点を述べたい。そのフレームワークが「実装作業をどれだけ詳細設計作業に似せることができているか」という観点だ。 この見方は、開発スタイルの発展に関する歴史認識にもとづくものである(ってなんか大げさな言い方だ)。拙書「上流工程入門」で説明したように、「業務システム」の実装工程は以下のような「後工程の前工程への吸収合併」の過程として発展してきた。それぞれの段階でいくつかの作業が関わるが、それぞれが異なる職種と
2009年03月01日23:00 カテゴリ書評/画評/品評Lightweight Languages もはや入門書というよりバイブル - 書評 - 初めてのPython 第3版 オライリー矢野様より献本御礼。 初めてのPython 第3版 Mark Lutz / 夏目大訳 [原著:Learning Python (3rd Ed.)] 私のような Occasional Pythonistas には、これまで書かれた最良の Python 本。 だけど、初心者向けの本としては、どうなのだろう。 本書「初めてのPython 第三版」は、タイトルどおり、プログラミング言語Pythonの初心者向けの本であり、そしてオライリーという出版社がだしているだけあって、その決定版であることを運命づけられた一冊。 Book:初めてのPython 第3版より はじめに I部 Pythonの基礎知識 1章 Pytho
ヤフー株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。LINEヤフー Tech Blog こんにちは。 サービス統括部に所属しております、堀 邦明と申します。 普段はYahoo! JAPANトップページのフロントエンドエンジニアとして、JavaScriptやPHP,Perlといった言語を利用して開発しています。 この度、デベロッパーズサミット2009というイベントにおいてエンジニアの勉強法というテーマでJavaScriptの勉強法についてお話をさせていただきました。 今回は、そのときのお話について発表しきれなかった部分も含めてご紹介できればと思います。 勉強の分類 勉強には大きく分類して2つのステップがあると思います。 1. 情報収集 1つは情報収集です。 技術書やウェブサイト、ブログを読んだり、勉強会やセミナーに参加
※ 画面は公式サイトのものより Django-projectmgrはちょっと変わっている。何が変わっているかと言えば、そのソフトウェア提供元がThe Washington Timesである点だ。なぜ新聞社がオープンソース・ソフトウェアを提供するのかは分からないが、興味深いものであるのは確かだ。 Djangoを使ったプロジェクト管理システム 最近のプロジェクト管理はかつてのように画一的に、多数のデータを管理するというものではなくなっているようだ。よりアジャイルに、よりシンプルに状況を管理していく。Django-projectmgrもまた同様だ。 今回紹介するオープンソース・ソフトウェアはDjango-projectmgr、Djangoを使ったプロジェクト管理システムだ。 残念なことに、Django-projectmgrを自分のサーバで動作させることができていない。Djangoとは言ってもサー
InfoQ: Refactoring Not a Substitute for Design リファクタリングは設計の代わりにはならないよ 2009年2月9日 Chris Sims 「設計ってリファクタリングの一部なの?」という質問を受けた。この質問の背景には、Agileにおける設計の考え方に関する勘違いが見受けられる。よくAgileな人は「テストしろ! コード書け! リファクタリングしろ! 以下繰り返し!」とマントラのように繰り返す。でも、このやり方が設計を置き換える事はない。プロジェクトにおいて一連の作業が延々と繰り返されているだけなんだ。 Phil Hがこんな質問をしてきた: 新しいやり方ってのは、まずとにかくコードを書いて初期イタレーションの目的を達成し、それから必要に応じてリファクタリングを行い、洗練していくっていうことらしい。コードは漸増的に増えていく一方、全体的な設計はしてい
以前、とあるシステムのソースコードを読む機会があったのだけどあまりにひどかった。あのひどいコードでまあまあまともに動いているというのが逆に信じられない。今日昼ご飯を食べながら少し話していたのだけど意外と知られていないようなので、話せる範囲でいかにひどいのか説明してみようと思う。 まず、ソースコードが大雑把に見積もって3750万行あるのだけど、その中でまともに機能しているコードは3%しかない。10分の1程度のソースコードで同程度の機能を実現しているシステムもあるのでほんとあのシステムのコードはゴミだと言っても過言じゃない(*1) プログラマとしてはなんでそのプロジェクトはそんな状態になってしまったのか気になるところだけども、まあ多くのプロジェクト同様、真相を知る人は誰もいない。でもまあ、実際に機能しているコードのコピーみたいなものがあちこちに散らばっていることからしてコピー&ペーストが盛んに
まずは、コマンドプロンプトの基本的な部分を使えるようにならないと。。ということで nul ファイル Unix の /dev/null のようなもの サイレントにコマンドを実行 > verbose-command > nul 空のファイルを作る > type nul > hoge.txtこーんな感じでコピーができる 環境変数 PATH 、 PATHEXT PATH という環境変数にディレクトリを登録しておくと、そのディレクトリ内の実行ファイル(環境変数 PATHEXT で指定された拡張子を持ったファイル)がファイル名だけで実行できるようになります。 PATHEXT に .TXT を指定してみる 以下のようにすると .txt に関連付けられたアプリケーション(メモ帳)で、 hoge.txt が起動する。 > type nul > hoge.txt > set PATHEXT = .TXT >
とりあえず思いついたもののまとめ。 まずは、ベーシックなものから。 変数のスコープをなるべく狭くしろ 他はグローバル変数を使うなとか、モジュール化と界面を意識せよなど。とにかくスコープは重要かつ意外と奥が深い。スコープに関係する機能は、モジュール(パッケージ)、クロージャ、ローカル関数、ローカルクラス、変数の種類、アクセス制御など。 同じロジックのコードを2度以上書くな 他はDRY原則、コピペをするななど。自分の場合、2度書く方がシンプルになる場合、2度書くこともある。特に、ifやswitchなどのロジックの中で同じコードが2度現れる場合、ちょっとしたコードでわざわざ別のところで関数やブロックにまとめて、それを参照するのは面倒。但し3度以上現れる場合は関数などにまとめるケースが多いかも。 汎用コード内で条件分岐コードを減らせ 他はifをポリモーフィズムによりなくせなど。条件分岐は汎用性を損
「天才」――こう呼ばれる人物は各分野に存在する。上野康平さんもそんな1人だ。「バイナリアンスレッド」の第1回に登場いただいた井上恭輔さん同様、IPAの未踏ソフトウェア創造事業から天才プログラマー/スーパークリエータの称号を贈られた上野さん。彼が注目を集めたのは、彼が18歳であったことが大きい。 未踏ユースをのぞいてみれば、18歳という年齢は特別若いわけでもない。上野さん自身、未踏ユースの採択時には17歳だった。上野さんの場合、飛び級を重ね、18歳にして千葉大学理学部先進科学プログラム2年生であるという点が、ニュースを見た人を2度驚かせたのだろう。未踏の先輩、井上恭輔さんにはじまった「New Generation Chronicle:バイナリアンスレッド」。第2回は上野康平さんにご回答いただいた。 なお、本記事は完全版として上野氏にご回答いただいた内容をほぼそのまま掲載している。長文となるた
はじめに このブログでは Visual C# 2008 Express Edition (無償) を使用した Windows アプリケーションに作り方について説明しています。 Visual C# 2008 Express Edition (無償) の入手方法については この記事 を、プロジェクトのコンパイル方法については この記事を参照してください。 タイトルにあるとおり、今回は未経験の開発言語でとりあえずプログラムを書けるようにするための、てっとりばやい方法について書いてみたいと思います。 コードを書く仕事に携わっていると、仕事の要件や技術の革新、開発製品のディスコン、あるいは趣味嗜好、心境の変化などで新しい開発言語を使用する状況になることがあります。 しかし、開発言語の習得というのは、他人との関係を築くのに似てそう簡単ではありません。 深く理解し、心の底から分かりあえるまでにはそれなり
2008年07月19日16:00 カテゴリLightweight Languages フローチャートがダメな3つの理由 というわけで、前世紀の遺物、フローチャートを供養する試み。 フローチャートとFizzBuzz問題 - novtan別館 さて、研修の話だけど、低水準言語ってだけではなく、きちんとフローチャートを書かせて処理の流れを整理し、あるいは効率が悪くないかを考えさせる、ということも重要だと思っています。フローチャートがそんなにいいなら、なんでビジュアルプログラミング言語が現場で使われないの? まずは経験則による終了宣言。ちなみにここで言うビジュアルプログラミング言語の定義は、Wikipediaのそれと同じ。 ビジュアルプログラミング言語 - Wikipedia ビジュアルプログラミング言語(英: Visual programming language、VPL)とは、プログラム要素を
※ スレッド、ローカルリソースファイルへのアクセスなど、CLDC レベルの機能は、プロファイルが違っても共有できます。 メモリ保存やユーザインタフェースなど、プロファイルレベルの機能は、異なるプロファイル間で共有できません。 携帯 Java プログラム と ADF ファイルの例 // DoJa でのHelloWorld import com.nttdocomo.ui.*; public class HelloWorldApplication extends IApplication { public HelloWorldApplication() {} public void start() { Panel panel = new Panel(); panel.add(new Label("HelloWorld")); Display.setCurrent(panel); } } // J
2008年01月05日02:45 カテゴリ翻訳/紹介Code 試訳 - コードをセキュアにする10の作法 全コーダー必読。プログラマーだけではなく法を作る人も全員。 Top 10 Secure Coding Practices - CERT Secure Coding Standards 突っ込み希望なので、いつもの「惰訳」ではなく「試訳」としました。 Enjoy -- with Care! Dan the Coder to Err -- and Fix コードをセキュアにする10の作法 (Top 10 Secure Coding Practices) 入力を検証せよ(Validate input) - 信頼なきデータソースからの入力は、全て検証するようにしましょう。適切な入力検証は、大部分のソフトウェア脆弱性を取り除きます。外部データは疑って掛かりましょう。これらにはコマンドライン引数、
「往年の名作「スーパーマリオブラザーズ」、あの濃い内容でわずか40キロバイト」に載っていたわずか565バイトのテトリス。文字数にして551文字。79文字*7行のプログラミングで、テトリスが動きます。 以下のソースコードをメモ帳に貼り付けて、htmlで保存すればテトリスが動きます。 <body onKeyDown=K=event.keyCode><script>X=[Z=[B=A=12]];h=e=K=t=P=0;function Y() {C=[d=K-38];c=0;for(i=4;i--*K;K-13?c+=!Z[h+p+d]:c-=!Z[h+(C[i]=p*A-Math.round(p/ A)*145)])p=B[i];!t|c+4?c-4?0:h+=d:B=C;for(f=K=i=0;i<4;f+=Z[A+p])X[p=h+B[i++]]=1 if(e=!e){if(f|B){fo
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く