Wednesday, July 30, 2014

How to toggle Gmail Chat User Interface to the old one チャットの画面を古いものに戻す方法

Gmaiにログインすると、左側に自分のアイコンがある
その右側にある小さい三角形のアイコンをクリックすると
このメニューが出てくる

「新しいハングアウトをお試してください」をクリックすると
Gmailでのチャットは、携帯アプリによくあるチャット画面になる

それは、スペースをとてつもなく無駄に使うもの!
チャット内容の前後をよく見る人は、ひたすらスクロール羽目に!

だが、それで、世界の終わりではない

また自分のアイコンの右側をクリックすると、
以下のメニューが現れる

このメニューの一番下、つまりこの行の上!、
には、「以前のチャットに戻す」がある

それをクリックすると、いろいろ言われるが、
Okを押せば、無事に元の、すっきり画面に戻れる

PCユーザにはやはり古い画面はいいと思う人が少なくないだろう

Friday, July 25, 2014

Study Memo of ROOT - Gradient Merge of Two Images 学習メモ

Original Image 1
Original Image 2
Gradient Merge

#include "TImage.h"
#include "TCanvas.h"
#include "TArrayD.h"
#include "TROOT.h"
#include "TColor.h"
#include "TAttImage.h"
#include "TEnv.h"

void imgProc02()
{
  TImage *img1 = TImage::Open("IMGP4782.png");
  TImage *imgG = img1->Clone("img2");
  TImage *img2 = TImage::Open("IMGP4783.png");

  imgG->Gradient();
  img1->Merge(imgG, "tint");
  imgG->Gradient(0, "#000000 #FFFFFF");
  img2->Merge(imgG, "tint");
  img1->Merge(img2, "lighten");
  img1->WriteImage("GradientMerge.png");
}

Study Memo of ROOT - TImage::CopyARea 学習メモ

Original Image 1
Original Image 2
Composite Image in mosaic tiles 

Source code is as below.

#include "TImage.h"
#include "TCanvas.h"
#include "TArrayD.h"
#include "TROOT.h"
#include "TColor.h"
#include "TAttImage.h"
#include "TEnv.h"

void imgProc01()
{
TImage *img1 = TImage::Open("IMGP4782.png");
TImage *img2 = TImage::Open("IMGP4783.png");

int w = img1->GetWidth();
int h = img1->GetHeight();

int gridX = 3;
int gridY = 3;
int tileW = w/gridX;
int tileH = h/gridY;

for (int i=0; i<gridY; i++) {
  for (int j=0; j<gridX; j++) {
    if ((j%2 == 0 && i%2 == 0) || (j%2 == 1 && i%2 == 1)) {
      img1->CopyArea(img2, i*tileW, j*tileH, tileW, tileH, i*tileW, j*tileH);
}
  }
}
img2->WriteImage("MregeFunOverlay.png");
}


The same result can be achieved by the following code too, using FillRectangle and Merge.

#include "TImage.h"
#include "TCanvas.h"
#include "TArrayD.h"
#include "TROOT.h"
#include "TColor.h"
#include "TAttImage.h"
#include "TEnv.h"

void imgProc01()
{
TImage *img1 = TImage::Open("IMGP4782.png");
TImage *img2 = TImage::Open("IMGP4783.png");

int w = img1->GetWidth();
int h = img1->GetHeight();

int gridX = 3;
int gridY = 3;
int tileW = w/gridX;
int tileH = h/gridY;

for (int i=0; i<gridY; i++) {
  for (int j=0; j<gridX; j++) {
    if ((j%2 == 0 && i%2 == 0) || (j%2 == 1 && i%2 == 1)) {
      img1->FillRectangle("#FFFFFF", i*tileW, j*tileH, tileW, tileH);
}
    if ((j%2 == 0 && i%2 == 1) || (j%2 == 1 && i%2 == 0)) {
      img2->FillRectangle("#FFFFFF", i*tileW, j*tileH, tileW, tileH);
}
  }
}
img2->Merge(img1, "tint");
img2->WriteImage("Mrege-Overlay-tile-sub.png");
}

The Merge Function of TImage - Study Memo of ROOTの学習メモ

Original Image 1
Original Image 2
op="Add"
op="allanon"
op="alphablend"
op="colorize"
op="darken"
op="diff"
op="dissipate"
op="hue"
op="lighten"
op="overlay"
op="saturate"
op="screen"
op="sub"
op="tint"
op="value"
Program is as below.
#include "TImage.h"
#include "TCanvas.h"
#include "TArrayD.h"
#include "TROOT.h"
#include "TColor.h"
#include "TAttImage.h"
#include "TEnv.h"
void imgProc()
{
  TImage *img1 = TImage::Open("IMGP4782.png");
  TImage *img2 = TImage::Open("IMGP4783.png");
  img2->Merge(img1, "value");
  img2->WriteImage("MregeValue.png");
  //img2->Draw();
}

Thursday, July 24, 2014

Selective Colorization with GIMP で指定領域だけの色を残す方法




入力のカラー画像 
出力画像:東京タワー部だけはカラー画像。残りは白黒
手順は以下の通りです。

  • 「レイヤーの複製」
  • 色-脱色
  • 「レイヤーマスクの追加」、背景を「白」に
  • ブラッシュを選択し、描画色を黒に
  • 原色を残したい部分をなぞっていく

Tuesday, July 22, 2014

A Memo on ROOT by CERN ルートのメモ

Wikipediaによると、「ROOT(ルート)は、CERNによって開発が行われている、データ解析環境および関連するライブラリ群である。グラフ作成のみならず、ヒストグラムの操作、4元ベクトルの扱い、実験データの可視化など、高エネルギー物理学の研究に不可欠な要素が組み込まれている。開発当初は素粒子実験のデータ解析用ソフトウェアとして構築されたが、近年では高エネルギー宇宙物理学や天文学といった分野でも使用されている。」

英語の説明は、「CERN maintained a program library written in FORTRAN for many years; development and maintenance were discontinued in 2003 in favour of ROOT, written in C++. ROOT development was initiated by René Brun and Fons Rademakers in 1994.」

ROOT指南書はKAKUKEN2006 川村広和氏によるROOTの入門書です。

ROOT講習は山形大学・理学部・物理学科・フォーク核物理学グループ・宮地研究室による簡単なチュートリアルです。

ROOT 初心者用チュートリアルは東京大学によるものです。

全て英語ですが、CERNによるROOTのドキュメントはこちらです。その中に、チュートリアルというリンクがあり、学習向けの詳細な情報はあります。

Thursday, July 10, 2014

Puzzle Game 2048 パズルゲームのコツ・必勝法

ハマる数値パズルゲーム「2048」攻略のコツによると、

  1.  大きい数字は端っこに集める
  2. 1方向の移動を禁止して、3方向のみで勝負する。右の列は常に4つのタイルが埋まっているようにする
  3.  [2]を消すことを優先する
基本ルールは極めて単純ですが、頭を使って考えながらプレイしないと、あっという間に終わってしまうゲームです。言い換えれば、高得点を出すには、見た目ほどやさしくありません。
北イタリアに住む1994年生まれの Gabriele Cirulli 氏によって開発されたそうです。

頭脳系パズルゲーム【2048】攻略法!によると、以下の2つのコツがあるそうです。

  1.  「左スワイプを封印」してひたすら右側にタイルを寄せ続ける
  2. 上下スワイプで組み合わせ可能なタイルの出現を待つ

 個人的に、コツとして実践したのは、以下の通りです。
  1. 3方向だけ動かす。たとえば、左右、下。
  2. 大きい数字を一遍に置く(固定層と呼ぶ)。上の例では下。
  3. 大きい数字を隅に、また降順(左角にある場合右に向かって降順)で作る
  4. 大小交じりの「層」を作らない。上の例では、層は左右方向で、下に向かって必ず昇順で作る
  5. 固定層(上の例では下)は常に隙間なく埋めておく
これは、階段を作る作業だと思えばいいです。登り階段(数字が昇順)でしか作ってはダメだという暗黙のルールがあります。下りができた場合、すかさずどうにかしてそれをなくしていきます。外回りから、常に頂点(上の例では左隅)を見れなければいけません。
 並び順がみだらて、「大小大」のような「ができてしまう時に、すかさずそれを埋めなければ、一貫の終わりです。
 後は、算数の問題ですが、タイルの数値を4で割っての合計は、タイルを移動する最大のステップ数です。「最大」と言っているのは、新規のタイルは時には4もあるので、その数分を減らす必要はあります。
 原理はすこぶる簡単で、上のコツさえ守ればクリアできるはずです。但し、新規タイルの位置がランダムだから、時には都合の悪い組み合わせがあります。
マイ・基本ルール
下への移動を禁止
最大のタイルを(例えば左上)隅に
大きいタイルから降順に
辺に沿った「階層」も降順
コツを考えずに出したマイ・ハイスコア
並び順が乱れて、「穴」だらけ
これも失敗例
並び順を考えたが、途中でちょっとだけの乱れで
穴ができてしまい、大きいタイル作りの足場が狭くなり
最後、穴がどんどん増えて、とうとうスペースゼロになる


2048を達成時の画面
2048ができてもまだ続けられる
次のゴールは4096!
これはよりコンパクトに2048達成例
これなら、4096を狙える位置だ
4096へチャレンジしたが、
High Scoreを32936まで伸ばせても、見事挫折
2層目の逆順はどうしても直せなくて、苦しかった
この並び方だと、右への移動はいつもドキドキする
問題の行の左側が埋められるかは心配!

Fractal Graphics Gallery フラクタル画像集

Gorilla in Burning Ship
xnew=x*x-y*y-px
ynew=2|x*y|-py
-0.33<x<0.33; -0.25<y<0.25
-0.33-0.25px=1.743, py=0.02
maxLoop=120, explosion threshold=8
the head of the gorilla
-0.06<x<0.06; 0.059<y<0.15
"Hole" in the center of the gorilla's chest
-0.0052<x<0.0052; 0.0610<y<0.0750
A "frog"
-1.2<x<1.2; -1.3<y<1.3 4; Px=-0.45; Py= 0.70
loop=150; explosion threshold=8
Alzheimer Brain
 -2<x<2; -2.2<y<2.2; Px=0.75; Py=0.9
loop=120; explosion threshold=120
Mandelbrot; Znew=Z*Z*Z+c (c=-1.801+0.089i)
Julia set: Dendrite (1)
Julia set: Dauady's Rabbit Fractal (-0.123+0.745i)
Julia set: San Marco Fractal (-0.75)
Julia set: Siegel Disk (-0.391-0.587i)
Znew=1/Z*Z+c  Julia set at (-0.71, 0.1)
Znew=1/Z*Z+c  Julia set at (-0.71, 0.1)
Fix c, Z0=(Pixel position)
Newton with disturn of P(0.1, 0)
Znew=z-F(z)/(F'(z)+P)
F(z)=Z*Z*Z-2*Z-5
Newton Secant Method; The "Ghost"!
Znew=Z-F(z)/(F'(z)+P)
F'(z)=(F(z+h)-F(z))/h
range: x(-0.7, 0), y(-0.4, 0.4), P(0, 0)
Newton Method; Complex Cubic; Pink Mask
f(z)=(z-1)(z-c+0.5)(z+c+0.5)
range (-0.361324, 0.586676), (-0.638263,0.625737 )