木曜日, 11月 29, 2012

Microsoft Seminar: "The New Era of Work" (Windows 8)

Chicago
At the Microsoft hosted seminar "The New Era of Work", it claimed the year 2012 is an important era for the operating systems, which will incorporate touch screen capabilities, mostly due to the widespread use of mobile phones and tablets. 

Windows 8 does come with the brand new Metro style interface with boxes occupying the screen rather than icons, together with gesture recognition.  Swiping down will close the applications.  SNS updates will be tied with your directory information.  Picture password.  Start typing in and the app comes up, the Microsoft IT evangelist Brian Lewis told the audience.  It took him half a year just to come across the feature, he said. 
IT Pro Evangelist: Brian Lewis

Microsoft has a Metro style app store online.  The apps are searchable there as well, including those being sold online.  On app search box, a question came from the audience.  Can you set parental permissions? There the speaker offered a very modern answer to all possible questions.  Go online, visit his site, ask him the question there. 

http://mythoughtsonit.com/ITcamp/

There should be a lot of questions indeed.  Microsoft claims to have authority over all Metro apps distribution.  Developers need to get its approval to put their apps online for use for other machines than theirs.  Can Microsoft then take the sole responsibility of the apps? How long will be the wait time?  Would the developers' rights be severely restricted?  There are reports that the pre-installed Windows 7 apps seem to run, but the installers may not work.  It costs $49 (personal) or $99 (corporate) to submit your apps for sale at the Windows Store.

Windows 8 is going to be installed in EVERY machine available in the market.  FSF, the Free Software Foundation is asking for signing the petition: "Windows 8 doesn't offer me the privacy and freedom I deserve. I won't be upgrading to Windows 8; instead, I'm standing with the free software movement."

We had a little discussion on this topic back here.  Would it is not practical for Microsoft to have oversight over all Metro apps?  The Apple store does that, they told me.  It is for security and to make money. 

Other topics that got many asking questions is on Windows to go or USB/SSD to go feature that can put your system in the removable storage and boot the system from there.  There are such bootable image available online but not from Microsoft official site.  Now it is all possible to carry your system along wherever you go.  The questions from the audience: Security?  Partitions?  Data protections?  Will it erase the data?  There was no question, however, on how to prevent pirated such bootable systems from being sold.  Will it be protected from piracy?

Microsoft Seminar: "The New Era of Work" (Surface)

Chicago

Microsoft hosted a seminar in Chicago on Wednesday titled "The New Era of Work".

Microsoft claims this is the new era of for Operating Systems.  The Internet, iPhone/iPad, and cloud has changed the nature of computer systems. 

Microsoft has long been pushing for tablet machine for some time.  And the competition is a nice thing.  The latest iPad 4 offers hardly hardware improvements other than resolution.

At the conference room, the Surface RT's were on display along with Lenovo and Toshiba machines.  All those tablet machines have no home buttons.  Swiping out to the edge does the trick.  And they come with keyboards. 

At the Surface booth, they explained to me that Surface RT has somewhat unique capability that Apple's iPad does not.  It works as a remote terminal and runs apps on the host machine just like a workstation.  That, is a wonderful idea, I thought.  There could be many application for it.  "Can you show me how it works?" I asked.  The machines are not connected, they told me.  They were not able to show me how it works as a terminal. 

The only reason why iPad or iPhone can not be loaded as a removable drive is because of security concerns.  The MP3's and eBooks are copyright protected.  If only those directories that contain the copyrighted files then they will be more accessible by the possibly criminals.  What the remote terminal does is that the files in tablets would be accessible freely.  The remote terminal apps might have security concerns. 

Instead of that wonderful feature, they showed me the Surface apps fully loaded with shop icons.  The sight of the ads of all those stores on the screen overwhelmed me.  It looked much bigger than the simple and elegant Apple Store.  "This may change the business style, and consumer life style", keynote speaker said. 

So how about Surface Pro?  The new version of Surface runs on Intel chip.  It means, it runs Windows 8.  And that means, every desktop apps should work on Surface Pro.  Would it be a killer machine?  Does that mean my desktop apps works on my tablet machine?  "You must recompile all apps for that machine," one of the participants told me.  "Surface Pro will be coming in January," the Microsoft people told me.  "The pricing is not yet announced.  It will be as big as the RT machine," they said in answering my questions. 

to be cont.

火曜日, 11月 27, 2012

ボックスレイアウトが absolute で破綻

表題の通りです。

Firefox, IE でボックスレイアウトを使用する場合。

位置指定に absolute を指定するとレイアウトが壊れます。

<div style="display:box;display:-moz-box;display:-webkit-box;position:absolute;top:100px">
<div style="width:100px;height:100px;border:1px solid blue"></div>
<div style="width:100px;height:100px;border:1px solid blue"></div>
</div>

見事に人柱となった気分です。

#厳格とかいう問題じゃないですよね。これ。

月曜日, 11月 19, 2012

Google Analytics API: フィルターをつける

本日の出来事。

ダメ上司の典型。「これネットで見付けんたんだけどどお」
どおって... システム全部書き直せって?

え、あのタグってこちらがつけたものじゃないし、むこうが取り外すだけで話は解決じゃないでしょうか。
こちらがフィルターつけて取り外すのって、それって仕事の一部ですか?!

で、仕事が遅くなったとかいって嫌がらせ。最低。最悪。ほんと性格と頭が悪い。

愚痴はさておいて。本題。

Google Analytics のデータを取り出す方法。

フィルターをつける場合について、書いておきます。

$filter="ga:hostname!=ホスト名";
$ga->requestReportData(homepageId,null,array('pageviews','visits','bounces','entrances','timeOnSite','exits','newVisits'),null,$filter,$startDate,$endDate);

火曜日, 11月 13, 2012

IEでリンク切れ画像を表示しない

リンク切れ画像は、Firefox では表示されません。

ところが親切設計の IE や Chrome では、画像が見当たらないとそれ専用のアイコンを表示してしまいます。

これで困ったのが、画像リンクを利用してスクリプトを走らせるハックを使うアクセス統計サービスの場合。

きちんと表示されれば問題なく img タグだろうとなんだろうと構わないわけですが、ところがサーバーの都合でスクリプトが動かないという状況が発生。

動かないだけ「画像ありません」というアイコンかしっかり表示されてしまいました。

アクセス統計などアナリティクスに任せとけばいいのに、マイナーブランドなど使うからサーバーの都合で対応をせざるを得ないはめに。

そこで、画像切れリンクは問答無用で「表示しない」という方針といたしました。これで振り回されずにすみます。

本題へ。リンク切れ画像の IE と Chrome 対応策です。

img タグのすべての要素を取り出し、画像読み込みが終らないものをすべて非表示とすればよいようです。

$(function(){

$('img').each(function(){

if(!this.complete){
$(this).hide();
return;
}

});

});

月曜日, 10月 29, 2012

Object-C 文字列;Makefile

Object-Cでは文字列はNSStringなどを使うことができます。

文字列へのポインタとして扱うことができます。

メンバ関数 UTF8String を使うと、char*として扱うことができます。


#import <stdio.h>
#import <foundation/foundation.h> 
#import <Foundation/NSObject.h>

@interface Verb:NSObject
-(void)print: (NSString*)stem;
@end

@implementation Verb
-(void)print: (NSString*)stem
{
  char* str=[stem UTF8String];
  printf("%sim\n",str);
  printf("%sis\n",str);
  printf("%si\n",str);
  printf("%sime\n",str);
  printf("%site\n",str);
  printf("%si\n",str);
}
@end

int main()
{
  NSString *stem=@"rozumim";
  id obj=[Verb alloc];
  [obj print:stem];
  return 0;
}

GNUmakefile ファイルにおいて、以下のようにコンパイルの条件を指定すると、make 一発でコンパイルできます。

GNUSTEP_MAKEFILES=c:/GNUstep/GNUstep/System/Library/Makefiles
include $(GNUSTEP_MAKEFILES)/common.make

TOOL_NAME = verb
verb_OBJC_FILES = verb.m

include $(GNUSTEP_MAKEFILES)/tool.make


土曜日, 10月 27, 2012

Objective-Cのプロトコルとは

Objective-C では、クラス継承の際に必須のメソッドを規定するプロトコルという概念があります。

まさしく、Java でいうところのインターフェースの概念と同じもので、メンバ関数を持たないクラスとして実装されます。プロトコルで指定されるメソッドは宣言のみで、抽象クラスとして実装されます。

#import >stdio .h=".h">
#import >foundation bject.h="bject.h">

@protocol ToString
-(void)toString;
@end

@interface Test:NSObject>tostring>
@end

@implementation Test
-(void)toString
{ 
  printf("This is class Test.\n");
}
@end

int main()
{
  id obj=[Test alloc];
  [obj toString];
  return 0;
}



火曜日, 10月 23, 2012

Objective-C のクラスメソッド

Objective-Cにも静的なメソッドというものがあります。

Objective-Cの用語ではクラスメソッドというものです。

Javaでいうところのstaticにあたります。

当然ながら、メンバ変数を持つことはありません。

メソッドの宣言に+(プラス記号)をつけます。

#import <stdio.h>
#import <Foundation/NSObject.h>

@interface Test:NSObject
{
  int index;
}
- (void) hello;
- (void) setIndex:(int) i;
+ (void) dump;
@end

@implementation Test
- (void) setIndex:(int) i
{
  self->index=i;
}
-(void)hello
{
  printf("Hello NSObject %d\n",self->index);
}
+(void)dump
{
  printf("Class method = static");
}
@end

int main()
{
  [Test dump];
  return 0;
} 

他にも@propertyや@synthesizeなどいうキーワードがありますが、GNUstepはサポートしていません。

参照先がreleaseされたときの挙動を変えるものです。
@property(nonatomic, assign)
@property(nonatomic, retain)

月曜日, 10月 22, 2012

OOP, any problems?

Do not compare apples and oranges.

OOP is implemented as an extension of C.  But it is a completely different concept. 

What is good about OOP is the change of the design framework of programming.  Say, Lisp can be converted to C and that indeed is what the compiler does.  But they are different languages with more focuses on its abstraction.  Likewise, OOP is a way of abstraction, a way to express it.

Writing in Lisp is different from writing in C.  They are not interchangeable.  It may be the same to the machine but not to programmers.

Not even knowing the importance of its concepts and talking about issues of implementation, is somewhat like looking at trees and not seeing the woods.

It is just a way to devalue OOP. 

The reason why they are to denigrate the importance of the revolution, is totally of theirs, not ours.

In the year 2012, why should we need to emphasize the importance of OOP for Pete's sake?

Please.  Let us have the freedom of thoughts and religions.

日曜日, 10月 21, 2012

Object-Cのクラスについて

それでは試行錯誤でどうやら動くようになったGNUstepの話の続きを。

Object-CはC++に似て、クラスの定義にヘッダーを必要とします。

変数・関数の宣言に順番を気にしなければならなかったCの名残りといえるでしょう。

定義と実装は別々に行います。

Javaの場合には、そんなものは必要がなく、publicクラスにそれぞれ独自のファイルを用意してクラスの実装のみを記述します。

#importでクラスを指定さえすれば、順番も関係なく使用することができます。

Object-Cのクラス宣言と実装、呼び出しの方法を下記に示します。

#import <stdio.h>
#import <Foundation/NSObject.h>

@interface Test:NSObject
-(void) hello;
@end

@implementation Test
-(void)hello
{
  printf("Hello NSObject\n");
}
@end

int main()
{
  id obj=[Test alloc];
  [obj hello];
  return 0;
}

コンパイラオプションはこちらを使いました。
gcc nsclass.m -I c:/GNUstep/GNUstep/System/Library/Headers -L c:/GNUstep/GNUstep/System/Library/Libraries -lobjc -lgnustep-base 


Objective-Cは引数の指定の仕方が独特です。

型をいちいち指定して呼び出します。

Javaのように引数とメンバ変数を同名にすると警告が出ます。

#import <stdio.h>
#import <Foundation/NSObject.h>

@interface Test:NSObject
{
  int index;
}
- (void) hello;
- (void) setIndex:(int) i;
@end

@implementation Test
- (void) setIndex:(int) i
{
  self->index=i;
}
-(void)hello
{
  printf("Hello NSObject %d\n",self->index);
}
@end

int main()
{
  id obj=[Test alloc];
  [obj setIndex:10];
  [obj hello];
  return 0;
}

土曜日, 10月 20, 2012

Windows で GNUstep を使った Object-C プログラミング

iPad が隆盛を極めてはや数年、マイクロソフトもついに(高額)タブレットPCを発売。

キーボードに凝りまくったというCMがネットで流れています。26日にはARMベースのマシンが発売されます。

最安モデルで499ドル。まさにアップル並みの値段。

競合モデルとしては、もっさりと遅いでも安いAndroidマシンか、アップルの小型iPadマシンか。

1月には Windows 8 ベースのマシンが発売されます。

Windowsベースのアプリが動くとなれば、これは革命です。


開発者として、傲慢なアップルの「開発しにくくしてカネをとろうとする」態度は正直なところ好きになれません。

頭(か性格か)の悪すぎるやりかただと思います。

と正直な感想から、Object-Cのはなし。

WindowsでもGNUstepというプロジェクトがあって、Object-Cでプログラムが書けます。

こちらを参照しました。

OOP言語であるObject-Cですが、C#よりJavaに遠い。

PC販売に影響したというタブレット市場がどのように変化していくのか、新製品を横目にプログラムにいそしむ週末になりそうです。

金曜日, 10月 05, 2012

Elispで文字列置換

久しぶりに elisp でプログラム。

オープンソースの始祖であるところのGNUの鉄則に従って、書いた分だけここに置いておきます。

文字列変換というごくごくシンプルなものですが、変換後にバッファでのポイントの位置がずれることに注意。

(defun replace-tags-region (from-string to-string begin end)
"Replaces from-string to to-string in the region from begin to end."
  (let ((len (- (length to-string)(length from-string))))
    (goto-char begin)
    (while (search-forward from-string end t)
      (replace-match to-string t)
      (setq end (+ end len)))))

(defun replace-tags-list (tag-list)
"Takes a list of (from-string to-string) and replaces all from-string to to-string in the buffer."
  (replace-tags-region (car tag-list) (cadr tag-list)(point-min)(point-max))) 

  

;; Usage:
;; (setq tag-list '(("TABLE" "table")("TD" "td")("TR" "tr")))
;; (replace-tags tag-list)

(defun replace-tags (tag-list)
"Takes a list of lists of (from-string to-string) and replaces all from-string to to-string in the buffer."
  (mapcar 'replace-tags-list tag-list))

(defun create-end-tag (tag-name)
  "Creates closing tag from the given tag-name."
  (concat "</" tag-name ">"))

(defun create-half-begin-tag (tag-name)
  "Creates opening tag from the given tag-name."
  (concat "<" tag-name " "))

(defun create-attribute-tag (tag-name)
  "Creates attribute string from the given tag-name."
  (concat " " tag-name "=\""))

(defun create-begin-tag (tag-name)
  "Creates opening tag from the given tag-name."
  (concat "<" tag-name ">"))

 

;; Usage:
;;(setq tag-list '("TABLE" "TD" "B" "BR" "A" "HTML" "NOSCRIPT" "SCRIPT" "HEAD" "BODY" "TR" "TITLE" "I"))
;;(mapcar (lambda (x)(create-replacement-list 'create-end-tag x)) tag-list)
(defun create-replacement-list (create-list tag-name)
"Creates a list of tag name and lowercase tag name lists."
  (cons (funcall create-list tag-name) (list (funcall create-list (downcase tag-name)))))

(defun lowercase-html-tags()
"Converts uppercase HTML tag names to lowercase."
  (interactive)
  (let* ((tag-list '("TABLE" "TD" "B" "BR" "A" "HTML" "NOSCRIPT" "SCRIPT" "HEAD" "BODY" "TR" "TITLE" "I"))
  (attribute-list '("VALIGN" "ALIGN" "WIDTH" "HEIGHT" "BOTTOM" "CLASS" "BGCOLOR" "BORDER" "LEFT" "RIGHT" "TOP" "CELLPADDING" "CELLSPACING" "BORDERCOLOR" "CENTER" "MIDDLE" "HREF" "COLSPAN" "ROWSPAN" "SRC" "onMouseOver" "onMouseOut" "ALT" "NAME" "ID" "VSPACE" "LINK" "META" "LEFTMARGIN" "TOPMARGIN" "MARGINWIDTH" "MARGINHEIGHT" "onLoad" "BACKGROUND" "TYPE" "HTTP-EQUIV" "CONTENT" "REL" "LANGUAGE"))
  (half-tag-list '("TABLE" "TD" "A" "IMG" "LINK" "META" "SCRIPT" "BODY" "TR" "DIV"))
  (replacement-end-tags (mapcar (lambda (x)(create-replacement-list 'create-end-tag x)) tag-list))
  (replacement-begin-tags (mapcar (lambda (x)(create-replacement-list 'create-begin-tag x)) tag-list))
  (replacement-half-begin-tags (mapcar (lambda (x)(create-replacement-list 'create-half-begin-tag x)) half-tag-list))
  (replacement-attribute-tags (mapcar (lambda (x)(create-replacement-list 'create-attribute-tag x)) attribute-list)))
    (replace-tags replacement-attribute-tags)
    (replace-tags replacement-end-tags)
    (replace-tags replacement-half-begin-tags)
    (replace-tags replacement-begin-tags)))

水曜日, 9月 19, 2012

IE でCSS3の display:box を使うには、flexie.js を使えばいい

そうです。IEはまだCSS3の display:box 仕様に対応していません。

このボックス仕様を使うと、横並びのボックスがエレガントに書けます。


外側のDIVに、このように指定します。

    display: -webkit-box;
    display: -moz-box;    
    display: box; 
 
内部のDIV要素がきれいに並んでくれます。
 
ただし、上記のようにIEには対応していません。

そこで、この flexie.js を導入すると、見事に横並びボックスが実現できます。

ダウンロード:http://flexiejs.com/
 
これでページのHTMLタグが整理できそうです。
 
 

土曜日, 9月 08, 2012

シームレスの背景画像をGIMPで作るには

シームレスの背景画像をGIMPで作るには、メニューからFilters|Map|Make Seamlessを選択します。

すると画像を一発でシームレスにできます。

こんな感じです。

http://easai.web.fc2.com/odonata/photoindex/


木曜日, 9月 06, 2012

Excel のマクロを消すマクロ

Excel のマクロを消すマクロを書こうと思ったら、警告が出ました。

マクロはこんな感じです。

こちらのページ「VBAでマクロのソース削除と標準モジュール削除」を参照させていただきました。

Dim objVBCOMPO     As Object
        For Each objVBCOMPO In ActiveWorkbook.VBProject.VBComponents
            With objVBCOMPO.CodeModule
                If .CountOfLines <> 0 Then .DeleteLines 1, .CountOfLines
            End With
            If (objVBCOMPO.Type = vbext_ct_StdModule Or objVBCOMPO.Type = vbext_ct_MSForm) Then
                ActiveWorkbook.VBProject.VBComponents.Remove objVBCOMPO
            End If
        Next objVBCOMPO
        Set objVBCOMPO = Nothing
End Sub


これをデフォルトの設定で走らせると警告が出ます。



これは、マクロセンターの Trust access to the VBA project object model オプションをオンにすると動くようになります。

金曜日, 8月 31, 2012

クリックで表示を切り替える(単位変換など)

米国での長さの単位はきわめていまいましいことにすべてインチ・フィートです。

 ここで、インチ・フィートに要素を変換する jQuery スクリプトを示します。

 $(document).ready(function(){
  $(".millimeters").hide();
  $("#convertIN").click(function(){
   $(".millimeters").hide();
   $(".inches").show();
      });
  $("#convertMM").click(function(){
   $(".millimeters").show();
   $(".inches").hide();
      });
     });

JQuery であると容易に要素の表示を切り替えることができます。

 ... there was a question in the Reddit session to Obama whether the US would ever move to metric system.

リンクをかけたブロックの中に、別のリンク先に飛ぶエレメントを置く

リンクをかけたブロックの中に、別のリンク先に飛ぶエレメントを置きたいとします。

ブロックにはリンクがかかっているので、内部の要素をクリックしてもリンク先に飛んでしまいます。

どのようにリンクを無効にするか。

jQuery には event.preventDefault() というメソッドがあります。

これを呼ぶと、ブロックにかかっているリンクを無効にできます。

     $(document).ready(function(){
         $(".クラス名").click(function (event){
             event.preventDefault();
             document.location="飛ばしたい先のアドレス";
         });
     });


これで、内部要素をクリックすると、ブロックにかかっているリンクを無効にして指定されたアドレスに飛ぶよう指定できます。

(はいはい。ブロックにリンクをかけるというのは推奨されない方法です。)

水曜日, 8月 29, 2012

好みのエディタでオンラインの文章を編集する

ブログ編集画面などで、テキストエリアの文章を好きなエディタで編集可能な Firefox のアドオンがあります。

→ It's All Text!

このアドオンを使うと、テキストエリアにボタンがついて、押すと指定されたエディタが起動します。

ホットキーやエディタの設定は、Firefox のメニューから、Add-ons の Extensions で設定します。

 It's All Text の Options ボタンを押すと、設定画面が表示されます。


このアドオンがあると、オンラインでのテキスト編集の精神的負担が軽くなります。

ブログなどでオススメです。

火曜日, 8月 28, 2012

xampp 1.8 にアップグレードしました。

xamppをアップグレードしました。Ver. 1.8が最新のようです。

MySQLもアップグレードとなるので、データベースも移動することになります。

このあたりは、data以下をすべてまるごとコピーでOK。

phpMyAdminでID/Passwordの設定を行ってデータベースがきちんと移動できたかどうかを確認して一安心。

ファイル: config.inc.php
$cfg['Servers'][$i]['user'] = 'ユーザー名';
$cfg['Servers'][$i]['password'] = 'パスワード';

PHPのデフォルトがすべての警告を表示するとなっているので、まずそいつに黙ってもらって無事にアップグレードを完了。

ファイル: /php/php.ini
;error_reporting = E_ALL | E_STRICT
error_reporting = E_ERROR

を使えるようにして、curlを有効にする。

short_open_tag = On

extension=php_curl.dll
 
コントロールパネルもアップグレードされておりました。

月曜日, 8月 06, 2012

Excelのキャッシュをクリアする

Excelマクロの問題です。

サブルーチンの文字を書き換えるとExcel自体が壊れる。

といういかにもプログラミング環境の不備という問題に直面しました。

プレコンパイルしているとすればキャッシュファイルを消すという手順が必要となるわけですが、ネットに情報がない。

ActiveXのキャッシュがあるとされる場所には.exdファイルは見当たらず。
C:\Users\ユーザー名\AppData\Local\Temp\VBE

...

結局サブルーチン名を書き換えるということで問題を解決。

木曜日, 8月 02, 2012

Windows上でepubを作成する方法

とはいっても、改造したファイルをepub形式に変更する方法の紹介です。

.epubファイルは、.zipファイルそのものです。拡張子を.zipにして 解凍するとファイルが読めます。

基本的にはxhtmlファイルで構成されます。

音声を追加したい場合には、xhtmlファイルにaudioタグを追加します。

<audio autoplay="false" controls="true" src="ファイル名"></audio> 
 
改造したファイルをepub形式に変換するときは、単に圧縮するだけでは.epub形式とはなりません。 

Windows上でepubを作成するには、

memetypeは圧縮しない。まずmimetypeをzipファイルに変換。
次いで他のファイルを追加する。拡張子を.epubに変換する。→完成



月曜日, 7月 16, 2012

cygwin 上でGCC 4.6.3 を導入して range-based-for を使う

range-based-for を使いたくて、g++4.6.3 にアップグレードしました。

cygwin の最新版は 4.5で、range-based-for は実装されていません。

[windows][cygwin]最新のg++コンパイラをCygwin上で導入する

コンパイルには ↑ このページを参照させていただきました。

↓ ソースはここからダウンロードできます。

GCC miror sites

 range-based-for を使ったコードを以下に示します。

#include<iostream>
using namespace std;
int main()
{
  int arraytest[5]={1,2,3,4,5};
  for(int i:arraytest)
    cout<<i;
  cout<<endl;
  for(int &i:arraytest)
    i=0;
  for(int i:arraytest)
    cout<<i;
}
コンパイラオプションは以下の通り。
$> g++ -std=c++0x range.cc

日曜日, 7月 15, 2012

chronoの使い方のメモ。

c++11で定義されているchronoの使い方のメモ。
#include <iostream>
#include <chrono>

int main()
{
  auto tp=std::chrono::system_clock::time_point();
  std::time_t t=std::chrono::system_clock::to_time_t(tp);
  std::cout << std::ctime(&t)<<std::endl;

  std::chrono::seconds sec(10);
  std::chrono::minutes min(3);
  auto result=sec+min;
  std::cout << result.count() << std::endl;
}
コンパイラのオプションは以下の通り。
/usr/bin/g++-4 -std=c++0x chrono.cpp
c++11ではラムダ式も使えます。
std::cout << [](int x, int y){return x+y;}(1,2) << std::endl;

土曜日, 7月 14, 2012

Java 5.0 可変長パラメータとfor-each

メモのために可変長パラメータとfor-eachを使ったコードを載せておきます。

public class VarLen
{
    int sum(int ... list)
    {
 int s=0;
 for(int i:list)
     {
  s+=i;
     }
 return s;
    }

    public static void main(String args[])
    {
 VarLen varLen=new VarLen();
 System.out.println(varLen.sum(1,2,3,4,5,6,7,8,9,10));
    }
}

金曜日, 5月 11, 2012

データベースでレコードを複製したい場合。

既出だとは思いますが、データベースでレコードを複製したい場合。

このテーブルの場合、IDがauto incrementで主要キーに指定されています。

複製したいレコードのIDを指定し、SELECT構文で値を取得。

その値を新規レコードとして登録します。

INSERT INTO pages SELECT '',title,contents,url FROM pages WHERE ID=$id

木曜日, 4月 12, 2012

Firefoxでフロート位置が不可思議な件

HTMLは常にシーケンシャルでコードを読み解きます。

ところが float などを指定すると、位置が自動的に計算され、時には思いもよらない場所に要素が出現します。



  <div style="padding-bottom:0px;">       <div style="float:left;"> Floating block       </div>   </div>
<div style="margin: 20px 0;border:1px solid red;"></div>


フロート要素があって、marginつきのブロック要素が並んでいます。

では、この場合どちらの要素が先に表示されるでしょう。

FirefoxとIEでは結果が違います。

IEではそのまま表示されます。つまり、フロート要素が上に表示されます。

ところが。Firefoxで見てみると分かりますが、Firefoxではブロック要素が上に表示されます。

そして、さらに不思議なことに、paddingを0ピクセルではなく1ピクセル以上に指定するとまた順番が逆になります。

同じコードでブラウザによって見え方が異なる困ったケースのひとつと言えるでしょう。

月曜日, 4月 02, 2012

Javaの内部匿名クラスからローカル変数にアクセス

Javaの内部匿名クラスから、実はローカル変数にアクセスできたわけですね。

finalをつけておくとコンパイルできます。

(finalでなければコンパイルできません。)


 public class Closure
{
    class Test{};
    
    Closure()
    {
    final int i=0;
    (new Test()
    {
        void test()
        {
        System.out.println(i);
        }
        }).test();
    }

    public static void main(String args[])
    {
    Closure closure=new Closure();
    }
}

もちろん値は変更できません。:)


水曜日, 3月 14, 2012

PHP: get relative path expression

The following code calculate the difference of paths given and return a relative path expression.
 

function getCommonPos($s0,$s1) {   $len=strlen($s0);   $len1=strlen($s1);   if($len1<$len)     {       $len=$len1;     }   while($s0[$i]==$s1[$i] && ++$i<$len1);   return $i; } function diffStr($s0, $s1) {   $pos=getCommonPos($s0,$s1);   $end=strrpos(substr($s0,0,$pos),"\\");   return substr($s0,$end); } function countSlashes($str) {   return substr_count($str,"\\"); } function getRelativePath($p0,$p1) {   $p0=realpath($p0);   $p1=realpath($p1);   $dir=diffStr($p0,$p1);   if(!empty($dir))     {       $n=countSlashes($dir);       $path="";       for($i=0;$i<$n;$i++)     {       $path.="..";       if($i<$n-1)         {           $path.="\\";         }     }     }   $newDir=diffStr($p0,$p1);   $newDir=$path.$newDir;     if(empty($newDir))     $newDir=".";   return $newDir; }

日曜日, 3月 11, 2012

Creating bookmarks with Silhouette Cameo

As the Silhouette Cameo is here, I wrote a Java program to draw regular convex polygons and cut out shapes from paper.  The photo shows the final product, a bookmark.  You can put any of your design into 'production'.  With Silhouette Cameo, you get the final products right away. 



The Studio software detects the outline of shapes automatically.  The procedure would be as follows:

  1. Print out shapes with your own software or draw it with Studio.
  2. Select Object|Trace... from the menu. 
          

            
    1. Click the "Select Trace Area" button.
            
    2. Select the area of the figure.
            
    3. Select "Trace Outer Edge".
            
    4. The red line appears surrounding the image.
            
    5. Delete the original image.
            
    6. Edit the outline.  Typically you would want to "Edit Points" from the left column of the window.
            
    7. When the editing is done, click the Silhouette icon from the tool menu.
            
    8. Place the paper on the cutting mat and set it to the machine.
            
    9. Click "Cut" button when everything is ready.
           


Send any shapes to Silhouette and find designs of your choice.  Try cutting shapes and figure out balances and sizes that fit your needs.  

土曜日, 3月 10, 2012

Silhouette Cameo arrived

Silhouette Cameo, the cutting machine arrived yesterday.

Silhouette Cameo

This is the machine of the future. Basically what this machine does is to cut flat and thin materials in any shapes that you specify. It should cut anything paper made that you look at in our lives, including packages, cards, paper craft, etc.

Shamrock

What more, it can detect markings on a printed surface. Any figures that can be printed out on a piece of paper can be cut out. There are a lot of designs for 3D models made out of paper.


A word of caution is that creating cutting pattern can be a little tricky and time consuming. Very thin materials such as copy paper needs extra caution to take it off from the adhesive mat. Heavier thicker paper than copy paper would do a better job.

This paper cutting machine opens up great many fronts in many areas of technologies, sciences, and crafting. This is an excellent tool for education as well. Cut shapes would appeal more to students. The assembled 3D models is much more than the printed images of polygons. Printing out the images of makes 3D modeling not only makes it much more fun but means even more to students of science when it has three dimensions.

Free download of the Silhouette Cameo Studio is here: silhouettestudio

金曜日, 3月 02, 2012

Screen refresh trigger of an input element value or src change

To which extent does a browser redraw the screen?  Would an element's value change trigger refreshing the screen?  

It turns out to be that the Javascript's setting values of an element, actually does not trigger redrawing. 

document.getElementById("test").value="new value";

What puzzled me was, why then the browser redraw the screen in case with setting an img element's src?

document.getElementById("test").src="data:image/png;base64, ...";

This makes it trickier to implement functions that changes value, or src since the behavior will differ when you would want to retain some values for the session.  

I hit upon this problem when I tried to implement a div section that is shown and hidden at a trigger of pressing a button.  The functionality was implemented in the Javascript function and first I implemented it so that it alter the value of an input element.  It worked.  When you press the button, the Javascript function altered the value of the type='button' input element, without refreshing the screen, that is retaining all the variable values.  Then I switched it so that it would alter an image of an type='image' input element.  Now it does not work.  It reset and initialized the screen, namely to a certain initial state and not the state that was specified as. 

日曜日, 2月 19, 2012

Holiday thoughts; high-tech items of the (very near) future

There are four items that I want to purchase.  All of them, I feel the future; with the advancement of technology, or rather, the availability of it.  So much can be accomplished with the right idea, better concepts, and better management. 

One is, Raspberry Pi, a small Linux box that costs $25, or $35 with network connection.  Just at those prices, the full fledged net book equivalent machine power will be offered to so many people in the world.  The 'charitable' organizations offer them 'for educational purposes' -- never a Windows machine.  With its graphics chip that can connect to TV screens, however, this can be a game changer. 

Another is, Craft ROBO, a cutting plotter.  There are numerous other machines that cuts paper, plastic, vinyl sheets, and other materials, but this machine, cuts items that are drawn on your PC.  No cartridges, no nonsense about those black-boxes to set cut patterns.  Its software takes a figure, calculate the outline, and the machine cuts it out for you.  Unfortunately, the latest model is out of stock.  Its manufacturer, Graphtech Inc, says the new model would be coming in March 2012. 

The other is, iPad3 or Windows 8 tablet PC.  App-wise, the share number one is the Android machines, however.  The Windows 8 tablet PC on ARM is yet to come, reportedly in March. 

Lastly, it is the 3D printer.  There are many types of them; stacking shaped plastic lump, cutting out a shape from a resin block, or even binding composite powder layer by layer.  iModela might be the one, but I need more research on these.  Taking out a plastic material, shape them in the way that you like as in printing figures on paper, and use them as in any way that you like, in modeling for fun and for any other useful purposes in research and engineering, replaceable parts of an equipment anywhere, etc.

水曜日, 2月 15, 2012

PHP's overload: __call()

In my last blog, I wrote about PHP's get/set "overload", or hooking those methods for private members. There are more overloading method in PHP. The __call() method overload methods. This method "overloads" hidden member functions; including those methods that are non-existent. That is, you can create on the spot a brand new method just by calling __call().
class Test
{
  function __call($name,$parameter)
  {
    $value=$parameter[0];
    switch($name)
      {
      case "round":
        $value=round($value);
        break;
      case "floor":
        $value=floor($value);
        break;
      case "ceil":
        $value=ceil($value);
        break;
      }
    return $value;
  }
}

$test=new Test;
echo "Rounding: round(16.4) = ".$test->round(16.4);
echo "<br />";
echo "Floor: floor(16.4) = ".$test->floor(16.4);
echo "<br />";
echo "Ceiling: ceil(16.4) = ".$test->ceil(16.4);
echo "<br />";
This actually is a potential technological breakthrough -- in that the methods bears arbitrary names that are pseudo-defined and typed not dynamically then at programming time. This is a conceptual revolution in the programming. Remember, OOP is just a different form of C's structure.
Rounding: round(16.4) = 16
Floor: floor(16.4) = 16
Ceiling: ceil(16.4) = 17

月曜日, 2月 13, 2012

"Overload"? or hooking get/set in PHP

In PHP, there are a set of functions that hooks getting and setting private member variables.  When the variable is set, __set() method will be called.  When the variable is accessed, __get() method is called.  In PHP's terminology, hooking variable definition and retrieval are called overloading. 

class HookTest
{
private $a=1;

public function __get($name)
{
  echo "$name is being retrieved<br />";
  return $this->$name;
}

public function __set($name,$value)
{
  echo "$name is being set<br />";
  $this->$name=3;
}
}

echo "<pre>";

$test=new HookTest;
$test->a=2;
echo $test->a;

金曜日, 2月 10, 2012

Newline in select-option tags

Our site had a list of fonts available for our clients. The list included, European and Cyrillic fonts. We put them in a drop-down list.

List of fonts:
     European
     Cyrillic

Then, it turned out to be that Cyrillic fonts were included in European fonts. We had to select/deselect both at the same time. The trouble is, the HTML's select's option does not take br tags, or new lines. All lines have to be in a single line. Here is a jQuery code that select/deselect European and Cyrillic fonts at the same time. The code hooks any click on the European fonts to a handler that select/deselect Cyrillic fonts.
 
    $('#European').live("click",function(){
     var selected=$('#European').attr("selected");
     if(selected=="selected") 
  {
      $('#Cyrillic').attr("selected","selected");      
  }
     else
  {
      $('#Cyrillic').attr("selected",false);      
  }    
 });

Here is a word of caution; we had yet another problem with the Cyrillic option with the reset operation. The Cyrillic option has to be deselected manually.
 
    // de-selects the Cyrillic option.
    $("#reset").click(function(){
         $('#Cyrillic').attr("selected",false);      
 });

水曜日, 1月 25, 2012

同じエレメントを指定して、なぜか表示が変わらない。

スタイルシートというのは、いまだ原始的な形態を保ち続け、多少なりとも論理を重視するプログラマ人種にとっての頭痛の種といえるでしょう。進化を続けるネット世界で、基準を設定するのは至難の業、軍閥割拠のジャングルのなかで右往左往してサバイバルゲームを続けるしかない。

で、今日の話題はエレメントの指定方法。スタイルシートで、同じエレメントを指定して、なぜか表示が変わらない。

table.background tr td
{
background-color:red;
}
table.background td
{
background-color:blue;
}

赤い指定をオーバーライドしているのに、これが青くならない。

<table class="background">
<tr><td>test<td>test
<tr><td>test<td>test
</table>

上記のスタイルの指定をよく見てみると、エレメントの指定方法に違いがあります。なぜか tr タグの指定が効いてるんですね。構造を書くと、そちらが優先されるアルゴリズムであるわけです。

これが意味のある基準であるかどうかはさておいて、知っておかないと他人のスタイルシートを使うときに困ることは間違いなしです。

Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...