おでんはじめました。

required ちくわぶ and 巾着,optional はんぺん.

Bitmapとbyte[]の変換

いざ書くといつも忘れてしまうので。

画像ファイル(Bitmap)からbyte[]に変換

Bitmap bmp = new Bitmap(画像のPATH);  //using System.Drawing
MemoryStream ms = new MemoryStream();
bmp.Save(ms,ImageFormat.Png);   //using System.Drawing.Imaging;

byte[]から画像ファイル(Bitmap)に変換

MemoryStream ms = new MemoryStream(byte[]のデータ);
Bitmap bmp = new Bitmap(ms);
ms.Close();
bmp.Save(画像のPATH);

byte[]って何者かいまだによく知らない。

cakebox/cakephpでphpunitが認識されない

cakeboxでcakephp(2.7)とphpunit(4.4.4)がインストールされているけどcakephpからphpunitが認識されない件。

ブラウザからtest.phpを表示すると、

Warning include(PHPUnit/autoload.php) failed open stream...

とか表示されてテストを実行できない。

composer.jsonのvendor-dirディレクトリを修正して解決。

(修正前)

"config": { "vendor-dir": "app/Vendor/Composer" },

(修正後)

"config": { "vendor-dir": "Vendor/Composer" },

app/Vendor/Composer/phpunit/...となればOKみたい。

cakephpがどこでphpunitのディレクトリを読み込んでいるのかはよくわからない。

WordPressの投稿をJSON形式で受け取る

XMLRPCを使って最近の投稿をJSON形式で受け取るまで。

XMLRPCのライブラリーをWordPressにコピーする

下記からIXR_Library.phpをダウンロードして自分のWordPressのサイトへコピーする。

http://scripts.incutio.com/xmlrpc/ The Incutio XML-RPC Library for PHP

(ページの上にある「Download the Library」をクリック)

投稿をJSONで受け取るPHPを書く

下記をgetposts.phpとしてWordPressのサイトへ保存する。

変更箇所はサイト名、ユーザー名、パスワード。

文字コードUTF-8などWordPressに合わせる。

<?php
// inctioのライブラリ呼び出し
include_once('IXR_Library.php');

$wp_username = 'admin';
$wp_password = 'admin';
$siteurl     = 'http://sample.jp/';

$filter = array( 
  'number' => 10,   //最近の10件取得
  'offset' => 0,
  );
$client = new IXR_Client( $siteurl . 'xmlrpc.php' );
$status = $client->query(
  "wp.getPosts", //POSTを取得する
  1, // blog ID: 通常は1、マルチサイト時変更
  $wp_username, // ユーザー名
  $wp_password, // パスワード
  $filter
  );
$posts = $client->getResponse(); //arrayで戻ってくる
echo json_encode( $posts );  //JSONで返す

確認する

http://sample.jp/getposts.phpへアクセスしてJSONが戻ってくればOK。

うまくいかない時

ブラウザで表示が真っ白の時はphpの構文が違ってる可能性があるのでphp -l getposts.phpで構文チェックするとか。

IXR_Library.phpのエラー内容がわかりづらい。ユーザー名とパスワードが違ってないか、new IXR_Clientで渡すURLが違ってないか確認など。

ShapeFontからfreetype6.dllの関数が呼べない時

SharpFontを使ってfreetype.dllの関数が呼び出せない場合がある。

'freetype6.dll' の 'FT_Get_CID_From_Glyph_Index' というエントリ ポイントが見つかりません。

こういう場合はfreetypeのプロジェクトにftcid.cを追加してfreetype.dllをコンパイルすればOK。

右クリック右クリック管理者権限で実行しかできないと思ってた

GitBashを右クリック右クリック管理者権限で実行がめんどくさいなあと思ったら、コマンドプロンプトから管理者権限で動かせると。

powershell -command "Start-Process -wait \"C:\Program Files (x86)\Git\bin\sh.exe\" -argumentlist \"--login -i\" -Verb runas"

参考: Windows で sudo なことをする。 | みむらの手記手帳

LINQ to XMLが便利すぎてメモ

下記のsample.xmlに対して

<?xml version="1.0" encoding="UTF-8" ?>
<LIST>
  <文字 ID="00001">
    <UCS>4E00</UCS>
    <CID>1200</CID>
  </文字>
  <文字 ID="00002">
    <UCS>4E05</UCS>
    <CID>14297</CID>
  </文字>
</LIST>

<文字>のタグの一覧を取得する

XDocument xdoc = XDocument.Load("sample.xml");
//戻り値はIEnumerable<XElement>
var lst = from moji in xdoc.Descendants("文字")   
          select moji;
foreach (var/*XElement*/ elem in lst)
{
  Console.WriteLine("TAG NAME={0}", elem.Name); //文字
  var ucs = elem.Element("UCS");   //子供のUCSを取得
  Console.WriteLine("UCS={0}", ucs.Value/*タグに挟まれた文字列*/);
}

IDの一覧を取得する

XDocument xdoc = XDocument.Load("sample.xml");
//戻り値はIEnumerable<string>
var lst = from moji in xdoc.Descendants("文字")   
          select moji.Attribute("ID").Value;

foreach (var/*string*/ id in idlst)
{
  Console.WriteLine("ID={0}", id);
}

こんなに簡単だとプログラムの書き方を忘れる。