タグ

ブックマーク / blog.tojiru.net (10)

  • やり直しC言語:複雑な宣言の読み方

    C言語は宣言文が非常に読みにくいことで有名で、後発のGo言語はこれを批判して宣言の構文を変えています。私もずっと読むのが苦手だったのですが、私の頭が悪いのではなく、C言語の仕様がヘン、ということらしい。 今まで飽きるほどこの手の解説は書かれてきてるわけですが、自分なりにまとめないと覚えた気がしないので、あえてまとめておきます。ここに書いてある内容は、「C言語ポインタ完全制覇」に詳しく書いてあります。 型の派生 C言語では、int, char, floatなどの基型から、配列やポインタを派生していくことができます。対象を並べたものが配列で、対象を指し示すのがポインタです。 配列やポインタからも配列やポインタを派生できるので、派生パターンは無限に存在します。 int int の配列 int の配列 の配列 ... int へのポインタ int へのポインタ へのポインタ ... int への

    やり直しC言語:複雑な宣言の読み方
  • 「1から100の整数を出力してください。ただし5つの異なる方法を用いて」をPHPで

    LT枠の「forやめろ」なんですが、「1から100までの整数を出力してください。ただし5つの異なる方法を用いて」というお題が出てきます。 これが今になって気になってきたのでPHPで解いてみようと思います。 たぶん趣旨的に、最適解とかじゃなくて、いろんな書き方をした方が得点高そう。 1. forとインクリメント forやめろって言われてるのですが、とりあえずforです。 Duff's Deviceとかで展開しない限りは、これが最速解になると思われます。(100個ぐらいなら違いはないだろうけど。) <?php for ($i=1; $i<=100; ++$i) { echo $i, PHP_EOL; } やってることが出力だけなので、もう少し縮められますね。 <?php for ($i=1; $i<=100; print $i++ . PHP_EOL); echoはforの()の中に書けません

    「1から100の整数を出力してください。ただし5つの異なる方法を用いて」をPHPで
    daruyanagi
    daruyanagi 2014/08/28
    「時代は static おじさんから for おじさんへ」
  • GitHub markdown APIで遊ぶよ

    markdownといえば各種言語に実装されていますが、GitHubがWeb API形式で変換ツールを出しているようなので遊んでみました。このAPIを通すと、markdownテキストがHTMLに変換されます。 JSONPで使える奴と、RESTっぽくmarkdownなテキスト自体をPOSTするとHTMLの断片が返ってくるraw APIの2つがあります。 利用上限は一時間あたり5000回と太っ腹。 とりあえず、PHP版:http://tojiru.net/markdown.php <?php if (isset($_POST['markdown'])) { $origin = $_POST['markdown']; $ch = curl_init('https://api.github.com/markdown/raw'); curl_setopt($ch, CURLOPT_RETURNTRAN

    GitHub markdown APIで遊ぶよ
    daruyanagi
    daruyanagi 2012/07/23
    ほぅ……
  • JavaScriptにRuby風のnewメソッドを加える

    JavaScriptのオブジェクト指向はクラスベースの皮をかぶったプロトタイプベースです。機能的には十分なのですが、すっきり書く方法が公式に用意されていないので苦労します。一年前に、newを封印してJavaScriptでオブジェクト指向するなんて記事を書いたこともありました。 Rubyではnewは演算子でなくメソッドです。これをインスパイヤしてJavaScriptもnewメソッドを加えてみると、プロトタイプ的継承もすっきり書けるのではないかと思い、試してみました。ECMAScript 5の機能を使っています。当然IE6なんかでは動かないです。 newメソッドその他の定義 Object.defineProperties(Object.prototype, { new: {value: function(){ var self = Object.create(this); self.initi

    JavaScriptにRuby風のnewメソッドを加える
  • XHTML5で実体参照を使う方法

    HTML5にはXHTML版の記法も用意されていて、XMLが好きな人でも書けるようになっています。が、色々見ていたら「実体参照が使えない」という問題があるようで。。 「<」(&lt;)とか「&」(&amp;)とかの実体参照はXMLの基仕様に入ってるので問題ありませんが、「」(&copy;)や「≫」(&raquo;)、さらには空白(&nbsp;)など、追加の実体参照はXHTML5では使えません。 なにせこの辺の特殊文字はDTDに書かれてるので、外部DTDを指定しないXHTML5では構文エラーになってしまうのです。 そんなわけで、これらの文字を使いたいときは「&#169;」()のように、エンティティコードを直接指定して書くことになります。うおお面倒くさっ! XHTML5 移行メモ 必死の Web ハッカーへの推奨事項: &lt;、&gt;、&amp;、&quot;、&apos; を除き、名前指

    XHTML5で実体参照を使う方法
  • PHP:何でもメソッドチェーン化するChainize()を作ってみた

    ※今回、実用性とか特に考えていないネタ記事ですのでそこらへんご了承ください。 PHPは他のオブジェクト指向言語と同じように、return $thisしておけばメソッドチェーン(Method Chaining / Fluent Interface)できます。対応ライブラリも沢山あります。 慣れてくると、メソッドチェーンできないとストレスを感じるようになってきます。DOMDocumentとか、Zend_Feed_Writerとか、なぜかメソッドチェーンできなくて、むずむずします。 そこでどんなオブジェクトでも、無理やりメソッドチェーンできるようにする関数Chainize()を考えてみました。ソースは少し長くなったので最後に載せます。使い方イメージだけ先に書きます。 基的な使い方 Chainize()で囲うとメソッドチェーンできるようになります。例えば前述のZend_Feed_Writerはそ

    PHP:何でもメソッドチェーン化するChainize()を作ってみた
  • PHPにfinallyはないけどデストラクタがあるよ

    PHP finallyで検索すると、「PHPにはfinallyがない。欠陥言語だ!」という主張の記事がたくさんヒットします。これに対してPHPを擁護している記事があまりなさそうなので、PHPを擁護してみることにします。 finallyとは何か まずはおさらい。 try~catch~finallyは例外処理を行うための構文です。tryで例外が発生するかもしれない処理を書き、catchで例外が発生したときの対処を書き、finallyでは例外が起きても起きなくても実行される処理を書きます。…というのが初歩的な説明ですが、このfinallyの解説は十分ではありません。 finally節は、途中でどんなことが起ころうとも必ず実行されるというかなり特殊な性質を持っています。たとえば以下のJavaScriptのコードはいずれも「try」「finally」と表示します。tryの中でgoto相当の構文を実行

    PHPにfinallyはないけどデストラクタがあるよ
  • mixi求人広告のソースコードがコンパイルできない件

    ※追記 あとで気づきましたがmixi Engineer's Blogにプログラムの原文が載ってました。 mixi Engineers' Blog » 求人広告バナー用プログラムを書いた話 つまり以下の文章は私の検索能力の乏しさとmixi Engineers' Blogを購読してないことが露呈するだけの内容なので読まなくていいです。。。 とほほ。 ちょっと前からmixiが、TechCrunchとかにエンジニアの求人広告を出しているのですが、何かソースコードが書いてあるんですよね。↓これ 記号プログラミングというのか、わざと難解にしたソースコードですが、C言語のようなので何が出力されるのか気になりました。 んで、ソースコードを地道に写経したんですが、コンパイルできないんですよ。 main(){ char *s = "We make people happy via technology.";

    mixi求人広告のソースコードがコンパイルできない件
  • JavaScriptのテンプレートエンジン「T.js」を公開しました

    結構前に公開していたんですが、きちんとした紹介を書いてなかったので改めて。Githubにて、T.jsという名前のJavaScript用テンプレートエンジンを公開しています。 T.js - DOMBuilder-like template engine for JavaScript T.jsとは JavaScriptHTMLを書くためのライブラリ(一種のテンプレートエンジン)です。 T.table("#addressbook")({style:{borderCollapse:"collapse"},border:"5"}, T.thead( T.tr( T.th("name"), T.th("address"))), T.tbody( T.tr(".odd")( T.td("alice"), T.td("a street")), T.tr( T.td("bob"), T.td("b str

    JavaScriptのテンプレートエンジン「T.js」を公開しました
  • 即時関数(function(){ ... })()の別の書き方いろいろ - 泥のように

    JavaScriptでよく使われるコード片に即時関数というものがあります。無名関数を宣言して即実行することで、ブロックスコープの存在しないJavaScriptにおいて擬似的にブロックスコープを再現します。 var a = "global"; (function(){ var a = "local"; alert(a); //local })(); alert(a); //global 一番有名なのはこの(function(){ ... })()の形式なのですが、なぜfunctionの外側にカッコが必要なのか不思議に思ったことはないでしょうか? ためしにfunction(){ ... }()と書いてみると、Syntax Errorが発生します。 なぜfunction(){ ... }()はSyntax Errorなのか JavaScriptにはfunction文とfunction式があって、

    即時関数(function(){ ... })()の別の書き方いろいろ - 泥のように
    daruyanagi
    daruyanagi 2011/04/25
    へぇ
  • 1