はてなって、ブログパーツ使えるじゃん!

ぷよぴたっ! http://sega-pc.com/puyopuyofever/puyopita/

はてなってさー、ブログパーツ使えないと思っていたら、なんと今回の更新で「ぷよぴたっ!」に対応したみたいっ!

つーか、色々と使えるのが増えていってるんですね!

いやー、意外。

おっ、PSUぴたっ!も使えるんだねー。 ユーザーからの要望ベースで使用可能にして行ってるみたいだな〜。
ってことは、はてなって意外とセガファンが多いのかなー。(それともセガ関係者が多いのかなー?)

ということでラフィーナさん記念(?)アップ〜


 


3Dモデリングツール Metasequoiaメタセコイア)のプラグインは以下の場所で公開しています。

 

Cさん C++さん

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  // 起動するファイルを指定する
  LPCTSTR exeFile[] = { TEXT("example1.exe"),
                        TEXT("example2.exe"),
                        NULL };  // 終端文字ね♪

  // Note:
  MessageBox(NULL,TEXT("アプリを起動して終了するまで待つよ"),TEXT("TEST"),MB_TOPMOST|MB_ICONWARNING|MB_OK);

  PROCESS_INFORMATION Procinfo;
  ZeroMemory(&Procinfo, sizeof(Procinfo));

  STARTUPINFO stinfo;
  ZeroMemory(&stinfo, sizeof(stinfo));

  // 起動プロセスの条件をSTARTUPINFOメンバに設定
  stinfo.cb = sizeof(stinfo);
  stinfo.dwFlags = STARTF_FORCEOFFFEEDBACK;  // 0 or STARTF_FORCEOFFFEEDBACK

  for(int i = 0; exeFile[i] != NULL; i++)
  {
    if(CreateProcess(NULL, (LPSTR)exeFile[i], NULL, NULL, FALSE, 0, NULL, NULL, &stinfo, &Procinfo) == 0)
      return( false );  // 起動できなかったら終了・・・?
    CloseHandle(Procinfo.hThread);
    WaitForSingleObject(Procinfo.hProcess, INFINITE);  // 終了するまで待つよ
    CloseHandle(Procinfo.hProcess);
    // Note:
    MessageBox(NULL, TEXT("指定ファイルが終了したよ!"), exeFile[i], MB_TOPMOST | MB_ICONWARNING | MB_OK);
  }

  return( true );
}

VC++2005とかVC++2008とかでビルドすると(W文字への変更が必要)、
CreateProcess()で強制終了するんだけど…。
なぜに〜?

c (DOS)

#include <stdio.h>
#include <stdlib.h>
#include <dos.h>

typedef int BOOL;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;

#define KETASUU (4)
#define _SLOAD (13)
#define _SPLAY (23)
#define _GLOAD (33)
#define _GDRAW (43)
#define _GX (53)
#define _GY (63)
#define _GZ (73)
#define _BR (81)
#define _WAIT (92)
#define _GO (102)
#define _SIZE (112)
#define _COLOR (125)
#define _TX (132)
#define _TY (142)
#define _FLAG (154)
#define DUMMY ( 0)
#define BUFFER_SIZE (0xFFFF)
// ・・・酷いなw

FILE *read_fp, *write_fp;
char readFile[] = "txt.txt";
char writeFile[20];

double org_atol(BYTE *buf)
{
 double ret = (double)0;
 for(; *buf != '\0'; buf++)
  ret = ret * (double)10 + (double)*buf - (double)'0';
 return( ret );
}

BYTE *StrA2a(BYTE *buf)
{
 for(; ;)
 {
  if((*buf < 'a' || 'z' < *buf) && (*buf < 'A' || 'Z' < *buf))
   break;
  if('A' <= *buf && *buf <= 'Z')
   *buf += 0x20;
  buf++;
 }
 return( buf );
}

BYTE *Get09AZ(BYTE *b, BYTE *ret)
{
 char c1, c2;

 for(; ;)
 {
  if(*b != ' ')
   break;
  b++;
 }
 StrA2a(b);
 c1 = '0';
 c2 = '9';
 if(*b < c1 || c2 < *b)
 {
  c1 = 'a';
  c2 = 'z';
 }
 for(; ;)
 {
  if(*b < c1 || c2 < *b)
   break;
  *(ret++) = *(b++);
 }
 *ret = '\0';
 return( b );
}

int CheckStrLen(char *str)
{
 int i;
 for(i = 0; str[i] != '\0'; i++)
  ;
 return( i ); //終端文字を含まない仕様(全角文字にも未対応)
}

bool CheckStr2(BYTE *st1, char *st2)
{
 int i, len;
 len = CheckStrLen(st2);
 for(i = 0; i < len; i++)
  if(st1[i] != st2[i])
  {
   if(st1[i] == st2[i] + 0x20 && 'a' <= st1[i] && st1[i] <= 'z' && 'A' <= st2[i] && st2[i] <= 'Z');
   else if(st1[i] + 0x20 == st2[i] && 'A' <= st1[i] && st1[i] <= 'Z' && 'a' <= st2[i] && st2[i] <= 'z');
   else return( false );
  }
 return( true );
}

BYTE *GetStr2(BYTE *org, BYTE *toc, int word)
{
 int i;
 for(i = 0; i < word; i++)
  toc[i] = org[i];
 toc[word] = '\0';
 return( toc );
}

char *org_itoa(int kazu, char *ret_moji, int retu, char c)
{
 int i;
 for(i = 0; i < retu; i++)
  ret_moji[i] = c;
 for(i = retu - 1; i > 0; i--)
 {
  ret_moji[i] = '0' + kazu % 10;
  if(kazu - 10 < 0)
   break;
  kazu /= 10;
 }
 return( ret_moji );
}

char *nameCreate(long int no, char *name, int retu, char *c)
{
 int i = 0;
 org_itoa(no, name, retu, '0');
 name[retu] = '.';
 for(; ;)
 {
  name[retu+i+1] = c[i];
  i++;
  if(c[i-1] == '\0')
   break;
 }
 return( name );
}

/*
BYTE *Char2Byte(char *in, BYTE *out)
{
 BYTE *ret = out;
 for(; ;)
 {
  *(out++) = (BYTE)*(in++);
  if(*(out - 1) == '\0')
   break;
 }
 return( ret );
}
*/

BYTE *wwmsg(BYTE *r, BYTE *w)
{
 for(; ;)
 {
  if(*r == '\n')
   break;
  if(CheckStr2(r, "<br>"))
  {
   *(w++) = _BR;
   *(w++) = DUMMY;
   r += 4;
  }
  else
  {
   *(w++) = *(r + 1); //前後バイトを入れ替えて格納
   *(w++) = *r;   //(テキストが見えないように・・・あまり意味は無い)
   r += 2;
  }
 }
 return( w );
}

BYTE *text_flag(BYTE *r, BYTE *w)
{
 WORD u;
 DWORD ud;
 int i;
 BYTE mode = NULL;
 BYTE command[21];

 r = Get09AZ(r, command);
 if(CheckStr2(command, "br")) mode = _BR;
 else if(CheckStr2(command, "go")) mode = _GO;
 else if(CheckStr2(command, "wait")) mode = _WAIT;
 else if(CheckStr2(command, "sload")) mode = _SLOAD;
 else if(CheckStr2(command, "splay")) mode = _SPLAY;
 else if(CheckStr2(command, "gload")) mode = _GLOAD;
 else if(CheckStr2(command, "gdraw")) mode = _GDRAW;
 else if(CheckStr2(command, "gx")) mode = _GX;
 else if(CheckStr2(command, "gy")) mode = _GY;
 else if(CheckStr2(command, "gz")) mode = _GZ;
 else if(CheckStr2(command, "size")) mode = _SIZE;
 else if(CheckStr2(command, "color")) mode = _COLOR;
 else if(CheckStr2(command, "tx")) mode = _TX;
 else if(CheckStr2(command, "ty")) mode = _TY;
 else if(CheckStr2(command, "flag")) mode = _FLAG;

 if(mode == NULL)
  return( NULL );
 *(w++) = mode;
 *(w++) = DUMMY;

 //コード埋め込み作業(各種別コードはdefine(value.h)によって設定)
 if((mode % 10 == 2) || (mode % 10 == 3)) //WORD
 {
  r = Get09AZ(r, command);
  u = (WORD)org_atol(command);
  *(w++) = (u % 0x00FF);
  *(w++) = (u / 0x0100);
 }
 if((mode % 10 == 3) || (mode % 10 == 5)) //後半DWORD
 {
  r = Get09AZ(r, command);
  ud = (DWORD)org_atol(command);
  *(w++) = (BYTE)(ud % 0xFF);
  *(w++) = (BYTE)((ud / 0x00000100) % 0xFF);
  *(w++) = (BYTE)((ud / 0x00010000) % 0xFF);
  *(w++) = (BYTE)((ud / 0x01000000) % 0xFF);
 }
 if((mode % 10 == 4)) //flagタグ処理
  for(i = 0; i < u + 1; i++) //uには選択肢数が残っているはず
  {
   r = Get09AZ(r, command);
   u = (WORD)org_atol(command);
   *(w++) = (u % 0x00FF);
   *(w++) = (u / 0x0100);
   //全角文字が出てくるまで飛ばす
   for(; ! ((0x81 <= *r && *r <= 0x9f) || (0xe0 <= *r && *r <= 0xfc)); r++);
   w = wwmsg(r, w);
   //読み込みポインタを次の行頭に持ってくる
   for(; *r != '\n'; r++);
   r++;
  }

 return( w );
}

void main(void)
{
 long int i;
 long int fileCount = 0;
 long int size;
 char ch;
 BYTE line[1001];
 BYTE *r;
 BYTE read_buf[BUFFER_SIZE];
 BYTE *w;
 BYTE write_buf[BUFFER_SIZE];

 if(NULL == (read_fp = fopen(readFile, "rb")))
 {
  printf(" Not find. : %s", readFile);
  getchar();
  exit(1);
 }
 for(; ;) //全体
 {
  //有効な(?)1ブロックをread_bufに格納する
  for(i = 0; i < BUFFER_SIZE; i++)
  {
   read_buf[i] = 0;
   write_buf[i] = 0;
  }
  r = read_buf;
  for(; ;)
  {
   //一行読み込む
   ch = fgetc(read_fp);
   //\rを終端文字として扱う(MSDOS系CR+LF環境のみ有効)
   for(i = 0; (i < 1000) && (feof(read_fp) == 0) && (ch != '\r'); i++)
   {
    line[i] = (BYTE)ch;
    ch = fgetc(read_fp);
   }
   //文字列の最後に\nを追加のはず。。。
   ch = fgetc(read_fp);
   line[i] = ch;
   //暫定的だが行頭の**で終了とする
   if((line[0] == '*'))
    goto LOOP_EXIT;
   //暫定的だが行頭の::で区切りとする
   if((line[0] == ':'))
   {
    //終端コードのつもり。。。
    *(r++) = ':';
    *(r++) = ':';
    *(r++) = ':';
    break;
   }
   else
    for(i = 0; ; i++)
    {
     if(line[i] == '\n' || line[i] == '\r') //一応。。。
     {
      *(r++) = '\n';
      break;
     }
     else
      *(r++) = line[i];
    }
  }

  //read_bufに格納したテキストを簡易コード化
  r = read_buf;
  w = write_buf;
  for(; ;) //解析ループ
  {
   if((0x81 <= *r && *r <= 0x9f) || (0xe0 <= *r && *r <= 0xfc))
    w = wwmsg(r, w); //全角文字列処理ルーティンへ
   else if(*r == '<') //タグ処理ルーティンへ
   {
    if(NULL == (w = text_flag(++r, w)))
     goto ErrInn;
   }
   else if(*r != '\n') //空行は飛ばす
   {
ErrInn:   //エラー処理
    printf("Error  %ld: %c(%d) in Block %ld", (long)(r - read_buf), (char)*r, (int)*r, fileCount);
    getchar();
    exit(1);
   }
   //読み込みポインタを次の行頭に持ってくる
   for(; *r != '\n'; r++);
   r++;
   //終了判定
   if(*r == ':')
    break;
  }

  //write_bufの有効サイズを決定
  *(w++) = 'E';
  *(w++) = 'N';
  *(w++) = 'D';
  for(size = 0; ; size++)
   if(write_buf[size] == 'E' && write_buf[size+1] == 'N' && write_buf[size+2] == 'D')
    break;

  // 出来上がったwrite_bufをファイルに書き出す
  if(NULL == (write_fp = fopen(nameCreate(fileCount, writeFile, 4, "tex"), "wb")))
  {
   printf("Don't open : %s", writeFile);
   getchar();
   exit(1);
  }
  fwrite(write_buf, size, 1, write_fp);
  fclose(write_fp);

  // fileCountを一要素増やし、またループへ
  fileCount++;
 }
LOOP_EXIT: // 全体ループからの脱出
 fclose(read_fp);
 printf("Complete!!");
 getchar();
}

はてなTシャツ欲しい!

買うと言っておいて何だが、
はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい! はてなTシャツ欲しい!
ということで、「〜日記に「はてなTシャツ欲しい!」と書いて、はてなオリジナルTシャツ2007をもらおう!10名様に当たるプレゼントキャンペーン実施!〜」に参加。


えーと、あとは好きなはてなキーワードを3つ書けばいいのか・・・。

という感じかな。


理由としては、

どうぞご利用ください。
はてなキーワードの奥の深さに気づくキッカケになりましたw
死亡フラグ
いろいろなフレーズが載ってて面白い。(ちょっと違うな〜、ってのもあるけど)
冷蔵庫2.0
Webの広がりを感じましたw


あと、最近だと

もツボだけど、まあ、これはいいっしょw

はて☆すた(と、はてメッ) リリース記念にカキコ

う〜ん。オレは はてメッ を目にすることはあるのかな?
http://d.hatena.ne.jp/hatenastar/
まあそれは置いといて、



よおし、全然見出しと関係無いが「はてなTシャツ」買っちゃうぞ!

https://www.hatena.ne.jp/info/hatenatshirts

アンテナのロゴが結構良い感じだけど、ベーシックのひし形wも捨てがたし…。
まっ、ひし形かなあ。


そういや、去年(?)くらいに風力Tシャツを注文したと思うけど、アレどうなったんだっけかな・・・?