Strings of Life

PHP/Phalcon/MySQL/JavaScript/RegExp/Ruby/Perl/ActionScript

2013年12月

Livedoor BlogでMarsEdit等が使えるようになった件については、以下の記事を参照してください。

MarsEditやWindows Live Writerなどの外部ブログエディタに対応しました

MarsEditでのMarkdownの使用方法については、以下の記事が参考になります。

MarsEditでMarkdownでWordPress

上記記事を参考に設定を行って投稿したのが、本記事です。

MarsEditの欠点

Markdown→HTMLへの変換時に改行を削除してしまうので、コードは以下のような壊滅的な状態になりますね…

#!/usr/bin/env perl use v5.12; use warnings; use File::Basename qw/ basename /; my $name = "/usr/local/bin/perl"; say basename $name; # perl 

現状では、Mouで書いて、HTML変換後に生成されたHTMLをコピペしたほうが良いと思います。

MarsEditは期待通りには動いてくれませんでしたが、Livedoor BlogのAtomPub APIを使えば、いい感じの投稿システムが作れるかも…?

モジュール内の特定のサブルーチンだけインポートする:
#!/usr/bin/env perl
use v5.12;
use warnings;
use File::Basename qw/ basename /; # リストで指定

my $name = "/usr/local/bin/perl";
say basename $name;
日付の操作はDateTimeモジュールで:
#!/usr/bin/env perl
use v5.12;
use warnings;
use DateTime;

my $now = DateTime->now();

my $y = $ARGV[0];
my $m = $ARGV[1];
my $d = $ARGV[2];

my $user = DateTime->new(year => $y, month => $m, day => $d);

my $duration = $now - $user;

my @units = $duration->in_units( qw(years months days));
printf "%d years, %d months, and %d days", @units;

  • 関数内で変数を宣言すると、コンピュータはスタックと呼ばれるメモリ部分に変数を格納する
  • 関数の外側で変数を宣言すると、コンピュータはメモリのグローバルセクションに変数を格納する

変数のメモリアドレスを知るには、&演算子を使う。

変数のアドレスは、メモリ内の変数の位置を表す。 そのため、アドレスはポインタとも呼ばれる。

メモリアドレスの内容を読み取ったり、設定したりするには、*演算子を使う。

メモリポインタの仕様

#include <stdio.h>

int main
{
    int x = 4;
    printf("xの格納位置は%p\n", &x);
    int *address_of_x = &x; # ポインタ変数
    int value_stored = *address_of_x; #「*」演算子でポインタを参照解決する
    printf("value_storedの値は%p\n", value_stored);
    *address_of_x = 99; # アドレスの指す内容を変更する
    printf("xの値は%p\n", x);
}

ポインタ変数の使い方

1. 変数のアドレスを取得

ポインタ変数:

int x = 4; int *address_of_x = &x

2. アドレスの内容を読み取る

int value_stored = *address_of_x;

3. アドレスの内容を変更する

配列変数

  • 配列変数はポインタとして使える
  • 配列変数は配列の最初の要素を指す
  • 関数に配列引数を宣言すると、ポインタとして扱われる
  • ポインタのサイズは、32ビットOSでは4バイト、64ビットOSでは8バイト

function runc {
  gcc $1 -o ./out && ./out
}
使い方:
$ runc hoge.c
→hoge.cが、outというファイル名でカレントディレクトリにコンパイルされ、それを実行。
→コンパイルエラーがある場合はエラーを吐いて終了。

動作環境:Mac OS X 10.9 / bash 3.2.51


オブジェクトの生成

new Object()は使わない。代わりにオブジェクトリテラルを使う。
→ コンストラクタに渡す値によって、呼び出されるコンストラクタが変わるため。

配列かどうかの検査

Array.isArray()は、引数が配列のときtrueを返す。

// Array.isArray()が未定義の場合は定義する
if (typeof Array.isArray === "undefined") {
    Array.isArray = function (arg) {
        return Object.prototype.toString.call(arg) === "[object Array]";
    }
}

var ary = [1, 2, 3];
var obj = {"key": "value"};

console.log(Array.isArray(ary)); // true
console.log(Array.isArray(obj)); // false

正規表現

  • 正規表現パターンが事前に分かっている場合、正規表現リテラルを使う
  • 正規表現パターンを実行時に決定する場合、RegExp()の引数にパターンを渡す

エラーの投げ方

try {
    throw {
        name: "MyErrorType",
        message: "oops",
        extra: "This was rather embarrassing",
        remedy: genericErrorHandler
    };
} catch (e) {
    alert(e.message);
    e.remedy();
}

このページのトップヘ