hiiragi's ブログ

主にコンピュータ関係の備忘録を書いてます

より引数が少ない型へのアップキャスト

次の2つを組み合わせると0引数の型の変数に2引数の関数を代入できたりする

  1. (x:T, y?:T) => T型の変数に(x:T, y:T) => T型の関数を代入できる
  2. (x:T) => T型の変数に(x:T, y?:T) => T型の関数を代入できる

上の1のような代入が必要なケースがあるのかよく分からない

var fn2: (x:number, y:number) => number
fn2 = (x, y) => x * y;  // fn2に入っている関数は2引数

var fn1_: (x:number, y?:number) => number
fn1_ = fn2;

var fn1: (x:number) => number
fn1 = fn1_;

var fn0_: (x?:number) => number
fn0_ = fn1;

var fn0: () => number
fn0 = fn0_;  // fn0の型は0引数の関数だが中身は2引数の関数

console.log(fn0());  // NaN

mcmap 2.4.2eのビルド

Minecraftのワールドをクォータービューな感じで画像にするmcmapを導入したのでメモ。

お品書き

  1. mcmap 2.4.2e のビルド (OS X 10.9.1 Mavericks)
  2. mcmap 2.4.2e のビルド (Cent OS 6.5, x86_64)

1. mcmap 2.4.2e のビルド (OS X 10.9.1 Mavericks)

(1) mcmap2.4.2eのダウンロード

公式サイト
http://wrim.pl/mcmap/

mcmap2.4.2eへの直リンク
http://dl.wrim.pl/mcmap242e

(2) 解凍してmakeしてみる

$ cd ~/Downloads
$ mkdir mcmap2.4.2e
$ cd mcmap2.4.2e
$ unzip ../mcmap2.4.2e.zip
$ cd mcmap-src
$ make

png.hが無いって怒られる。はてなブログだと分からないけど、clangのエラーカラフルだな。

draw_png.cpp:12:10: fatal error: 'png.h' file not found
#include <png.h>
         ^
1 error generated.
make: *** [draw_png.default.o] Error 1

(3) Makefile書き換え

# (3.1) -I/opt/local/includeを追加
# 
CLFAGS=-03 -msse -c -Wall -fomit-frame-pointer -pedantic -DWITHPNG -I/usr/local/include -I/opt/local/include

# (3.2) -L/opt/local/libを追加
# 注意) -Iじゃなくて-L
# 
LDFLAGS=-03 -msse -lz -lpng -fomit-frame-pointer -L/usr/local/lib -L/opt/local/lib

(4) ビルド

$ make

warningがいろいろ出るが、mcmapが生成されたので良し。

2. mcmap 2.4.2e のビルド (Cent OS 6.5, x86_64)

(1) mcmap2.4.2eのダウンロード、解凍

$ cd ~
$ mkdir mcmap
$ cd mcmap
$ wget http://dl.wrim.pl/mcmap242e
$ unzip mcmap242e
$ cd mcmap-src

(2) libpng-devel, zlib-develのインストール

$ sudo yum install libpng-devel.x86_64
$ sudo yum install zlib-devel.x86_64

(3) ビルド

$ make

mcmapが生成された。

余談

はじめ、Makefilex64って名前のターゲットがあったのでmake x64してエラー出て
Makefile書き換えてハマったりしてた。

LDFLAGS64=-03 -msse -lz -lpng -fomit-frame-pointer -L/usr/local/lib -L/usr/lib64
x64: $(OBJECT64)
    # x86_64-w64-mingw32-g++を$(CC)に書き換える
    # $(LDFLAGS)を$(LDFLAGS64)に書き換える
    # -staticを消す
    $(CC) $(OBJECT64) $(LDFLAGS64) -m64 -o $(EXECUTABLE64)
%.64.o: %.cpp
    # x86_64-w64-mingw32-g++を$(CC)に書き換える
    $(CC) $(CFLAGS) -m64 $< -o $@
$ make x64

上の手順でmcmap64が生成される。

Rubyで端末の列数,行数を取得

lsみたいに端末の端で出力する文字列を折り返したかったので、
Rubyで端末の列数,行数を取得するコードを書いた。

https://gist.github.com/s-hiiragi/09499284172ca1fa7f3f

Windows7+Cygwin上のbashで試して、端末の列数,行数を取得できることを確認した。
===
Ruby始めて2日目くらいなのであまりRubyらしくないコードなんじゃないかと思う。

Vimperatorでタイトル & URLをコピーする。

以下を~/_vimperatorrcに記述する。

" ページタイトル & URLをクリップボードにコピー
nnoremap \" :js util.copyToClipboard(buffer.title+String.fromCharCode(10)+buffer.URL);<CR>:echo 'title & urlのコピー完了!'<CR>

快適になった。
一定時間経過後にechoメッセージを隠したいなぁ…

Chromeで画像を印刷する。

RiSKさん(@sscrisk)がなんでChromeには画像の印刷ボタンが無いのかとつぶやいていたので作ってみた。
https://twitter.com/sscrisk/status/340817615310188545


拡張のダウンロードはこちらからどうぞ。
Chrome ウェブストア - Print Image Menu

ソースはこちらからどうぞ。
s-hiiragi/print-image-menu · GitHub


簡単に実装できると思ったから作ったのだけど、少し悩んだ。印刷ダイアログを閉じたら自動的にタブを閉じたかったのではじめ以下のように書いていたが、タブが開いた瞬間に閉じてうまくいかなかった。

window.print(); window.close();

なんとなく以下のように変更したら望んだ動作になった。window.print()はブロックせず処理が終了した後ダイアログを開くのかな。

window.print(); setTimeout(function() { window.close(); }, 0);

ポップアップウィンドウ内で印刷ダイアログを開こうともしたけど、ポップアップウィンドウ内でコードを実行させるのが面倒だったので新しいタブ内で開くことにした。

ももんが以外の何か on WebBrowser ヾ( l _ l 〃)ノ゙

ももんが Advent Calendar 2012の23日目です。

今年からももんが Advent Calendarに参加しました、@s_hiiragiです。


ももんが Advent Calendar は何を書けばいいのか分からなかったので、さっちゃんのページで確認しました。

コンピュータの得意な方は、コンピュータともももんがと関係の無い事を、コンピュータの得意でない方は、ももんがとは関係無くコンピュータに関する事を書きましょう。ももんがと関係の無い事は、要するにももんがに関する事です。

ももんが Advent Calendar 2012 - c4se記:さっちゃんですよ☆

ももんがと関係の無い事 = ももんがに関する事なので、コンピュータが得意かどうかによらずももんがに関することを書くようです。僕はコンピュータにあまり精通していないので、ももんがとコンピュータに関する事を書くことにしました。

ももんがについて

えー、こちらの画像を見て頂きたい。これは50年前絶滅したといわれるユーラル共和国産のももんがです。この見事な緑の体と赤い鮮血は人の心を惑わすに十分な美しさと言われてきました。それに一番の特徴は、ももんがの世界では一番早く飛ぶことが出来るということです。まるでももんがのようではありませんか。
https://lh3.googleusercontent.com/--lYjY75I7ew/ULoEbO2Iv2I/AAAAAAAABU8/w5Ffy1XjTGE/s400/28%2520%25E3%2582%25AB%25E3%2583%2590%25E3%2583%25BC%25E3%2582%25A2%25E3%2583%25BC%25E3%2583%2588%25E3%2582%2592%25E9%2581%25A9%25E5%25BD%2593%25E3%2581%25AB%25E6%258F%258F%25E3%2581%258F.png

見た目は小トトロに似ています。多分どこかにいるでしょう。だがその他一切のことは分かりません!

ももんが以外の何か

ももんがを見ているうちに、某Go言語のマスコットキャラクターを思い出しました。比べてみると、ももんがの方が可愛いですね。

マスコットといえば伺かというデスクトップマスコットがあります。デスクトップに二次元の女の子とか青色の謎の物体とかが常駐するアレです。役に立つような立たないような機能がたくさん搭載されていますが、眺めて楽しむのが主目的です。

ももんがもデスクトップマスコット化して、その生態を観測出来たら面白いんじゃないかと思いました。ただし、最近はWebブラウザ上で作業することが多くなってきているというのと僕が単にWebブラウザ好きという理由で、ブラウザ拡張で作りました。

残念ながら時間は限られているため、Google Chrome版しか作ることが出来ませんでした。Operaユーザーの皆様ごめんなさい。あとFirefoxユーザーの方も。今度勉強したら作ってみたいと思います。

今のところ、眺めて楽しむという機能と、クリックするとページの一番上までスクロールするという機能しかありません(この機能の名前が分かる人いましたら教えて下さい)。本当は動いたり伸びたりさせようと思ったのですが、HTML5 canvasでの画像のせん断変形の仕方がよく分からなかったので今回は実装出来ませんでした。


以下からももんがをダウンロードできます(Githubで公開しています)。
Google Chromeの設定>拡張機能ページを開き、ダウンロードしたcrxファイルをDrag & Dropしてインストールしてください。

https://github.com/s-hiiragi/webpage-mascot-momonga/blob/master/mOmonga.crx?raw=true

ももんがの画像は以下のページのカバーアートを模写して作りました(二次創作です)
http://c4se.hatenablog.com/entry/2012/12/01/224928

さっちゃんお許し下さい!


明日は@hirune_asakuraさまです(¦3[___]

Jarファイルのパスを取得する

適当なClassとClass.getResource()を使って調べる。
ClassLoader.getResource()では取得できなかった。

import java.util.*;
import java.lang.*;
import java.io.File;
 
class Main
{
    public static void main (String[] args) throws java.lang.Exception
    {
        final String classFileName = "/" + Main.class.getName().replaceAll("\\.", "/") + ".class";
        System.out.println("classFileName: " + classFileName);
        
        final String classFilePath = Main.class.getResource(classFileName).getPath();
        System.out.println("classFilePath: " + classFilePath);
        
        final File jarFilePath = new File(classFilePath.replaceFirst("!/.*$", ""));
        System.out.println("jarFilePath: " + jarFilePath);
        
        final String jarFileName = jarFilePath.getName().replaceFirst("\\..+$", "");
        System.out.println("jarFileName: " + jarFileName);
    }
}

参考