2009年12月31日木曜日

(Code: c) gtrans2

Google Translate を利用して露英翻訳するCのコードです。以前書いたコードを改良。
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>

#define FMT_WARN     "Warning: %s\n"
#define FMT_WARN_US  "Warning: unknown state %s\n"
#define FMT_ERR      "Error: %s\n"
#define FMT_ERR_WITH "Error: %s (%d): %s\n"

#define OFFSET 24
static const char *url = "http://translate.google.com/translate_a/t";
static const char *data = "client=t&sl=ru&tl=en&text=";
static const char *useragent = "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
static const char *result_null = "{\"src\":\"el\"}";


static char *
urie(const char *text)
{
  char *text_urie;
  char *p;

  text_urie = malloc(strlen(text) * 3 + 1);
  p = text_urie;
  while (*text) {
    snprintf(p, 4, "%%%02X", (unsigned char) *text);
    text++;
    p += 3;
  }
  *p = '\0';

  return text_urie;
}

static char *
unesc(const char *str)
{
  int len;
  char *str_unesc;
  char *p;

  len = strlen(str);
  str_unesc = malloc(len + 1);
  p = str_unesc;
  while (*str) {
    if (*str != '\\') {
      *p = *str;
    } else {
      str++;
      if (*str != 'u') {
*p = *str;
      } else {
str++;
if (*str == '0') {
  str++;
} else {
  fprintf(stderr, FMT_WARN_US, "!(*str == '0') (1)");
  return NULL;
}
if (*str == '0') {
  str++;
} else {
  fprintf(stderr, FMT_WARN_US, "!(*str == '0') (2)");
  return NULL;
}
if (*str == '2') {
  str++;
  if (*str == '6') {
    *p = '&';
  } else {
    fprintf(stderr, FMT_WARN_US, "!(*str == '6')");
    return NULL;
  }   
} else if (*str == '3') {
  str++;
  if (*str == 'c') {
    *p = '<';
  } else if (*str == 'e') {
    *p = '>';
  } else {
    fprintf(stderr, FMT_WARN_US, "!((*str == 'c') || (*str == 'e'))");
    return NULL;
  }      
} else {
  fprintf(stderr, FMT_WARN_US, "!((*str == '2') || (*str == '3'))");
  return NULL;
}
      }
    }
    str++;
    p++;
  }
  *p = '\0';

  return str_unesc;
}

static size_t
write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{
  int len = size * nmemb;
  char result[len + 1];
  char *p, *p_e;
  int len_trans;
  char *trans;
  char *trans_unesc;

  if (len) {
    strncpy(result, buffer, len);
    result[len] = '\0';
    if (strcmp(result, result_null)) {
      if (len < OFFSET) {
fprintf(stderr, FMT_WARN_US, "(len < OFFSET)");
return -1;
      }
      p = result + OFFSET;
      p_e = p;
      while (*p_e != '"' && *p_e) {
if (*p_e == '\\')
  p_e++;
p_e++;
      }
      if (*p_e != '"') {
fprintf(stderr, FMT_WARN_US, "(*p_e != '\"')");
return -1;
      }
      len_trans = p_e - p;
      if (len_trans) {
trans = malloc(len_trans + 1);
strncpy(trans, p, len_trans);
trans[len_trans] = '\0';
if ((trans_unesc = unesc(trans)) != NULL) {
  printf("%s\n", trans_unesc);
} else {
  fprintf(stderr, FMT_WARN, "unesc failed");
  printf("%s\n", trans);
}
free(trans_unesc);
free(trans);
      }
    }
  }

  return len;
}


int
main(int argc, char **argv)
{
  CURL *curl;
  char *text_urie;
  int size_data_all, size_url_all;
  char *data_all, *url_all;
  CURLcode res;
  struct curl_slist *headers = NULL;

  if (argc < 2) {
    fprintf(stderr, FMT_ERR, "need an arg (Russian phrase)");
    return 1;
  } else if (argc > 2) {
    fprintf(stderr, FMT_ERR, "too many args. need just an arg");
    return 1;
  }    

  curl = curl_easy_init();
  if(!curl) {
    fprintf(stderr, FMT_ERR, "curl_easy_init() failed");
    return 1;
  }

  text_urie = urie(argv[1]);

  size_data_all = strlen(data) + strlen(text_urie) + 1;
  data_all = malloc(size_data_all);
  strcpy(data_all, data);
  strcat(data_all, text_urie);
  free(text_urie);

  size_url_all = strlen(url) + 1 + size_data_all;
  url_all = malloc(size_url_all);
  snprintf(url_all, size_url_all, "%s?%s", url, data_all);
  free(data_all);

  curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
  curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
  curl_easy_setopt(curl, CURLOPT_URL, url_all);
  headers = curl_slist_append(headers, useragent);
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 

  res = curl_easy_perform(curl);

  free(url_all);
  curl_slist_free_all(headers);
  curl_easy_cleanup(curl);

  if(res) {
    fprintf(stderr, FMT_ERR_WITH, "curl_easy_perform() failed",
    res, curl_easy_strerror(res));
    return 1;
  }

  return 0;
}

  • urie()で翻訳したいフレーズをURIエンコード

  • libcurlで翻訳したいフレーズをGETで送信

  • エスケープ文字(\)を考慮して24バイトのオフセットで結果をパース

  • unesc()でエスケープ文字と特定の記号(\, &, <, >)をアンエスケープ処理

以前に書いたコードはエスケープや数値文字参照を考慮してませんでした。

「я сказал "да"」のようにダブルクオーテーションマーク(")が含まれるフレーズを翻訳すると下の結果が返ってくる。ダブルクオーテーションマークのエスケープに"\"が使われている模様。
{"sentences":[{"trans":"I said \"yes\"","orig":"я сказал \"да\"","translit":""}],"src":"ky"}
特定の記号を含むフレーズ、例えば「& < >」を翻訳すると下の結果が返ってくる。数値文字参照になっている模様。
{"sentences":[{"trans":"\u0026 \u003c\u003e","orig":"\u0026 \u003c \u003e","translit":""}],"src":"en"}
このような翻訳結果をエスケープ文字を考慮してパースした後、unesc()でアンエスケープ処理して対応しました。


コンパイル

実際にはMakefileを書いてmakeで済ませてます。コンパイル前にlibcurlのdevパッケージをインストールしてます。
$ gcc -Wall -O2 `curl-config --cflags`  `curl-config --libs`  gtrans.c   -o gtrans

テスト翻訳
$ ./gtrans 'я сказал "да"'
I said "yes"

$ ./gtrans 'вы & я'
You & I

$ ./gtrans '<<<<<'
<<<<<

$ ./gtrans '>>>>>'
>>>>>
まずまず動作。ダブルクオーテーションや特定の記号を含んだフレーズも問題なく翻訳できるようになりました。


環境

OS: Linux
debian-lenny
libcurl-7.18.2
 

2009年12月20日日曜日

(Code: c) gtrans

Google Translate を利用して露英翻訳するCのコードです。以前書いたシェルスクリプトをCでリライト。
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
#include <string.h>

#define OFFSET 24
static const char *url = "http://translate.google.com/translate_a/t";
static const char *data = "client=t&sl=ru&tl=en&text=";
static const char *useragent = "User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)";
static const char *result_null = "{\"src\":\"el\"}";


static char *
urie(const char *text)
{
  char *text_urie;
  char *p;

  text_urie = malloc(strlen(text) * 3 + 1);
  p = text_urie;
  while (*text) {
    snprintf(p, 4, "%%%02X", (unsigned char) *text);
    text++;
    p += 3;
  }
  *p = '\0';

  return text_urie;
}

static size_t
write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{
  int len = size * nmemb;
  char result[len + 1];
  char *p, *p_e;
  int len_trans;
  char *trans;

  if (len) {
    strncpy(result, buffer, len);
    result[len] = '\0';
    if (strcmp(result, result_null)) {
      if (len < OFFSET) {
fprintf(stderr, "Warning: unknown state (len < OFFSET)\n");
return -1;
      }
      p = result + OFFSET;
      p_e = p;
      while (*p_e != '"' && *p_e)
p_e++;
      if (*p_e != '"') {
fprintf(stderr, "Warning: unknown state (*p_e != '\"')\n");
return -1;
      }
      len_trans = p_e - p;
      if (len_trans) {
trans = malloc(len_trans + 1);
strncpy(trans, p, len_trans);
trans[len_trans] = '\0';
printf("%s\n", trans);
free(trans);
      }
    }
  }

  return len;
}


int
main(int argc, char **argv)
{
  CURL *curl;
  char *text_urie;
  int size_data_all, size_url_all;
  char *data_all, *url_all;
  CURLcode res;
  struct curl_slist *headers = NULL;

  if (argc < 2) {
    fprintf(stderr, "Error: need an arg (Russian phrase)\n");
    return 1;
  } else if (argc > 2) {
    fprintf(stderr, "Error: too many args. need just an arg (Russian phrase)\n");
    return 1;
  }    

  curl = curl_easy_init();
  if(!curl) {
    fprintf(stderr, "Error: curl_easy_init() failed\n");
    return 1;
  }

  text_urie = urie(argv[1]);

  size_data_all = strlen(data) + strlen(text_urie) + 1;
  data_all = malloc(size_data_all);
  strcpy(data_all, data);
  strcat(data_all, text_urie);
  free(text_urie);

  size_url_all = strlen(url) + 1 + size_data_all;
  url_all = malloc(size_url_all);
  snprintf(url_all, size_url_all, "%s?%s", url, data_all);
  free(data_all);

  curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
  curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
  curl_easy_setopt(curl, CURLOPT_URL, url_all);
  headers = curl_slist_append(headers, useragent);
  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
  curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); 

  res = curl_easy_perform(curl);

  free(url_all);
  curl_slist_free_all(headers);
  curl_easy_cleanup(curl);

  if(res) {
    fprintf(stderr, "Error: curl_easy_perform() failed (%d): %s\n",
    res, curl_easy_strerror(res));
    return 1;
  }

  return 0;
}

  • urie()で翻訳したいフレーズをURIエンコード

  • libcurlで翻訳したいフレーズをGETで送信

  • 24バイトのオフセットで結果をパース

UserAgentがcurlだと拒絶される、空だと翻訳結果がKOI8-Rで返ってきてUTF-8の環境でパースしづらくなるのでIEに偽装しています。UAがIEやFirefoxだとUTF-8で結果が返ってくるみたい。


コンパイル

実際にはMakefileを書いてmakeで済ませてます。コンパイル前にlibcurlのdevパッケージをインストールしてます。
$ gcc -Wall -O2 `curl-config --cflags`  `curl-config --libs`  gtrans.c   -o gtrans


テスト翻訳
$ ./gtrans 'здравств'
hello

$ ./gtrans 'я из Японии'
I'm from Japan

$ ./gtrans 'только хорошие умирают молодыми'
only the good die young

$ ./gtrans 'through ascii phrase'
through ascii phrase

$ ./gtrans ' '
(出力なし)

$ ./gtrans ''
(出力なし)

$ ./gtrans '誤って日本語を入力'
誤っ て 日本語 を 入力

$ ./gtrans `echo "えすじす" | iconv -t SJIS-WIN`
(文字化け)
まずまずシェルスクリプト版と同じ動作。関数化してチャットロガーに仕込む下準備が整った!Cでlibcurlをはじめて使ったのだけどすごく便利でした。


環境

OS: Linux
debian-lenny
libcurl-7.18.2
 

Makefile

小さいコードを書くときによく使うMakefileです。

カレントディレクトリーにある*.cファイルを全部コンパイル。"make print"でファイルの行数を出力。CFLAGSとLDFLAGSは用途により適当に修正します。下のコードはlibcurlを使うコードをmakeするときのものです。
PROGS = $(basename $(wildcard *.c))

CC = gcc
CFLAGS = -Wall -O2 `curl-config --cflags`
LDFLAGS = `curl-config --libs`

all: $(PROGS)

print:
wc -l *.c

clean:
$(RM) $(PROGS)


環境

OS: Linux
debian-lenny
make-3.81
 

2009年12月3日木曜日

(Code: sh) gtrans2

Google Translate を利用して露英翻訳するシェルスクリプトです。以前書いたコードを改良。
#!/bin/sh

PROG=`basename $0`

## check cmd
LIST="curl urie"
for CMD in $LIST ;do
TEST_CMD=`which $CMD`
if [ -z "$TEST_CMD" ] ; then
echo "$PROG: Error: we need command \"$CMD\"" >&2
exit 1
fi
done

## check arg
if [ -z "$1" ] ; then
echo "$PROG: Error: need an arg (Russian phrase)" >&2
exit 1
elif [ $# -gt 1 ] ; then
echo "$PROG: Error: too many args. need just an arg (Russian phrase)" >&2
exit 1
fi
TEXT="$1"


## body
UA='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)'
URL=http://translate.google.com/translate_a/t
TEXT_URIE=`echo "$TEXT" | urie`

RESULT=`curl -Ss -m 10 -G -A "$UA" "$URL" -d client=t -d text="$TEXT_URIE" -d sl=ru -d tl=en`
TEST_CURL=$?
#echo "$RESULT" ##debug
if [ $TEST_CURL -ne 0 ] ; then
echo "$PROG: Error: curl failed" >&2
exit 1
fi

TEST_RESULT=`echo "$RESULT" | grep '"trans"'`
if [ -n "$TEST_RESULT" ] ; then ## for empty translation result {"src":"en"}
echo "$RESULT" | sed 's/.*"trans":"\([^"]*\)".*/\1/'
fi

  • urieで翻訳したいフレーズをURIエンコード

  • curlで翻訳したいフレーズをGETで送信

  • sedで結果をパース

UserAgentがcurlだと拒絶される、空だと翻訳結果がKOI8-Rで返ってきてUTF-8の環境でパースしづらくなるのでIEに偽装しています。UAがIEやFirefoxだとUTF-8で結果が返ってくるみたい。以前書いたコードと異なり"http://translate.google.com/"でなく"http://translate.google.com/translate_a/t"に翻訳したいフレーズを送信しています。
{"sentences":[{"trans":"short","orig":"короткий","translit":""}],"dict":[{"pos":"","terms":["s"]},{"pos":"adjective","terms":["short","brief","little","small","short","skimpy"]}],"src":"ru"}
こんな感じの翻訳結果をGoogleから受信できます。"http://translate.google.com/"のものより短い!パースし易い!!URIエンコーディングにCで書いたコマンド(urie)を使っています。GETで送信(curl -G)するとPOSTするより送信データーが69バイト短くて済むのでそうしてます。


テスト翻訳
$ ./gtrans 'здравств'
hello

$ ./gtrans 'я из Японии'
I'm from Japan

$ ./gtrans 'только хорошие умирают молодыми'
only the good die young

$ ./gtrans 'through ascii phrase'
through ascii phrase

$ ./gtrans ' '
(出力なし)

$ ./gtrans '誤って日本語を入力'
誤っ て 日本語 を 入力

$ ./gtrans `echo "えすじす" | iconv -t SJIS-WIN`
????????
まずまず動作。LANG=ja_JP.UTF-8のシェルでテスト翻訳しました。
文字コードが混在した環境で自動翻訳しようとすると翻訳フレーズごとに文字コードの自動判定も必要になりそう。ロシア版ポトリスではロシア語にCP1251、日本語にSJIS-WINが使われてるみたい。


環境

OS: Linux
debian-lenny
 

(Code: c) urie

URIエンコーディングを意図したコードです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BLOCK 1024*8


int main(int argc, char *argv[])
{
int n;
char buf[BLOCK + 1];
unsigned char *str = NULL;
int size_str = 0;

/* read stdin */
while (1) {
n = fread(buf ,1 , BLOCK, stdin);
if (n == 0) {
str = realloc(str, size_str + 1);
break;
} else if (n < 0) {
perror("fread");
return -1;
}
str = realloc(str, size_str + n);
memcpy(str + size_str, buf, n);
size_str += n;
}
*(str + size_str) = '\0';

/* uri encoding */
while (*str) {
printf("%%%02X", *str);
str++;
}

return 0;
}
実用には問題ないけどアスキーな文字までエンコードしてしまう。GLibのg_uri_escape_stringとか使えば、その辺キッチリできそう。
RFC読まなきゃ…と思って単純に"Uniform Resource Identifier"で検索したら20文献多すぎ挫折しました。


URIエンコーディング関連? RFC

2079 Definition of an X.500 Attribute Type and an Object Class to Hold
Uniform Resource Identifiers (URIs). M. Smith. January 1997. (Format:
TXT=8757 bytes) (Status: PROPOSED STANDARD)

2168 Resolution of Uniform Resource Identifiers using the Domain Name
System. R. Daniel, M. Mealling. June 1997. (Format: TXT=46528 bytes)
(Obsoleted by RFC3401, RFC3402, RFC3403, RFC3404) (Updated by
RFC2915) (Status: EXPERIMENTAL)

2396 Uniform Resource Identifiers (URI): Generic Syntax. T.
Berners-Lee, R. Fielding, L. Masinter. August 1998. (Format:
TXT=83639 bytes) (Obsoleted by RFC3986) (Updates RFC1808, RFC1738)
(Updated by RFC2732) (Status: DRAFT STANDARD)

2838 Uniform Resource Identifiers for Television Broadcasts. D.
Zigmond, M. Vickers. May 2000. (Format: TXT=11405 bytes) (Status:
INFORMATIONAL)

3305 Report from the Joint W3C/IETF URI Planning Interest Group:
Uniform Resource Identifiers (URIs), URLs, and Uniform Resource Names
(URNs): Clarifications and Recommendations. M. Mealling, Ed., R.
Denenberg, Ed.. August 2002. (Format: TXT=21793 bytes) (Status:
INFORMATIONAL)

3404 Dynamic Delegation Discovery System (DDDS) Part Four: The Uniform
Resource Identifiers (URI). M. Mealling. October 2002. (Format:
TXT=40124 bytes) (Obsoletes RFC2915, RFC2168) (Status: PROPOSED
STANDARD)

3617 Uniform Resource Identifier (URI) Scheme and Applicability
Statement for the Trivial File Transfer Protocol (TFTP). E. Lear.
October 2003. (Format: TXT=11848 bytes) (Status: INFORMATIONAL)

3761 The E.164 to Uniform Resource Identifiers (URI) Dynamic
Delegation Discovery System (DDDS) Application (ENUM). P. Faltstrom,
M. Mealling. April 2004. (Format: TXT=41559 bytes) (Obsoletes
RFC2916) (Status: PROPOSED STANDARD)

3969 The Internet Assigned Number Authority (IANA) Uniform Resource
Identifier (URI) Parameter Registry for the Session Initiation
Protocol (SIP). G. Camarillo. December 2004. (Format: TXT=12119
bytes) (Updates RFC3427) (Also BCP0099) (Status: BEST CURRENT
PRACTICE)

3986 Uniform Resource Identifier (URI): Generic Syntax. T.
Berners-Lee, R. Fielding, L. Masinter. January 2005. (Format:
TXT=141811 bytes) (Obsoletes RFC2732, RFC2396, RFC1808) (Updates
RFC1738) (Also STD0066) (Status: STANDARD)

4051 Additional XML Security Uniform Resource Identifiers (URIs). D.
Eastlake 3rd. April 2005. (Format: TXT=33368 bytes) (Status: PROPOSED
STANDARD)

4088 Uniform Resource Identifier (URI) Scheme for the Simple Network
Management Protocol (SNMP). D. Black, K. McCloghrie, J.
Schoenwaelder. June 2005. (Format: TXT=43019 bytes) (Status: PROPOSED
STANDARD)

4501 Domain Name System Uniform Resource Identifiers. S. Josefsson.
May 2006. (Format: TXT=20990 bytes) (Status: PROPOSED STANDARD)

4622 Internationalized Resource Identifiers (IRIs) and Uniform
Resource Identifiers (URIs) for the Extensible Messaging and Presence
Protocol (XMPP). P. Saint-Andre. July 2006. (Format: TXT=49968 bytes)
(Obsoleted by RFC5122) (Status: PROPOSED STANDARD)

4904 Representing Trunk Groups in tel/sip Uniform Resource Identifiers
(URIs). V. Gurbani, C. Jennings. June 2007. (Format: TXT=41027 bytes)
(Status: PROPOSED STANDARD)

4967 Dial String Parameter for the Session Initiation Protocol Uniform
Resource Identifier. B. Rosen. July 2007. (Format: TXT=12659 bytes)
(Status: PROPOSED STANDARD)

5017 MIB Textual Conventions for Uniform Resource Identifiers (URIs).
D. McWalter, Ed.. September 2007. (Format: TXT=14826 bytes) (Status:
PROPOSED STANDARD)

5122 Internationalized Resource Identifiers (IRIs) and Uniform
Resource Identifiers (URIs) for the Extensible Messaging and Presence
Protocol (XMPP). P. Saint-Andre. February 2008. (Format: TXT=55566
bytes) (Obsoletes RFC4622) (Status: PROPOSED STANDARD)

5341 The Internet Assigned Number Authority (IANA) tel Uniform
Resource Identifier (URI) Parameter Registry. C. Jennings, V.
Gurbani. September 2008. (Format: TXT=13944 bytes) (Updates RFC3966)
(Status: PROPOSED STANDARD)

5527 Combined User and Infrastructure ENUM in the e164.arpa Tree. M.
Haberler, O. Lendl, R. Stastny. May 2009. (Format: TXT=20733 bytes)
(Status: INFORMATIONAL)


環境

OS: Linux
debian-lenny
 

2009年12月1日火曜日

(Code: sh) gtrans

Google Translate を利用して露英翻訳するシェルスクリプトです。
#!/bin/sh

if [ -z "$1" ] ; then
  echo "Error: need an arg (Russian phrase)" >&2
  exit 1
elif [ $# -gt 1 ] ; then
  echo "Error: too many args. need just an arg (Russian phrase)" >&2
  exit 1
fi
TEXT="$1"

UA='Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)'
curl -Ss -m 10 -A "$UA" http://translate.google.com/ -d js=n -d prev=_t -d hl=en -d ie=UTF-8 -d text="$TEXT" -d file= -d sl=ru -d tl=en | awk 'NR == 8' | sed 's/.*<span id=result_box class="short_text"><[^>]\+>\([^/]\+\)<\/.*/\1/' | xmlstarlet unesc

  • curlで翻訳したいフレーズをPOST

  • awkとsedで結果をパース

  • xmlstarletで文字参照("&#39;"みたいなの)を解除

UserAgentがcurlだと拒絶される、空だと翻訳結果がKOI8-Rで返ってきてUTF-8の環境でパースしづらくなるのでIEに偽装しています。UAがIEやFirefoxだとUTF-8で結果が返ってくるみたい。


テスト翻訳
$ ./gtrans 'здравств'
hello

$ ./gtrans 'я из Японии'
I'm from Japan

$ ./gtrans 'только хорошие умирают молодыми'
only the good die young

$ ./gtrans
Error: need an arg (Russian phrase)

$ ./gtrans a b
Error: too many args. need just an arg (Russian phrase)
まずまず動いた!LANG=ja_JP.UTF-8のシェルでテスト翻訳しました。
ロシア版ポトリスのチャット自動翻訳に向け、ググル先生翻訳へPOSTするデーターの確認用に書いてみました。


環境

OS: Linux
debian-lenny
 

2009年11月30日月曜日

(Code: c) ChatLoggerのテスト

ロシア語のロギング結果。
22:54:57   [A****       ] зачем нам а*****
22:55:12   [К******    ] )
22:55:12   [W*****      ] он учит русский
22:55:19   [К******    ] молодец ))
22:55:57   [d********** ] )
22:56:05   [Д********  ] член.забыл ф4
22:56:31   [Д********  ] кышь
22:56:33   [К******    ] )))
22:56:35   [d********** ] гут
22:56:39   [W*****      ] ух
22:56:46   [h******     ] на нах
22:56:46   [К******    ] в попу)
22:56:47   [d********** ] ах ты
22:56:49   [a*****      ] только хорошие умирают молодыми
22:57:11   [К******    ] член )
22:57:16   [К******    ] да ты промохнёшся)
22:57:18   [h******     ] а***** заговорил по русски
22:57:20   [К******    ] член же()
22:57:22   [d********** ] бля
22:57:34   [К******    ] ))))воть и сё
22:57:39   [К******    ] хус меня не убй)
22:57:41   [d********** ] неа
22:57:42   [a*****      ] я японский
22:57:47   [a*****      ] я знаю только несколько слов
22:57:55   [h******     ] молодец
22:57:57   [a*****      ] прив!
22:57:59   [К******    ] хуй знаеш)?
22:58:04   [К******    ]  этоже японское слово)
22:58:07   [d********** ] бляяя
22:58:17   [К******    ] ))точно бля
22:58:22   [К******    ] ())))
22:58:28   [К******    ] чекист прям)
22:58:37   [d********** ] ты бы еще дуп добавил
22:59:31   [Д********  ] a***** как дела?
22:59:35   [h******     ] хуево
23:00:04   [a*****      ] извините, я знаю только несколько слов...
23:00:08   [Д********  ] )
23:00:14   [К******    ] хус а де военкомат находится?
23:00:21   [h******     ] на пабери 3
23:00:27   [К******    ] ужс)
23:01:45   [h******     ] =Р


 

2009年11月29日日曜日

ロシア版ポトリスのDLが遅い原因

ゲームクライアントのダウンロードが遅いのはDNSラウンドロビン経由で応答のないサーバーにアクセスしてしまっているためだと分かりました。その調査レビューです。

結論から書くとこちらですぐにダウンロードできる! ※できなくなってるかもしれません


ことの発端

公式からダウンロードしようとすると異常に遅い!公式自体も落ちていることがあるみたい。

ダウンロードリンク -- ロシア版ポトリス公式
http://files.fortress2.ru/fotress2_v1.0.1_installer.exe

普通にゲームクライアントをダウンロードできるときもあるのですがリンクをクリックしてからダウンロードが始まるまで30分待たされたり、"Bad Request (Invalid Hostname)"と表示されたり挙動がまちまち…近くて遠い国、ロシアだからかなぁ?などと漠然と考えていたのですがもう少し具体的に調べてみました。


7IPへのDNSラウンドロビン

files.fortress2.ruのDNSレコードを取得してみる。
$ dig files.fortress2.ru
...
;; ANSWER SECTION:
files.fortress2.ru. 30804 IN A 92.241.170.96
files.fortress2.ru. 30804 IN A 92.241.170.101
files.fortress2.ru. 30804 IN A 92.241.170.104
files.fortress2.ru. 30804 IN A 81.177.139.5
files.fortress2.ru. 30804 IN A 81.177.139.22
files.fortress2.ru. 30804 IN A 81.177.139.23
files.fortress2.ru. 30804 IN A 92.241.170.90
...
7つのIPアドレスにDNSラウンドロビンされてることが分かった!負荷分散のためでしょうか。


正常なホストは1つだけ

この7つのIPアドレスのホストが正常にWEBサーバーとして動作してるか調べてみる。
$ nmap -PN -p T:80 92.241.170.96 92.241.170.101 92.241.170.104 81.177.139.5 81.177.139.22 81.177.139.23 92.241.170.90

Starting Nmap 5.00 ( http://nmap.org ) at 2009-11-29 22:24 JST
Interesting ports on 92.241.170.96:
PORT STATE SERVICE
80/tcp filtered http

Interesting ports on 92.241.170.101:
PORT STATE SERVICE
80/tcp filtered http

Interesting ports on 92.241.170.104:
PORT STATE SERVICE
80/tcp filtered http

Interesting ports on 81.177.139.5:
PORT STATE SERVICE
80/tcp open http

Interesting ports on 81.177.139.22:
PORT STATE SERVICE
80/tcp open http

Interesting ports on 81.177.139.23:
PORT STATE SERVICE
80/tcp filtered http

Interesting ports on 92.241.170.90:
PORT STATE SERVICE
80/tcp filtered http

Nmap done: 7 IP addresses (7 hosts up) scanned in 3.11 seconds
TCP80番ポートがopenなホスト=正常にWEBサーバーとして動作してるホストは、7つのうち2つ、81.177.139.5と81.177.139.22だけ!しかも、後者は"Bad Request (Invalid Hostname)"が返ってきてゲームクラアントのダウンロードができない状態でした。

つまり、正常なホストは1つだけでした。


まとめ

ホスト名"files.fortress2.ru"は7つのIPアドレスにDNSラウンドロビンされているが、そのうち1つのIPアドレス(81.177.139.5)のホストだけしか正常に動作してない、ということのようです。正常に動作してないホストのIPアドレスがWEBブラウザーにキャッシュされて困ってたみたい。

早い話が下のURLからならゲームクライアントのダウンロードがすぐに始まる。
※ダウンロードできなくなっているかもしれません

http://81.177.139.5/fotress2_v1.0.1_installer.exe

4game.ruの管理人さん、対応してくれ!…とロシア語でお願いできれば良いのだけれど。以前、別件でinfo@4game.ruに問い合わメールを送ったんですがリジェクトされました(gmailから送った)。文面は英語で書いたのだけどスパム扱いされたのだろうか…ロシアとロシア語に明るい方いらっしゃれば、ぜひ公式に問い合わせてみて頂けないでしょうか。


参考リンク

チープなDNSラウンドロビンは高価なロードバランサの座を奪い返せるか -- CNET Japan
http://japan.cnet.com/blog/neta/2006/08/10/dns_ecfc/

記事の趣旨は本件と異なるのですが参考になりました。

DNSラウンドロビン -- ウィキペディア(日本)
http://ja.wikipedia.org/wiki/DNS%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%83%AD%E3%83%93%E3%83%B3

負荷分散に使われる技術らしい。でも色々と問題点もあるみたい。


環境

OS: Linux
debian-lenny
dig-9.5.1-P3
nmap-5.00 (公式ソースmake)


以下は以前に書いたポトリスに関する記事です。

ロシアでポトリス
ロシアでポトリス2
Wineでロシアでポトリス
 

2009年11月25日水曜日

秘密Cookieの削除

FirefoxのアドオンBetterPrivacyを入れて秘密Cookieを削除してみたレビューです。

ブラウザーのFlashプラグインが勝手に保存・送信してしまう秘密Cookieとやらがあるらしいです。件のアドオンで秘密Cookieの調査、ブロック・許可設定ができる!ありがとうBetterPrivacy開発者。


入れてみた



めっちゃいっぱいあるし!いつも使う動画サイトや企業、趣味、他サイトの秘密Cookieがかなり古いものまで残ってました…


BettrPrivacyのインストール後に見られるchrome://bp/content/bphelp.htmlによると、

Flashの秘密CookieはLSO(Local Shared Object)と呼ばれていて
  • 永続的にずっと残る
  • 普通のCookieより大容量である (普通4KB、秘密100KBで25倍)
  • システム、ユーザー名を保存してる
らしいです。怖い秘密Cookie怖い。"Remove All LSOs"でとりあえず全部削除しました。その後Firefoxを再起動、自分の環境では問題なく動作しています。
すごくみえない敵と戦っている気分…

2月程前にけっこうニュースになってたみたい。

「Flash cookie」によるトラッキングが密かに行われている -- スラッシュドット・ジャパン
http://slashdot.jp/security/09/08/16/0141237.shtml

ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 -- ITmedia
http://www.itmedia.co.jp/news/articles/0908/13/news017.html


参考リンク

BetterPrivacy公式
http://netticat.ath.cx/extensions.html

BetterPrivacy -- addons.mozilla.org
https://addons.mozilla.org/ja/firefox/addon/6623


環境

OS: Linux
debian-lenny
firefox-3.5.5
BetterPrivacy-1.45
 

2009年10月4日日曜日

Wineでロシアでポトリス

Wineを使いLinux上でロシア版ポトリスを動かしてみたレビューです。
ロシア語を文字化けなく綺麗に表示できた!





その他のスクリーンショット


戦車で交互に撃ち合う2Dネットゲーム「ポトリス」。日本やアメリカ等で遊べたんですが、現在、日本人がプレイできるのはロシア版のポトリスだけのようです。Linux上で動かすためにVMwareを使ってたんですが、Wineでより軽く速く動かすことができるようになった!ありがとうWine開発者。

Linux上でロシア語のロケールを設定するとWine内部で自動的にポトリスのロケールも適切なもの(CP1251)を選んでくれるようで、ロシア語(キリル文字)を文字化けなく綺麗に表示できます。日本語ロケールを選べば日本語表示&入力もできます。

公式のAppDBに登録しておきました。

WineHQ - Fortress2 Blue Forever 1.0.1
http://appdb.winehq.org/objectManager.php?sClass=version&iId=17995


以下、ロシア版ポトリスをWineで動かすための詳しい手順です。


Wineでロシア版ポトリスを動かす手順
  • 1. Wineのインストール

  • 2. オーディオの設定

  • 3. フォントの設定

  • 4. ロシア語ロケールの設定

  • 5. ロシア版ポトリスのインストール

  • 6. ロシア版ポトリスの実行

  • (7. 動作安定化: レジストリーの編集)

  • (8. MIDIの設定: DLLのオーバーライド等)


1. Wineのインストール

公式で開発版のwine-1.1.30をダウンロードしてmake、インストールしました。
特に必要となるようなconfigureオプションはありませんでした。
安定版(1.0.1)では動作しませんでした。

※wine-1.1.31〜wine-1.1.36でも動きました [2010-01-09]


2. オーディオの設定

ALSAで音が鳴るように設定します。

以下実行したコマンドです。
$ winecfg
"Audio"タブを選択。



ダイアローグがポップアップ。OK"を押す。
過去に設定済みの場合はこのダイアログは出ない。



自分の環境では何もしなくても、この時点で自動的に以下のように設定された。





3. フォントの設定

ロシア語の表示にはlucon.ttf、日本語の表示にはmsgothic.ttcがいい感じです。
「$HOME/.wine/drive_c/windows/Fonts」以下にコピーまたはシンボリックリンクを作成。
※自分が持っているWindowsXPのフォントフォルダーから持ってきました。ライセンス違反かも?

以下実行したコマンドです。
$ cd $HOME/.wine/drive_c/windows/Fonts
$ ln -s $SOMEWHERE/lucon.ttf
$ ln -s $SOMEWHERE/msgothic.ttc

4. ロシア語ロケールの設定

ロシア語ロケール「ru_RU.UTF-8」を使えるようにします。/etc/locale.genを編集。「# ru_RU.UTF-8 UTF-8」のコメントを外しました。

※ロシア版ポトリス内部ではCP1251を使っているようです。SCIMでの入力のためにru_RU.CP1251でなくUTF-8を選びました。ru_RU.UTF-8の替わりにru_RU.CP1251でもru_RU.KOI8-Rでもロシア語を表示できました。Wineが自動的にCP1251に合わせてくれてる?

以下、その後に実行したコマンドです。
# locale-gen
Generating locales (this might take a while)...
(中略)
ru_RU.UTF-8... done
(中略)
done
Generation complete.

5. ロシア版ポトリスのインストール

公式からダウンロードしてきてWineで実行しました。

以下実行したコマンドです。
$ LANG=ru_RU.UTF-8 wine fotress2_v1.0.1_installer.exe
Далее = Next、Отмена = Cancel



ライセンスに同意=上にチェックを入れてNextを押す。



インストール最後の画面。2つのチェックは外す。チェックしたままでも問題なくインストールは終わるがエラーダイアログが出る。



※翻訳してみた
Запустить Fortress2 Blue Forever
→ Run Fortress2 Blue Forever: インストーラー終了後ポトリスを起動する
Домашняя страница Fortress2 Blue Forever
→ Home Fortress2 Blue Forever: 公式webサイトをブラウザーで開く
Зарегистрироваться в игре Fortress2 Blue Forever
→ Sign in game Fortress2 Blue Forever: ログインアカウントを作成するサイトをブラウザーで開く



6. ロシア版ポトリスの実行

以下実行したコマンドです。
$ cd $HOME/.wine/drive_c/Program\ Files/Innova/Fortress2
$ LANG=ru_RU.UTF-8 wine GAME.exe
パッチサーバーに接続、ログインするサーバーを選択したのちログイン画面に到達します。
後はアカウントとパスワードを入力するだけ!アカウントの取得方法はこちらのサイトが参考になりました。



以上でロシア版ポトリスが動きました!


(7. 動作安定化: レジストリーの編集)

手順1-6まででとりあえずロシア版ポトリスを起動できますが、自分の環境では安定動作しませんでした。
起動してしばらくたつと以下のエラーが連続して表示され画面の描画が止まってしまう…
fixme:d3d:stretch_rect_fbo >>>>>>>>>>>>>>>>> GL_INVALID_FRAMEBUFFER_OPERATION (0x506) from glBlitFramebuffer() @ device.c / 6434
レジストリーを編集することで解決しました。
以下の2行のテキストファイル「pbuffer.reg」を適当な場所に作成します。
[HKEY_CURRENT_USER\Software\Wine\Direct3D]
"OffScreenRenderingMode"="pbuffer"
以下、その後に実行したコマンドです。
$ wine regedit pbuffer.reg
以上で安定動作するようになりました。


(8. MIDIの設定: DLLのオーバーライド等)

手順1-7までで安定動作しますが、MIDIのBGMが鳴りませんでした。音が鳴るのは効果音だけ。
DLLのオーバーライドとgm.dlsのコピーが必要でした。
※普段ミュージックOFFにしてポトリスする人にはこの設定が必要ないと思います。

1) ダウンロード

「DirectX 9.0c」に必要なDLL等が含まれています。
マイクロソフト公式から「DirectX 9.0c Redistributable」を探してダウンロードします。

2) DLLとgm.dlsのコピー
ダウンロードした「DirectX 9.0c Redistributable」を解凍してDLL等をコピーします。
解凍にはcabextractが使えました。

以下実行したコマンドです。
$ cabextract directx_9c_redist.exe -d /tmp/directx_9c_redist
$ cabextract /tmp/directx_9c_redist/DirectX.cab -d /tmp/DirectX

$ cd $HOME/.wine/drive_c/windows/system32
$ cp /tmp/DirectX/dm{band,ime,loader,synth,usic,style}.dll ./
$ cd drivers
$ cp /tmp/DirectX/gm16.dls ./gm.dls
※「gm16.dls」は「gm.dls」へリネームが必要

3) DLLのオーバーライド
以下実行したコマンドです。
$ winecfg
"Libraries"タブを開く。



6つのDLLをAddする。



以上でMIDIのBGMが鳴りました。

※wine-1.1.33以降はデフォルトで6つのDLL(dmband.dll, dmime.dll, dmloader.dll, dmstyle.dll, dmsynth.dll and dmusic.dll)を持っていますが、これらデフォルトbuilt-inのDLLではMIDIのBGMが鳴りませんでした。上記の方法と同様にして6つのDLLを入れ替える必要がありました。 [2009-12-20]

※wine-1.1.33以降、BGMをOFFにしていても6つのDLLをオーバーライドしないと"error:dsound:DSOUND_MixOne Fatal error. ..."が断続的に表示された後、"wine: Assertion failed at address ..."と表示されWineが止まることがありました。wine-1.1.33以降のビルトインDLLがエンバグしてる?とりあえず、6つのDLLを上記方法で入れ替えオーバーライドすると落ちなくなりました。 [2009-12-05]


まとめ

Linuxネイティアプリかのようにポトリスが動いて感動!W:ETとポトリスが主力になりそうです。
ロシア語が読み書きできるようになった!ロシア人ルームで「Привет(こんにちわ)」とコピペしたらbanされずロシア人と一緒に遊べました。ポトリス内掲示板の翻訳とかもできそう。挑戦してみたいと思います。


参考リンク

Wine公式
http://www.winehq.org/


Wine AppDB
http://appdb.winehq.org/

Wineで動くアプリケーションやその動かし方の情報が蓄積されてます。

ロシア版ポトリス公式
http://www.fortress2.ru/


ロシア版手順 -- ポトリス博物館
http://www.potohaku.com/russian/

アカウント取得方法等を解説されてます。

Wine上でMSGSの音を鳴らす -- 試験運用中なLinux備忘録
http://d.hatena.ne.jp/kakurasan/20080331/p1

MIDIを鳴らすための設定に関し参考にさせて頂きました。


環境

OS: Linux
debian-lenny (i386)
wine-1.1.30 (公式ソースmake)
wine-1.1.36 (公式ソースmake) ※更新しました [2010-01-09]
VGA: GeForce 9600GT
VGA driver: NVIDIA-Linux-x86-177.82-pkg1.run (公式バイナリー)
VGA driver: NVIDIA-Linux-x86-180.44-pkg1.run (公式バイナリー) ※更新しました [2009-10-24]


以下は以前に書いたポトリスに関する記事です。

ロシアでポトリス
ロシアでポトリス2
 

2009年4月7日火曜日

(週刊漫画) PSYREN─サイレン─ #65

CALL.65 "エルモア・ウッド"

ドルキさんロスト!CALL.33から実に33話に渡り活躍。
バイザーなフェイスと左官衣装なズボンが好きでした。合掌…


エルモアキッズは全員半端なくレベルアップ!変わったのは見た目だけじゃない!!
インフレぎみな展開も10年間修行+未来大気でPSI底上げ、なら納得の結果でしょうか。
あのチッチャかったのが頼れる兄貴になってるよ!嬉しいような、さびしいような…
ドルキさんを!「オッサン」呼ばわり!!カイルいけない子!!!
謹んでご冥福をお祈り申し上げてあげてください…

シャオ君達もカイル達も助けにきたのはエルモアの指示っぽい。
バァちゃん生きてた!アゲハ勝利!!良かった良かった…
「未来を変える旅」というフレーズが大好きです。すごく人生。
逆に悪い未来にもなり得るわけで…ことと次第と人気投票結果によっては、
ドルキさん復活もあるんじゃないかと!ありえないような、あって欲しいような!!
現代で影虎さんらに調伏されて改心、レジスタンス側にまわる、みたいなですね…


ヒリューさんはいったいどうなったんだってばよ!もう三週間心配しっぱなしだよ!!
おかまいなしにシャオ君とシャイナのバトル開始だし…
朧といいピンチのまま!「死して灰になる運命」というフレズーレがふと頭をよぎります…
まさか、こんなおいしいキャラ達を使い捨てにはしませんよね?!
いやこれは先週みたいに溜めて溜めてドカンとやってくれるフリなんでしょうか…

来週に期待なのです。


こちらは以前書いた64話の感想です。

 

2009年3月30日月曜日

(週刊漫画) PSYREN─サイレン─ #64

CALL.64 "光"

ヒリューさんは今…


じゃなくて!今週はガチで泣ける!!カイルぅ、ヴァンマリフレシャオォォォ!!!
先週が絶望的すぎてテンションだだ下がりでした…と思ったら今週これだよ!
読んでてよかった!!予想を裏切り期待を裏切らない、そんなPSYRENが好きだー!!!


シャオ「大丈夫でしたか」ぐああ好青年になってるよ!
カイル「なーに謝ってんだ?」生きてる、生きてるよ!
ヴァン・フー「…」言葉がなくとも想いは伝わるよ!!
マリーも10年でエロく凛々しく成長して!!!
婆さんも浮かばれます…いや子供達が無事ということは現代で生きてる?
またそれぞれ名乗ったりしないのがいい…
エルモアウッドの彼等と彼女等です!ウルっときました。

反撃開始!ドルキさんの余命はあと一週!!
好きでしたドルキさん…でもカイルとマリーにヴァンが来たとあっちゃ殺られてもらうしかないってばよ!!!
朧ヤバイ!今際の際に、ふぉげっと・みー・のっと!!どんだけアゲハ好きなんだよ!!!
落とされた場所的に禁人種化して延命でしょうか?
失敗作を捨てにきた第四星将に拾われて改造手術という線も捨てがたい…
ヒリューさんもっとヤバイ!何がヤバイってヒリューさんなしで物語が進みそうな勢いが一番ヤバイ!!
岩代先生によろしく頼む、朝河飛龍を忘れないでくれと!!!
タツオ君が飛んで助けにこないものか…今週もかなりキたんですが、そうなったら涙腺決壊する自信がある!


キャラ人気投票

本編が熱く盛り上がってるんですがこちらも気になる!そろそろ結果発表でしょうか。楽しみです。
p2pobはカイル一択です。甘えんぼ元気可愛すぎる…青年カイルもカコイイんですが少年カイルにグっとキます。
ググってみるといろいろ面白いサイトを見つけました。

PSYREN-サイレン-のキャラクター人気投票どうなると思います?@Yahoo!知恵袋
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1123556411

誰だよ知恵袋で質問したの!フキました。答える人も答える人だ!!いいノリです。

□PSYRENーサイレンー人気投票□
http://sky.geocities.jp/rann_no/data/vote1.html

キャラクターの投票番号を分かりやすくまとめられています。ニセ刑事こと碓氷さんまた登場するんでしょうか?

Favourite Psyren Character?
http://mangahelpers.com/forums/showthread.php?t=33436

海外のファンサイトっぽい。独自に人気投票を実施されてました。1位アゲハ、2位カイル!3位は雨宮・朧。
※4月1日に見ると2位カイル・朧、3位桜子さんになってました。朧がクるのか?!


話も絵もファンも盛り上がってきた!
今後に益々期待なのです。


こちらは以前書いた63話の感想です。

 

2009年3月27日金曜日

GNOME-2.22のレビュー

ネットで買い物したり音楽聞いたりに、簡単なことなんですがないと困るOS、Linuxを使っています。
XFCEや非DE環境を使っていたんですがGNOMEに移行してみました。そのレビューです。




先月の2009年2月、debian-lennyが晴れて安定版になりました。めでたい!
安定版になる三ヶ月ほど前からlennyに移行していたので、割合、混乱なく移行できました。
ついでにGNOMEにも移行、画像はそのスクリーンショットです。

音楽再生は、RhythmboxとかTotemとかGNOMEなアプリもあるんですが、XFCEのXfmediaの方が断然使いやすかった…
ほぼアニソンジュークボックス化してます…
上の画像の状況でのシステムリソース使用状況はこんな感じです。



Blenderでレンダリング中とかじゃないかぎり余裕!ロートルマシンでもまだまだいけそうです。


参考リンク

GNOME公式
http://www.gnome.org/

最新の安定版はバージョン2.26までリリースされてます。


環境

OS: Linux
debian-lenny (Debian GNU/Linux 5.0)
gnome-2.22.3
 

(週刊漫画) PSYREN─サイレン─ #63

CALL.63 "絶望的"

ヒリューさんが星に…


じゃなくて!「人生残りあと1分…!!」まてー!!高度4000mとかダイナミックです。
地平線が丸く見える。いい意味でサイレンが背景漫画になっていく…
はたして1分後のヒリューさんは?!こんな感じだろうか…


こちら
は以前書いた62話の感想です。
 

2009年3月16日月曜日

(週刊漫画) PSYREN─サイレン─ #62

CALL.62 "相殺"

「力で捻じ伏せてこそ俺…!!」
セリフも、ライフスタイルも、その前後のポージングも何もかもがカッコイイ…
ザ・ヒールなドルキさんが大好きだ!しかし余命幾許無いとかどうなの?!死ぬのおおお?!!


アゲハ(テメェがどう変わろうが関係ねェよ!!)
関係あるよ!ドルキさんの右手が末期の鉄雄君みたいになっているう!!
変わりすぎです。最初はメカっぽくて格好良かったのに、クリーチャーっぽくなってしまった…
アゲハに勝つために寿命を削ってまで…そのかいあってかメルゼズを圧縮イクスプで相殺!
努力!(デュアル・イルミナス・フォージ)
友情!(ありがとうよシャイナ)
勝利?(まあやられるんだろうけど今週だけはアゲハのメルゼズに…)
まさにジャンプの王道、それがドルキさんだ!!うおおお!!!

シャイナ「別に☆ どっちが死んでも略」
☆に、この☆にイラっときた!てめぇの血は何色だ?!
ヒリューさんの新技でぶちのめしてやってくれえ!!!
五巻で作者岩代先生からヤム○ャ認定されちゃったけどやればできる子のはず。

「煩悶のカブト!!」煽りとカブトの表情がたまりません。
先週が「挑発のドルキ!!」。「○○の○○○!!」シリーズでしょうか?
とすると来週は「勝利のヒリュー!!」ですね、わかります!
「瀕死の…」とか「即死の…」とかそういうのは避けて欲しい…
むろん来週に期待なのです。


こちらは以前書いた61話の感想です。

 

2009年3月15日日曜日

WinXP x64 アップデート

月例アップデートきた!
WinXP x64、まだまだ使える!!
Vista?何それ美味しいの状態です。時代はもうVistaの次へ行かんというのに…
ビバ・ノスタルジー。刻よとどまれ…



※VMwareで仮想化して使っています。


環境

OS: Windows XP Pro x64 (GUEST OS)
VMware Player-2.5.1
HOST OS: Linux
debian-lenny (i386)
 

(週刊漫画) PSYREN─サイレン─ #59-61

CALL.59 "消失"

バーニッシン!
名古屋から東京まで飛ばすとか熱いです。
運転はカブト。レンタカーとガソリン代に加えて高速代も払ってあげてええ!


雨宮「この際逮捕とかどうでもいいでしょ?」
緊急とはいへ、空港にいたずら(?)電話らめええ!
アニメだったら「この物語はフィクションです云々」が絶対必要な感じ。
少年誌的にギリギリじゃないのか?!とか勝手に心配してしまいます。
あと桜子さんの表情もギリギリでグっと来ました。大好きです!

ネメシスQのカットがいっぱい!
すごい参考になります。3Dモデリング中…
一週間ぐらいかけてQとかホルトさんとか天樹院チルドレンとかあずみとかつくってみたい。
ここで召集!バニシーン!!電話なら誰のでも携帯でも何でもいいみたい。

背景かっこいい…
鉄塔からの俯瞰、荒廃した未来、アゲハの絶望が伝わってくる感じがたまりません。
前回の未来編最後あたりから、どうも背景に力が入ってる気がします…こういうの大好き。


CALL.60 "心を捨てれば"

心を半分捨てる!集中集中。
最近漫然と生きてるな、集中してないな…
絶望の未来、不可避の運命、後悔という名の猛毒!あるある、そんな感じです。

ヒリューさん大活躍?!
ドラゴン・トルネード的技で雑魚を圧倒。
「どっちに逃げればいい?! 早くしろ!! 次はどっちだああ!!?」
えーセリフがかっこわるい…
少年漫画では体格の良さと強さが反比例するという…小さいは正義!

星将登場で引き。
ドルキさん登場!右手がメカ化してるうう!!
「会いたかったぜ」私もです!!!ちょっとかっこいいかも。
でもこれ、かなしいけどやられ役なのよね!


CALL.61 "招待"

インバイチュー!
「ごきげんよう、また会えましたね(キラッ☆」
ああもうシャイナを見る度にイラッとくるぜ!!

思うのだけど、
律儀にドルキさん倒した後の未来に飛ばさなくても
倒す前の未来に飛ばしてくれれば、まだ恨まれたり待ち伏せされたりしないで済むのに…

またきたよ神背景!神経制御塔着工・即施行・ほぼ完成!!
手描きでこれとかどんだけ…大好きです。
グラナさんのとんでもテレキネシス、祭先生も未来ではこんな感じだったんでしょうか。

カブト「みんなありったけ 飛べ─────────────────!!」
カブト大活躍!でもライズはまだ使えない!!ヒリューさんの抱え方が危なすぎて吹きました。
六方転晶系!なんか中二病的カコイイ単語でてきた!!「転晶」気に入った!!!
地層ごとごっそり…
ドルキさんはたぶんヤラれるだろうとして、シャイナ組はまるで勝てる要素がない…

正直未来の戦闘は地味だな…という印象だったんですが、大味になってきた!
挑発のドルキィ!!来週に超期待!!!


こちらは以前書いた58話の感想です。

 

2009年3月10日火曜日

WinXP x64 不具合

Windows XP Pro の 64bit Edition を使っています。
未解決不具合をまとめてみました。解決方法あれば教えて欲しいです…
気づけば32bitソフトばかり動かしています。素直に32bit版買っとけば良かったかも…


64bit版のIEでアップデートできない



64bit OS にもかかわらず64bit版のIEでウインドウズアップデートができない!なんたる…



しかも32bit版IEの起動に失敗します。
最初から32bit版のIEを立ち上げれば問題はありませんでした。


米国版ポトリスが動かない



閉鎖されていた米国版ポトリスが2009年3月に再開しました。
しかし、アップデートが失敗して起動できない…ロシア版では問題なかったんですが残念。
64bitが原因ではなく、VMware上で動かしているからかもしれません。


IE7へのアップデートでウインドウズアップデートが壊れる(解決済)

IE7を飛ばしてIE8にすることで解決できました。
ただ、以前ダウンロードしたデーターがローカルに残っていて何度もインストールに失敗しました。
以前ダウンロードしたデーターを消去してIE7のアップデート項目を外すことで解決しました。

ウインドウズアップデートのデーターは、隠しフォルダー C:WINDOWS\$hf_ming$ 以下にあります。



自分の環境ではシステムディスクをEにしているのでE:WINDOWS\$hf_ming$にありました。


環境

OS: Windows XP Pro x64
VMware Player-2.5.1
HOST OS: Linux
debian-lenny (i386)
 

IE8のインストール

ゲーム等を動かすため、たまーに Windows XP (64bit Edition) を使っています。
ポトリスが海外でサービス再会して起動することが多くなりました。

しばらく使ってなくて知らなかったんですがIEがバージョン8になっているう!
今更ですがIE6はもう古いらしい…ということでIE8をインストールしてみました。
そのレビューです。




IE7でも良さそうなものですが、自分の環境ではIE7にバージョンアップするとウインドウズアップデートができなくなる不具合がありました。
64bitエディションだからかでしょうか?原因は不明です。
結果的にはIE7を飛ばしてIE8にバージョンアップして問題ありませんでした(今のところ)。

マイクロソフト公式からIE8インストーラーをダウンロード、実行します。

Internet Explorer 8: ダウンロード
http://www.microsoft.com/japan/windows/products/winfamily/ie/beta/downloadlist.mspx


 

インストール完了!しかしこれで終わりではなかった…

 

 

最初の起動の直後にいくつか設定が必要でした。
ようこそ画面、おすすめサイト、アクセラレータの選択、フィルター他…
自分がものぐさな性質だからなのですが非常に面倒に感じました。
よきにはからってよ!と言いたい。




IE8でも問題なくウインドウズアップデートできました。WinXP x64 はいつまでサポートしてくれるやら…




自分のブログも表示してみる。IEではこういう風に見えているのか…


環境

OS: Windows XP Pro x64
VMware Player-2.5.1
HOST OS: Linux
debian-lenny (i386)
 

DCOMの停止・不具合・復旧

ゲーム等動かすために Windows XP を使っています。
不要なサービスを停止しスピードアップしようとDCOMサービスを停止したら不具合が続発しました。
停止と同じ方法で復旧できず困ってたのですが、レジストリーを修正することで復旧できました。
そのレビューです。


DCOMサービスの停止



管理ツール→サービスから"DCOM Server Process Launcher"を停止しました。

すると…
アイコンを動かせなくなる、ホットキーが使えなくなる、ネットワークの接続設定が消えるといった不具合が続発しました。しかも、サービスの設定が開けず元の状態に戻せなくなりました。

ネットワークの接続設定が消失



空!ネットワーク自体は生きているんですが非常に困る…

サービスの設定を開けない



落ちる!DCOMサービスを停止したのと同じ方法で復旧できない…


レジストリー修正



元に戻せず困っていたんですがレジストリーを修正することで解決できました。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DcomLaunch
をregeditで開いてDWARD値の"Start"を4から2に修正しました。上の画像の赤枠部分です。

その後、再起動して事なきを得ました。


環境

OS: Windows XP Pro x64
VMware Player-2.5.1
HOST OS: Linux
debian-lenny (i386)
 

2009年2月16日月曜日

(週刊漫画) PSYREN─サイレン─ #58

CALL.58 "改変・12月2日②"

ズバッ!とかグサッ!!とかそういうのほんとダメええ!!!


ミロク「W.I.S.Eは全世界に宣戦の狼煙をあげる」…世界規模だったのか!
海外サイキッカーチームの登場とかもあるんでしょうか。
祭先生のファンなら世界中にいそうだし…
マフィアンなこわもてさん達が姐さん!姐さん!!言ってるシーンが目に浮かぶ…

「ヒリューどうなってんだよ?!」…アゲハはヒリューさんに酷すぎます(´;ω;`)
同じページの右上にちゃんとメルゼズ穴が残ってて笑いました。
子供達の心配をする雨宮さんが!その奇抜な服装もあいまって!!すごくイイ!!!
ダメなのよ…グっときます!母性あふれるぜ!!うおおおおおおおお!!!!!


急遽羽田へ。
今月、ていうか今日かよ!ギッザーニ戦あたりが嘘に思える展開のテンポ良さ。
なぜ宣戦の儀にアゲハ達がいないのか?朧の指摘が怖すぎる。
たとえエルモアの死が不可避だとしても、アゲハ達がチルドレンに
ついていてやればそうそう暴走しないと思う。
もしかして、アゲハ達が過去に帰ってこれなくなる展開とかあるのかな?
タツオ君の安否とともに心配なのです…

現代編は背景も描き込まれてて見てて楽しい…
ネメシスQとガチンコ!
雨宮達や朧も個別に行動!!
そして祭先生もなぜか羽田にいるう!!!
※先生は成田(国際線)でした


熱い、熱すぎます。読んでてよかったPSYREN!
これがあるからジャンプを買う!!
来週に期待なのです。


こちらは以前書いた57話の感想です。

 

2009年2月15日日曜日

ロシアでポトリス2

レアタンク100%

日本時間 2月15日 21:00 頃、ランダムタンクを選ぶと
100%レアタンクになってしまうようになっていました。
なんじゃこりゃー!






ランダムタンクを選んだ場合のみレアタンクになるみたいです。
レアタンクの前には他のタンクなぞ紙も同然!


 

その後、ステージが変わっても、何度もレアタンク100%は続きました。



  

火力が戦場を支配する!
敵・味方の死体が増えるにつれホーミングを当てづらくなります。


ロシアサーバーの不具合でしょうか?
公式を見てもイベントのニュースはなかったみたい。
22:00頃に他の部屋へも行ってみたんですが状況は同じだったみたいです。
謎は深まるばかり…


こちらは以前書いたロシアポトリスの記事です。

 

2009年2月13日金曜日

ロシアでポトリス

戦車で交互に撃ち合う2Dネットゲーム「ポトリス」。
軽い暇つぶしのつもりが完徹…そんな中毒性のある楽しいゲームなのですが、
残念なことに、昨年、日本や米国でサービスが終わってしまいました…
しかし、ロシアでならできるぜ!という話を聞きつけ実際やってきてみたレビューです。




アカウントの取得とゲームのダウンロード

こちらを参考にアカウントを作成しました。
ゲームのダウンロードはこちら。近くて遠い国、ロシアなのでダウンロードが始まるまで遅いことがままあります…約40MBのダウンロード。

こちらならもう少し早いかも。


起動直後 言語
 
デフォルトでwindowモードになってます。少し便利。 当然ながらロシア語です。


部屋の作成



部屋をつくって人を待ってみる。
ロシア語が日本の環境では化けて見づらいことこの上なし。 ロシア語を綺麗に表示する方法を見つけました [2009-10-04]
レアボス部屋にすると、結構、日本の方が来てくれる気がします…
日本、米国、中国や韓国から来てる方も多いみたい。というか確実に露人より多い!

※現在、日本人9割以上、ロシア人1割以下の人口比になっているようです。一時期から日・露人しか見なくなったような… 噂ですが、中国では個人が立てたエミュ鯖が人気だとか。日本時間で21〜01時帯に人が多いと思います。 [2009-11-23]


試合中



人が集まった!れっつぷれい。
王かつレアタンク、まさに集中砲火されるために産まれてきたような存在。



逆さ喰らいました;;


仮想化環境



vmware上でWindowsと露ポトを動かしています。
むろん、普通にWindowsでも動くと思いますが未確認…


参考リンク

ロシアポトリス公式
http://www.fortress2.ru/

ロシア語!キリル文字!!読めなーい!!!

ロシア版手順 -- ポトリス博物館
http://www.potohaku.com/russian/

露ポトのアカウント取得方法等を解説されてます。
ロシア語が読めなくてもよく分かる!ありがたいです。


環境

OS: Linux
debian-lenny (i386)
vmplayer-2.5.1
GUEST OS: Windows XP Pro