はてなキーワード: シンタックスとは
新規投稿・既存変更の上限が1日10KBになってるのは確定?
これは新しい仕様でしばらく変わらない?
----
@2008-12-18 19:16
naoya hatena, diary そんな上限はないですよー。64kb (65,535bytes, EUC-JP の日本語で 65,535/2 文字) までいけます。
わあお手数かけまして。…うーん、じゃあなんだろう。
スーパーpre記法のシンタックスハイライト使ったときに、表示上でのみいろいろ中身が消えたり途中で切れたりします(1週間くらい前に投稿したときは平気だったと思うのに)。気がついたらどっかに書いたり報告したりするかもしれません。PCのメモリや回線の問題だったらやだなあ。
----
やったー消える文章ができたよーみんなメモれコピれー
>|ruby| agent.get(:url => 'http://example.com/', :referer => referer_uri) agent.get({:url => 'http://example.com/', :referer => referer_uri}) |
を、
|<
いまさらだがFizzBuzz。
1から100まで、3の倍数5の倍数云々って、全部定数の計算じゃね?
というところに気付き、自称メタプログラマー(略してメタグラマー)俺の血が騒いだ。
定数計算なら、それは実行時ではなくコンパイル時に行なわれるべきだ……。
#include <iostream> const int FIZZ_NUM = 3; const int BUZZ_NUM = 5; const int BEGIN_NUM = 1; const int END_NUM = 101; template<int N> struct Fizz { enum {PRINT = 0, NEXT = N + 1}; static void print() {} }; template<int N> struct Buzz { enum {PRINT = 0, NEXT = N + 1}; static void print() {} }; template<int N, bool ForB> struct Number {static void print() {std::cout << N;}}; template<> struct Fizz<FIZZ_NUM> { enum {PRINT = 1, NEXT = 1}; static void print() {std::cout << "Fizz";} }; template<> struct Buzz<BUZZ_NUM> { enum {PRINT = 1, NEXT = 1}; static void print() {std::cout << "Buzz";} }; template<int N> struct Number<N, true> {static void print() {}}; template<int N, int F, int B> struct FizzBuzz { static void print() { typedef ::Fizz<F> Fizz; typedef ::Buzz<B> Buzz; Fizz::print(); Buzz::print(); Number<N, Fizz::PRINT || Buzz::PRINT>::print(); std::cout << std::endl; FizzBuzz<N + 1, Fizz::NEXT, Buzz::NEXT>::print(); } }; template<int F, int B> struct FizzBuzz<END_NUM, F, B> {static void print() {}}; int main(int argc, char **argv) { FizzBuzz<BEGIN_NUM, 1, 1>::print(); return 0; }
ifなし%なしループ系なし、しかも実行時オーバーヘッドなし!(多分)
ああ、久しぶりにC++を触ったけど、やっぱC++のテンプレートってダメダメだな。20世紀の遺物といわざるを得ない。
君がもし21世紀のモテ系イケメンメタグラマーなら、21世紀のプログラミング言語、D言語を使うべきだ!
驚くべきことに、D言語はコンパイル時に関数が実行でき、その結果をソースコードとして取り込める!
ただし実行できるのは簡単な関数だけだけど……。
import std.stdio; // これでFizzBuzzを全部出力するコードを作るぜ! string makeFizzBuzzCode() { string code; for(int i = 1; i <= 100; ++i) { // 効率? コンパイル時にそんな配慮は要らん! if(i % 3 == 0 && i % 5 == 0) { code ~= "writefln(\"FizzBuzz\");\n"; } else if(i % 3 == 0) { code ~= "writefln(\"Fizz\");\n"; } else if(i % 5 == 0) { code ~= "writefln(\"Buzz\");\n"; } else { code ~= "writefln(" ~ static_itoa(i) ~ ");\n"; } } return code; } int main(string[] args) { // おまけで生成されたコードも見せるよ。 pragma(msg, makeFizzBuzzCode()); // 生成したコードを埋め込む。コピペみたいな感覚。 mixin(makeFizzBuzzCode); return 0; } // 以下ユーティリティ。このぐらい標準で欲しいな……。 /// 整数→文字列変換(コンパイル時) string static_itoa(int n) { if(n == 0) { return "0"; } // 10で割りながら余りを文字にして追加。桁が逆転した文字列になる。 string s; for(; n; n /= 10) { s ~= ("0123456789")[n % 10]; } // 桁位置を正常にする。相変わらず効率無視。 return static_reverse(s); } /// 配列リバース(コンパイル時) /// 実行時ならarray.reverseが使えるんだけどね……。 T[] static_reverse(T)(T[] s) { T[] result; foreach_reverse(c; s) { result ~= c; } return result; } // 心配なので静的ユニットテスト(笑) unittest { static assert(static_itoa(0) == "0"); static assert(static_itoa(10) == "10"); static assert(static_itoa(999) == "999"); static assert(static_itoa(9999) == "9999"); static assert(static_itoa(12345) == "12345"); static assert(static_itoa(314159265) == "314159265"); }
コンパイル結果
$ dmd -unittest fizz_buzz.d writefln(1); writefln(2); writefln("Fizz"); writefln(4); writefln("Buzz"); writefln("Fizz"); writefln(7); writefln(8); writefln("Fizz"); writefln("Buzz"); writefln(11); writefln("Fizz"); writefln(13); writefln(14); writefln("FizzBu(ry
出力結果は略。
さすがD言語!C++やJavaやC#にできない事を平然とやってのけるッ
そこにシビれる!あこがれるゥ!
というか、
writefln(1);
writefln(2);
writefln("Fizz");
writefln(4);
もうwritefln(出力関数)要らなくね?
修正。
// これでFizzBuzzを全部出力するぜ! string makeFizzBuzzCode() { string code; for(int i = 1; i <= 100; ++i) { // 効率? コンパイル時にそんな配慮は要らん! if(i % 3 == 0 && i % 5 == 0) { code ~= "FizzBuzz\n"; } else if(i % 3 == 0) { code ~= "Fizz\n"; } else if(i % 5 == 0) { code ~= "Buzz\n"; } else { code ~= static_itoa(i) ~ "\n"; } } return code; } int main(string[] args) { // もうコンパイル時のメッセージしか出さない。(笑) pragma(msg, makeFizzBuzzCode()); return 0; }
コンパイル結果。
$ dmd -unittest fizz_buzz.d 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBu(ry
実行するまでもなく結果が出力された。つまり実行時間ゼロ、ということは……
世 界 最 速
みんな使おうD言語!
http://www.kmonos.net/alang/d/1.0/index.html(1.0。こっちの方が安定してる?)
http://www.kmonos.net/alang/d/2.0/index.html(もっと凄い2.0)
つい最近、社内の重要なシステムに「'」を入れると、SQLサーバから「シンタックスエラー」とか言われる欠陥を発見してしまった。
っていうかこれってSQLインジェクションなんじゃ…orz
あの部分には「'」を入れることは滅多にないから気付きにくい。
そしてこのシステム、恐らくは完全にイントラ用。
社内にはクラッキングできる奴もいなそう。
仮にいたとしても、盗んだ情報を非常に持ち出しにくい(怪しい操作をする人間を特定しやすい)運用をしている。
けどこれってどうなんだ。
日頃から「情報漏洩しないようにがんばろー><」と派遣バイト・派遣社員・正社員含めてそこに勤務してるみんなが頑張ってる。
けど、これを無茶して(もしくは脅迫などして無茶させて)悪用する奴が現れたら一巻の終わりだよ。
※ちなみに最低でも毎日300人はそのシステムを操作しているし、その問題となる部分は権限上1000人以上の人間が操作可能と思われる。
以下から必要なファイルをDL。wiki/skinに放り込む。
http://code.google.com/p/google-code-prettify/
<?php if (PKWK_ALLOW_JAVASCRIPT) { ?> <script type="text/javascript" src="skin/prettify.js"></script> <link href="skin/prettify.css" rel="stylesheet" type="text/css"/> <?php } //** SETTING FOR GOOGLE CODE PRETTIFY! **//?>
<body onload="prettyPrint()">
Class Pre extends Element { ... function toString() { return $this->wrap(join("\n", $this->elements), 'pre', ' class="prettyprint"'); } }
define('PKWK_ALLOW_JAVASCRIPT', 1);
プログラマはインターネットを徘徊してさまざまな情報を集めるのでプログラマはインターネットでよく使われる単語には敏感である。「ライフハック」や「Geek」はその典型であり、これを知っているかどうかでインターネットによく触れているかが判断できる。
対して非プログラマはテレビ・雑誌しか読まないので、そこで扱われていない「ライフハック」などの単語に触れる機会がない。でも「スイーツ」なら良く知っている。スイーツ(笑)
プログラマなら、容量・使い勝手ともに優れていて、送信するメールに広告がつかないGmailを知っている。
対して非プログラマの学生は同じく非プログラマの友達から薦められたHotmailやYahoo! Mailを使い、送信するメールの末尾にそれぞれのメールサービスの広告をつけているのである。FreeMLなんて論外。
プログラマは全角で書いたスペースや数字・アルファベットを含むコードがエラーを起こしたという経験を持っていて、そのトラウマはプログラミングから離れたブログ記事などの普通の文章にも現れる。
対して非プログラマにとっては全角か半角かというのは単なる表記の違いに過ぎないのである。
プログラマが書くエディタには(シンタックスハイライトはあるとしても)文字を大きくして表示させる機能はない。プログラマが書く何百・何千という行数にわたるコードはすべて単調な同じサイズのフォントで書かれているので、プログラマはそのような単調な文字列に慣れている。また、プログラマは自分の書くコードがどのような書き方をすれば読みやすいコードになるのか、また、自分の書くブログを章立てにすれば相手に自分の言いたいことが伝わるかを常に気にかけている。
対して非プログラマは自分の文章に強弱をつけるためには、文字を大きくするしか方法を知らない。
これであなたの周りにいる偽プログラマを見分けられますね!
追記:
@ujihisaに捧げたこのエントリに多くのブクマありがとうございます。嬉しいです。ちなみに上で書いた「文字を大きくする」というのはhttp://d.hatena.ne.jp/iammg/20071117みたいな書き方のことです。
プログラマは細心の注意をはらって情報を集め、自分の考えをまとめる。例えば、新しい話題を見つけようと国内・海外のサイトを巡回し、そにかかれていることを試しもせずに自分のブログで紹介するなどといった軽々しいことは決して行わない。プログラマは常に自分のコードに書いてある条件分岐が正しいかどうか、変数の取りうる値は適切であるかどうかを気にけるとともに、自分の考え・行動が正しいかどうかを自分自身で確かめるのである。
対して非プログラマはインターネットの掲示板やブログに書いてあることを鵜呑みにし、さも自分が特別な情報源を得たかのように他人へ間違った知識を吹聴するのである。
ことで、さっさと忘れるという魂胆。
_| ̄| ((○
_| ̄| ((○
_| ̄| ((○
_| ̄| ((○
ここからDelphi編
_| ̄| ((○
_| ̄| ((○
ちなみにこんな感じのプロシージャだった
procedure test;
Label1.Caption := 'テストだよん!';
end;
ちなみに語尾が「だよん」だとかのなのは、今もやってる個人的なルールっぽいもの。
_| ̄| ○
あーすっきりした!
getter/setterを関数で書くと、後ろに()を付けないといけないから格好悪い!!
って人にオススメ?
template<typename T>struct _property{
virtual operator T() = 0;
typedef T _t;
};
class asdf{
int foo;
public:
struct __foo : _property<int>{
asdf &parent;
operator _t(){
printf("親クラス(?)のメンバへのアクセスが面倒...");
return parent.foo;
}
__foo(asdf &p) : parent(p){}
}y;
struct : _property<char*>{
operator _t(){
printf("ここに副作用付き処理を書ける!?\n");
printf("この関数が参照を返せばgetもどきも実装できる!?\n");
return "ふひひひ!やったね!!";
}
}x;
asdf(int v) : y(*this){ foo = v * v - v - v; }
};
void p(char*s){ printf("\n増田はこちらを振り返ると、\n悲しそうな顔をしてこう言った\n「%s」\n", s); }
int main(){
asdf a(127);
//生でprintfに渡すと型推論が行われない
//それ以外の関数だったら問題ないかも
p(a.x);
printf("\n");
//どうしてもと言うならキャストすべし
printf("\n%d\n", (int)a.y);
return 0;
}
VC8で動作確認してるよ!
はっきり言って普通にgetter/setter書くよりも手間多いね!
http://anond.hatelabo.jp/20070305101151
【見出し関連】
【その他入力支援】
◆表組み記法
| hoge | fuga |
| hoge | fuga |
|---|
◆pre記法
hoge
hoge
$There's @More %Than &One \$Way \@To \%Do *It.
◆aa記法
_,,,.. --- ..,,,__ ,, r''" `ヽ、 / , .∧ `'、 // , i / ,/ 'i i, , 'i ',i' , /フ'メi_/ '、i_i,_L,, i ', _,,_ ,/ ,,i / ,,r==、,,'' _,,,ニ,,i 'i,i i i, ./ 'i ./ i. レ'i `' i/レ'! ', 幸 運 を ! |. i i '、 i r─---┐ i i ', _,,L,,_ i, i `'i,. i i ,' / ', ,r''" `'i'、! /ヽ, '、 ノ ./''" i / -─'''''''‐く ト-、,/ フ-、`ー‐ '",,_-''" ', i i _,,,,,__ノ ,i.i. `'ヽー" 'ヽ,  ̄ ̄''ー0'i ヽ i 'i )i i `ヽ `ヽ,,`>、,,,,,,L_ \,,,j '、 ─--r' i i i ヽ, \,,__,,ノ-,i,i i 0 i ', i, // ,, -' i 0 ', i \,__// _,, -ァ'''" i 0 ', i  ̄゛゛゛ ̄ i i 0 ', ',
(( hoge ))
◆改行記法
----ここから----
1行目
2行目
----ここまで----
----ここから----
< hoge fuga >----ここまで----
<img src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?e^{i\pi}~=~-1" class="tex" alt="e^{i\pi} = -1">
[uke:D7 D7@0202 C C@3345]
◆mailto記法
http://www.hatena.ne.jp/
◆id記法
id:1234567890
id:1234567890:archive
id:1234567890:about
id:1234567890:image
question:1234567890:title
question:1234567890:image
◆antenna記法
a:id:1234567890
bookmark記法
b:id:1234567890
[b:id:1234567890:t:1234567890]
◆diary記法
f:id:hatena:hatena:image
◆group記法
g:hatena
g:hatena:id:hatenadiary:20040501
g:hatena:id:hatenadiary:archive
g:hatena:keyword:はてなダイアリー利用可能タグ
idea:182:title
◆graph記法
[[はてな]]
◆rakuten記法
[rakuten:rdownload:10285260:image:small]
jan:4981254610640:barcode
====
◆スーパー続きを読む記法(これ大丈夫かな…ないと思うけど、以下のエントリ隠れたらごめんなさい)
=====
以上。