2010年12月3日金曜日

FireFoxでFTMって

IE TAB使えばいいんだよね、そのためのIE TABだもんね

TechNetでもFTMつかえたわ

TechNetでもFTMが使えた。
ただ、FTMってIEじゃないと動かないんだよね?
そこがちょっと嫌

TechNet

MS TechNet サブスクリプションを購入
いろいろ使ってみたいんだけど、ダウンロードが途中で止まってしまってどうにもならない。
MSDNのようなダウンローダは無いのだろうか?
困った困った

なお、火曜日の午前中でネットから購入し、木曜の深夜にダウンロードできるようになりました。
MSに限らず外資系はこの時期ほとんど仕事してくれません。

iPad のアプリ審査も新規アプリに関しては、
11月16日からずっと止まったままだとか話題になっています。

2010年12月1日水曜日

うちの猫が死んだ

たまという猫が死んでしまった。
12/1 07:25
体調を崩してあっという間だった。
ちょっと前までは元気だったのになぁ・・・

2010年11月28日日曜日

iPadについて

みなさん iPad 使ってますか?
自分はもっぱら本を持ち運ぶ代わりに iPad を持ち運んでいます。
ほとんどの自分の手持ちの本はドキュメントスキャナで取り込んで、
元の本は捨てました。

ところで、iPad をもてあましているという人がいるようです。
自分はそういう人たちは、iPad が必要なかった人だと思います。
すぐに売ってしまったほうがいいでしょう。
iPad を必要とする人は絶対にいます。
自分はその一人です。

2010年11月26日金曜日

ものづくりをはじめるとやめられない

食料でもガジェットでも絵画でも、人間は物を作ることがやめられない。
他の動物でも巣くらいは作るが、それすらもしない動物もたくさんいる。
「人間の価値は物をつくることだ」と自分は信じている。

2010年11月21日日曜日

1フレームで限界を超えてテクスチャを読み続けては駄目みたいだ。

コメントにも書いたが、1フレームで5枚読んだら落ちた。
そこで1フレームずつ5フレームに分けて5枚を読んだら落ちなくなったのだ。
アップルのサイトには「フレームの最初にテクスチャを読んではいけない」という説明もあるのだが、
1フレームで無理矢理5枚読もうとすると、
フレームの限界を超えて次のフレームの先頭に重なって読み込んでしまうのかもしれない。
まぁ本当の所はよくわからないが、今は落ちなくなったのは確かである。

2010年11月9日火曜日

iPadが落ちるのはやはりメモリだ

1024x1024の絵を6枚までなら落ちない。
7枚読むと落ちないときもあるし、落ちるときもある。

落ちるタイミングは読み替えのタイミングだ。
もしかしたらゆっくり読み替えれば落ちないのかもしれない。
だが、それはだましながら動かしているようなものなので、
しっかりと6枚という限界に注意しながら設計したほうがいい。

DevCenterの説明を読むと、
(1)起動時にテクスチャは全部読むようにする。
(2)1024x1024はでかいので512x512などに小分けしたほうがいい

さらに別の書き込みを読むと、
テクスチャの破棄をしてもメモリ中のどこかに残っているようで、
すぐにメモリが解放されていないという記述があった。

このあたりはOS4とかで改良されるのだろうか、
自分はiPadしか手にしていないのでよくわからない。

2010年11月7日日曜日

最近のお仕事

仕事が終わってからであればブログに書いても問題ないだろうと思うので書こうと思う。

少し前にiPadの「リルぷりっアプリ」というのを作った。
残念だが最後のビルドでしくじったため、締め切りに間に合わなかった。

経緯は以下のようなものだ。
(1)当時、提出はバイナリのみということだったのだが、
   ソースを提出し、セガでビルドをする必要があるということで、
   仕方なくソースの提出をした。
   ソースの提出をするのであれば、
   その件についてきちんとお話をするべきだ。
   切羽詰まった状態で有耶無耶のままソースを提出したくは無かった。
   現在もソースの提出についてはグレーのまま作業をしているが、
   自分は自分のソースの著作権を主張させていただく。

(2)当日の自分には別件があり、余裕がなく、
   秋葉で急遽PocketWiFiを購入して、茶店からアップをした。
   時間もかかり、何度もやり直せる状況ではなく、かなり焦っていた。

(3)自分で間違いに気がついて2日後には電話、およびメールをした。
   セガ社ではないのだが、
   取引先の会社に電話、およびメールをし、正しいバイナリは渡した。

(4)バイナリ名称
   最終提出バイナリと自分が間違ったソースからビルドしたバイナリでは、
   出来上がるバイナリ名称が異なる。
   少し注意すればすぐに気がついたはずだった。
  (たとえ自分でなくとも、わかるはず)

まぁ自分が間違ったのは事実なので、上記はその言い訳にしかすぎないのだが・・・

さらに、不幸なことに、セガ社ではおそらく、、、
自分が提出したソースをビルドする前に、
「すべてのターゲットをクリーンアップ」してからビルドをしていない。

自分のiPadでは落ちないのだが、AppStoreから落としたバイナリは落ちるのだ。
iPadではビルドする前に「クリーンアップ」するというのは欠かせない。

自分としてはこういった事が二度と起きないようにしたいのだが、
毎回スケジュールは切羽詰まってくる。

そして自分としては今回(まだ終わってないので話せない)も、
前回の「リルぷりっアプリ」も赤字だ。

これでは、続けられない。

そこで、最近のお仕事だが、3社ほど回ってみた。

どこも好印象。
自分の仕事はみなさん認めてくださる。

そのうち一件は1年のお付き合いになるかもしれない。

iPadでは無いが、ファームやWindows系、そしてもしかしたらAndroidのお仕事だ。
今後も、このように自分に出来ることなら何でもやって行こうと思う。

2010年10月27日水曜日

人生はとても短い

自分の叔父は真空管アンプを作り、オーディオを趣味とする人で、
50を超えてからDOS/Vを自分で組み立て始め、
Config.sysやAutoexec.batなんかを編集してメモリを空けたりパス通したり、
ごちゃごちゃした作業が全然平気な人だった。

個人事業主でCADを覚え、ずっとCAD屋をやっていたのだ。
しかしその叔父も癌であっという間に亡くなった。
すぐれた頭脳をもっていても、生きる気概に満ちていても、死ぬ時は死ぬ。
所詮人間なんてものは虫の生き死にと同等の生き方しか出来ない。
死の前では生物はみな平等だ。
人間様はこの地球上で他の生命よりも優れているのだと勘違いしてはいけない。

自分はこの人生の中でどこまで何ができるのだろうか
小さい頃の夢だったプログラマにはなる事ができた。
しかし、それは、ただ道具を手に入れただけにすぎない。
物をつくる準備が出来ただけなのだ。

2010年10月19日火曜日

Base64エンコード

---Base64.h---
// Base64.h : Base64.DLL のメイン ヘッダー ファイル
//

#pragma once


class __declspec(dllexport)CBase64
{
public:
 CBase64();
public:
 int gettableint(unsigned char str);
 unsigned short Encode(unsigned char* data, unsigned short datalen, unsigned char* buffer);
 unsigned short Decode(unsigned char* data, unsigned short datalen, unsigned char* buffer);
};


---Base64.cpp---
// Base64.cpp : DLL の初期化ルーチンです。
//


#include "Base64.h"

#if _DEBUG
#define _CRTDBG_MAP_ALLOC
#include 
#include 
#endif


// CBase64App コンストラクション

CBase64::CBase64()
{
   //初期処理
#if _DEBUG
 _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif

}


// CBase64App 初期化
// US-ASCII テーブル
static char base64_table[] = {
    'A','B','C','D','E','F','G','H',
    'I','J','K','L','M','N','O','P',
    'Q','R','S','T','U','V','W','X',
    'Y','Z','a','b','c','d','e','f',
    'g','h','i','j','k','l','m','n',
    'o','p','q','r','s','t','u','v',
    'w','x','y','z','0','1','2','3',
    '4','5','6','7','8','9','+','/'
//  '='
};


#define IsBit(c)    ((unsigned char)c) ? 0x01 : 0x00


int CBase64::gettableint(unsigned char str) {
    int i;
 for(i = 0; i < 64; i++) {
        if(str == base64_table[i]) break;
    }
    return i;
}

unsigned short CBase64::Encode(unsigned char* data, unsigned short datalen, unsigned char* buffer)
{
    unsigned short byte = 0;
    unsigned char bit = 0x80;
    unsigned char tmp;
    unsigned short size = 0, line = 0;
    int i;

    while(1) {
  if(byte >= datalen){
   break;
  }
        *buffer = '\0';
        for(i = 5; i >= 0; i--) {
            tmp = IsBit(data[byte] & bit);
            *buffer |= tmp ? (tmp << i) : *buffer;
            bit >>= 1;
            if(bit == 0x00) {
                byte++;
    if(byte >= datalen){
     break;
    }
                bit = 0x80;
            }
        }
        *buffer = base64_table[*buffer];
        buffer++;
        size++;
        line++;
        // 改行
  /*
        if(line >= 76) {
            buffer[0] = '\r';
            buffer[1] = '\n';
//          buffer[2] = '\0';
            buffer += 2;
            size += 2;
            line = 0;
        }
  */
  // 今回は改行しないようにする
    }

    tmp = (unsigned char)((size / 4 * 4 + 4) - size);
    while(tmp--) {
        *buffer = '=';
        buffer++;
        size++;
        // 改行
  /*
        if(line >= 76) {
            buffer[0] = '\r';
            buffer[1] = '\n';
            buffer += 2;
            size += 2;
            line = 0;
        }
  */
  // 今回は改行しないようにする
    }
    *buffer = '\0';
    return size;
}

unsigned short CBase64::Decode(unsigned char* data, unsigned short datalen, unsigned char* buffer)
{
    int bit = 7;
    unsigned char tmp;
    unsigned char i, t;
    unsigned short size = 0;
    unsigned short byte=0;

    *buffer = '\0';
    while(1) {
        if( (data[byte] == '=') || (data[byte] == '\0') || (byte > datalen) )
            break;
        if( (data[byte] == '\n') || (data[byte] == '\r') ) {
            byte++;
            continue;
        }
        tmp = gettableint(data[byte]);
        if(tmp > 63) return 0;
        for(i = 0x20; i != 0; i >>= 1) {
            t = IsBit(tmp & i);
            *buffer |= t ? t << bit : *buffer;
            bit--;
            if(bit < 0) {
                buffer++;
                *buffer = '\0';
                size++;
                bit = 7;
            }
        }
        byte++;
    }

    return size;
}