月別アーカイブ: 2011年5月

Fedora 15 002

Fedora 15 (GNOME 3) 64bit 生活二日目。

ウインドウのタイトルバーをマウスで掴み画面最上部で最大化、サイドで画面半分に。
おまえは Windows 7 か!って突っ込んでしまった。

GNOME 3 のランチャはアプリが起動している場合は影が光る。
起動しているランチャをクリックすると多重起動せずウインドウがアクティブになる。
多重起動するには右クリック、ってコレも Windows 7 と同じ…

まさか Windows を真似るとは思わなかった。
それにしてもやはり最小化が解りにくい、ランチャは普段隠れているし。

で、普通に日本語環境は揃ったし Ubuntu から乗り換えのためにアプリを色々と。
Gimp は Fedora 15 にも入っていないんだね、GTK+ は Gimp の成果だったはず…

とにかく動画デコーダーの為に rpmfusion をリポジトリに追加。

Enable RPM Fusion on your system をクリック。
Fedora 15 うんちゃらがある、stable になっていないけど多分大丈夫だろう。
その rpm へのリンクを free, nonfree 共クリックし普通にインストール。
Totem に動画を放り込んで指示に従う、MPEG や WMV はそれでイケたけど

Quicktime demuxer というのが入らず ftypisom な MPEG4 が再生できない。
stable ではないからか、それともどこかで探してくるしかないのか。
更に

Y901x で再生できないよ、GTK3 で作り直しが必要なのだろうか…
なんとかなるまで VLC でも使っていよう、そのまんま開発終了はありえる…
とにかく Quicktime demuxer が無いと Nautilus でサムネイルできん。

他色々なサードパーティなモンは以下から辿れる。
Third party repositories – FedoraProject

まず一番必要な Flash x86_64 用だ。
gnash を入れてみたけど何も起こらない、何のために「追加・削除」にあるのだ?
YouTube も見れないし kabu.com のボードも使えないのでは 64bit に移行できない。

Download Adobe Flash Player 10 Beta – Adobe Labs
tar.gz を解凍し libflashplayer.so を ~/.mozilla/plugins に放り込む。
あぁよかった、これで Flash はなんとかなりそうだ。

gimp
gjot2
keepassx
sylpheed

もとりあえず全部動いた、バイナリエディタはタブ式って無いのかな?
Apache と VirtualBox は今度、現状はこれで様子見。

ここまで Firefox 4 を利用してみたけど「戻る」も以前より超早くなったし悪くない。
食わず嫌いも嫌なのでしばらくそのまんま利用してみようかなと思う。
拡張は FireGestures のみ入れたけどそれで私には充分かも。

だけど検索バーがタブの下にきたのにタブを移動しても語句が残るのってなんだよ…
ページ内検索さえも、そのほうが都合がいい人もいるだろうけど Opera 屋には気になる。
Opera や Chrome に比べて検索の柔軟性がイマイチなんだよな。

Fedora 15 001

というわけで。
Fedora 15 正式版がやっと出たので Ubuntu 10.10 から乗り換え開始。

GNOME が 3 になったので Windows Vista の初期時と同様に初期不良は多いかも。
ソレを楽しめないならコンナモン使うな、というスタンスでもっとイケイケだよ私的に。
だってあんなに不安定だった Vista が今や一番問題が無い Windows になっている事実。
7 って色々と早くはなったけど妥協の産物だし、Vista 路線を続けてほしかった開発者は多い。
というか続けていれな私は多分 Linux に移らなかったわけで。

x86 か x86_64 かで迷ったけど x86_64 で試してダメなら x86 版にすればいいやで。
64bit にしたい理由は VirtualBox 仮想マシンな Vista をもう少し快適に使いたいという理由だけ。
解っている問題は Flash のみだ、gnash でなんとかなればいいのだから。

私的な思惑はどうでもよくて、とっととインストール。
Fedora Project ホームページ

インストール用 iso が見当たらなかったので Live CD iso の x86_64 を落とす。
Live を使ってみると見事に英語、キーボードも英語レイアウトで動作する。
あぁ英語圏で作成された OS だなぁ。

インストールは全部英語、32bit iso だと日本語になるのかな?
インストールしてみても英語、右上のユーザー名の所から System ウンチャラをを選択。
旗のアイコンから Japanese を選んで再ログインでやっと日本語環境になる。

ぱぇぽぃ2 ? Blog Archive ? GNOME3 and PyGtk3
日本語化した後は上記ベータで試した時と特に違いを感じない。
ただ GNOME アプリのバージョン情報が全部 3.0.* と正式バージョン名になっているだけ。

ついでに再ログインでこんなのが出る。

コレはお好みで、解説はいらないよね。
~/.config/user-dirs.dirs
が見当たらない、この位置も変更になっているか。
追記::普通に Nautilus から F2 キーで変名したら作成された…

細かいことや GNOME2 との違いが次回から。

gdiplus save

Keyleigh をそろそろなんとかしたいと考えた。
拾ったデルヒャァコンポーネントを使っているだけのクソソフトだが。
せっかくなので画像コンバータ機能とかでも追加すれば面白くなるかも。

GDI+ を使うのが一番だよなぁ。
C# で使えば死ぬほど簡単だ。

using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

namespace iconpoli2
{
	class Program
	{
		static void Main(string[] args)
		{
			foreach (var s in args)
			{
				string t = Path.ChangeExtension(s, "jpg");
				Bitmap b = new Bitmap(s);
				b.Save(t, ImageFormat.Jpeg);
			}
		}
	}
}

コンバートならマジでこれだけだ。
いや、せっかくなので C++ でやりたいぞ。
と思ったけど

Gdiplus::Bitmap * img = new Gdiplus::Bitmap(__wargv[i]);
img->Save(outname, &Gdiplus::ImageFormatJPEG);

とやっても全然上手くいかない。

Transforming a JPEG Image Without Loss of Information (Windows)
Retrieving the Class Identifier for an Encoder (Windows)

どうやら自力で CLSID を取ってくるしかないようで。
つか ImageCodecInfo って class なのにサイズを得て malloc なの?
試しに普通な new で作ったら見事にヒープ領域不足、どういう設計だよ。

とにかく MSDN の方法で上記と同じになるよう C++ で作ってみる。
C++ じゃ ChangeExtension なんて便利なものは無いし GDI+ 初期化も必須。

stdafx.h

#pragma once

// 面倒なのでココで参照追加
#pragma comment(lib, "gdiplus.lib")

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0600 // Vista
#endif

#include <stdio.h>
//#include <tchar.h>
#include <wchar.h>
#include <windows.h>
#include <gdiplus.h>

凄く無駄だと解っているけど tchar を利用しないで UNICODE 関数をまんま使う。
てか今となっては Ansi 関数を併用する必要は無いと思うんだが。
WCHAR や UINT のマクロも利用したくない。
だって Visual Studio は大文字マクロの型名では色が付かないんだよね。
というかなるべく小文字にしたいと思うのは多分 Python のやりすぎ。

iconpoli.cpp

#include "stdafx.h"

using namespace Gdiplus;

int GetEncoderClsid(const wchar_t* format, CLSID* pClsid)
{
	unsigned int  num = 0;
	unsigned int  size = 0;

	ImageCodecInfo * pImageCodecInfo = NULL;

	GetImageEncodersSize(&num, &size);
	if(size == 0)
		return -1;  // Failure

	// コレだとヒープ領域不足になる
	//ImageCodecInfo * pImageCodecInfo = new ImageCodecInfo();
	pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
	if(pImageCodecInfo == NULL)
		return -1;  // Failure

	GetImageEncoders(num, size, pImageCodecInfo);

	for(unsigned int j = 0; j < num; ++j)
	{
		if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
		{
			*pClsid = pImageCodecInfo[j].Clsid;
			free(pImageCodecInfo);
			return j;  // Success
		}    
	}

	free(pImageCodecInfo);
	return -1;  // Failure
}

bool ChangeExtension(const wchar_t* src, wchar_t* dst, const wchar_t* ext)
{
	wchar_t path[4][256];
	_wsplitpath_s(src, path[0], 256, path[1], 256, path[2], 256, path[3], 256);
	_wmakepath_s(dst, 1024, path[0], path[1], path[2], ext);
	return TRUE;
}

int wmain(int argc, wchar_t* argv[])
{
	// GDI+ 初期化
	GdiplusStartupInput gdiplusStartupInput;
	ULONG_PTR gdiplusToken;
	GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

	for (int i=1; i < __argc; i++)
	{
		// makepath
		wchar_t outname[1024];
		ChangeExtension(__wargv[i], outname, L".jpg");

		Gdiplus::Bitmap * img = new Gdiplus::Bitmap(__wargv[i]);

		CLSID encoderClsid;
		int r = GetEncoderClsid(L"image/jpeg", &encoderClsid);
		if (r == -1)
		{
			wprintf(L"no CLSID");
			return 0;
		}
		// コレは上手くいかない
		//int result = img->Save(outname, &Gdiplus::ImageFormatJPEG);
		int result = img->Save(outname, &encoderClsid);
		if (result == Gdiplus::Ok)
			wprintf(L"Encode Success");
		else
			wprintf(L"Encode Failure");
		delete img;
	}
	// 後片付け
	Gdiplus::GdiplusShutdown(gdiplusToken);
	return 0;
}

長い。。。。。

たったこれだけのモンにえらく時間が掛かった、やっぱり C# のほうがいいかなと。
それと Python や C# ばかりやっていると開放処理をつい忘れそうになるよね。

CsharpRepl

mono にはこんなのがあるらしい。
ようするに C# 言語のインタラクティブシェルだ。

CsharpRepl – Mono

Ubuntu 10.10 には最初から入っていたので試してみる。
公式の解説が思いっきり LINQ だけど普通に foreach とかはどうだ。

using System; は初期状態から行われている。
for 文は一行で終わらせるか中括弧を語尾に付けないとエラーになる。
日本語は入力時に化けるけど UNICODE として処理しているようだ。
class なんかは作れない。
終了は quit; となっているが普通に Ctrl+D でいい。

Ctrl+D に慣れすぎて Windows の cmd.exe で EXIT を打つのが面倒…
というか Windows でも cmd.exe のほうがある程度の処理は簡単な体に…
それはどうでもよくて。

インタラクティブシェルだと嫌でも Python と比較してしまう。
静的言語を無理やり使うのだから Python レベルを求めるのは無謀か。

template and generic

Fedora 15 待ちで Linux ネタが作れないのでしばらく .NET で。

.NET Tips ページもかなり整理が終わった。
UTF-8 INI 読み書き関連と STL/CLR はほとんど書き直し。
.NET Tips – L’Isola di Niente

C++/CLI を久々に使ってみて見つけた。

#include "stdafx.h"

using namespace System;

/* こっちだと演算子が使えないとエラーになる
generic <typename T>
T calc(T a, T b)
{
	return a + b;
}*/

template <class T>
T calc(T a, T b)
{
	return a + b;
}

int wmain(int argc, wchar_t* argv[])
{
	Console::WriteLine(calc(3, 7));
	Console::WriteLine(calc<double>(3.1, 7.3));
	Console::WriteLine(calc<String^>("私って", "ほんとバカ"));
	//=>10
	//=>10.4
	//=>私ってほんとバカ
	return 0;
}

template は generic へのマクロだと思っていたけど全然違う。
template キーワードなら C++ の STL と完全に同様なんだね。
使うかどうかは置いておいて。

せっかく C# の INI 読み書きクラスを作り直したんだから何かに使いたい。
SeeMe が現行 Opera で使えないのは知っているんだけどヤル気が出ない。
ヤルとしたらまったく違うインターフェイスに変更したいし、何か思いついたら。

PyGtk 関係は GTK3 が普通に使える GNOME3 Fedora に乗り換えが終わってから。
今整理したってあっというまに時代遅れになる、進化が早すぎるよ…

追記

今頃気がついたけどコレってもしかして C++ のテンプレート機能を呼んでいるだけ?
標準 C++ と何も違いが無いのだとしたら STL/CLR の存在価値って何なんだ。
知れば知るほど解らないコトが増えるのは標準 C++ と同じかよ…