10 月 09 2008

URLをわりと短くするサービス「shur.in」を作った。

Published by haga under ruby on rails

URLをわりと短くするサービスhttp://shur.in/をリリースしました。

shurin.jpg

最近はてな界隈で話題のIT業界のえがちゃん サービスの内容はどうあれ、週に1つ2つはサービスをリリースする勢いは見習いたいものだと感心していた。

で、えがちゃんが作ってる数多くのサービスの中で サイトURL短縮君つー、tinyurlライクなサービスがあって URL圧縮サービスの仕組みとか全く考えたことが無かった僕は、えがちゃんやるなーと思っていたのだけど ただ単にqurl.comのAPIを叩いているだけだった。 全然サービスでもなんでもねーー。

というわけで自分で考えつつ作ってみた。実装は3〜4時間くらいで、ドメイン取るのに時間がかかった・・・。

仕組みは簡単で

2,176,782,336(36の6乗)からランダムに数字を選んで、それをPKとしてDBにURLを保存。 PKの数字を36進数に変換して一緒に保存しておくだけ。

rubyは36進数の相互変換が超ラクチンなので簡単だった。

code = rand(36**6).to_s(36)
code.to_i(36)


No responses yet

9 月 28 2008

パスワードをシンプルに管理できるHummingPassというサービスをリリースしました。

Published by haga under HummingPass

screenshot_large_1.jpg

パスワードをシンプルに管理できるHummingPassというサービスをリリースしました。ベータ版です。

HummingPassβ

mixiやTwitterやGoogleなど、どんどん増えていくアカウント情報をオンライン上で一括管理するためのサービスで、タグによる分類が可能です。

もともと自分のために作っていたのですが、2週間前のRails on Award 2008の存在をしり、ほぼ全部作り直しました。

デザイン、コーディング、JavaScript、システム、サーバ、全部ひとりでやりました。

どうぞ、よろしくお願いします。

7 responses so far

9 月 26 2008

[Rails] 個人Webサービス

Published by haga under ruby on rails

こんにちはfunc09です。

Rails on Award2008に出品すべく、Webサービスを誠意作成中です。

僕はHTMLオペレーターから始まり、デザイナに転向し、Flashデベロッパに転向し、今プログラマ兼サーバ管理者という節操のないWeb人生を渡って来ていますので、デザインからサーバ構築まで全部ひとりでやってます、というのが最大の売りです。

今週末中にはリリースできると思うので、よろしくおながしまつ。

No responses yet

9 月 17 2008

[ruby] インスタンス変数を連番で作る

Published by haga under ruby

タイトルの通り。

Hogeクラスにhoge1〜hoge10までのインスタンス変数を作って、パブリックメソッドにする場合、以下のような感じで書ける。

class Hoge
  attr_accessor *Array.new(10){|i| "hoge#{i}".to_sym }
  def initialize
    10.times do |i|
      self.instance_variable_set("@hoge#{i}".to_sym,i)
    end
  end
end

hoge = Hoge.new
p hoge
p hoge.hoge1


もっときれいに書けるかな

No responses yet

8 月 30 2008

Flashが埋め込まれているURLを調べる

ブログパーツのようなFlashで、いろいろなサイトに埋め込まれるSWFの 埋め込まれているページのURLを取得する方法。

import flash.external.*;
var locationHref:String = String(ExternalInterface.call("function(){return location.href}"));


ExternalInterface.callの1番目の引数は、呼び出すJavaScriptのメソッド名という事になっていますが

ExternalInterface.call("myMethod","args1","args2");


は単純に以下のようなJSが実行されているものと考えられるので

eval("myMethod").apply(window,["args1","args2"]);


まぁ、ようするに無名関数をFlash側で引数としてあげればいいと。

No responses yet

8 月 27 2008

軽量なPHPフレームワークCodeIgniter

Published by haga under php

CodeIgniterというフレームワークがなかなか良い。

PHPのフレームワークではCakePHPをよく利用するのだけれど、使えば使うほど何がゴールなのかわからないフレームワークだなと感じる。非常にRuby on Railsに似ているのだけど、RailsはRubyだから成り立っているような側面が多いから、結局PHPで実装しようとすると非常に中途半端になる。CakePHPは高機能だけど、おせっかいだし、そのおせっかいさも中途半端だなと思う。Railsも随分おせっかいだけど、かゆいところに手が届きすぎるくらい徹底的におせっかいだ。

CodeIgniterは見るからにシンプルで軽量。PHPでスクラッチやセミスクラッチするのは面倒だけど、おおげさなフレームワークは必要ないような時はぴったりだと思う。

最低限のMVCは用意されていて、あとはPHPとヘルパーライブラリでがんばれ、フレームワーク特有の俺節はあんまりないよ。そんなフレームワークな感じがする。

No responses yet

8 月 26 2008

passengerで開発環境(development)

Published by haga under ruby, ruby on rails

一ヶ月に1エントリーは書かないと・・・。

PassengerでRailsのdevelopment環境を動かす方法。 恐らくPassenger2以降のみです。

<VirtualHost *:80>
    ServerName www.hoge.com
    DocumentRoot /home/hoge/hogeproject/public
    RailsEnv development
    RailsAllowModRewrite off
</VirtualHost>


参考 http://w.koshigoe.jp/study/?%5BRuby%5D+Passenger#l20

No responses yet

7 月 02 2008

JavaのString#hashCode()をRubyで再現

Published by haga under ruby

Javaで作ってあるアプリをiPhoneに移植しようと思ったが、まずObjective-Cがわからないので、Rubyに移植してみようと考えた。

移植元のアプリの中でさらっとString#hashCode()を使っていて困った。

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#hashCode()

この文字列のハッシュコードを返します。String のハッシュコードは、次の方法で計算します。
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

上記の通りの計算をしてもRubyでは同じ数値にならない。 どうもJavaのintとRubyのIntegerは挙動が違うからのようだ。

java のInteger int 最大値超えるとどうなるの<br/> http://becomehappy.orz.hm/smithlog/article.php?id=370

Javaのintは-0x80000000~0x7fffffffの間をぐるぐるループしているらしい。<br/> 最大値(2147483647)を超えたら最小値(-2147483648)に戻してやる気遣いが必要だ。

というわけで作ってみたのが下記。

hashcode_gen.rb

#!/usr/bin/env ruby

module EmurateJavaStringHashCode
  def to_hashcode
    max = 2 ** 31 - 1 # Javaのint最大値
    min = -2 ** 31 # Javaのint最小値
    h = 0
    n = self.size
    n.times do |i|
      h = 31 * h + self[i]
      while h <min || max <h
        h = max - ( min - h  ) + 1 if h <min
        h = min - ( max - h  ) - 1 if max <h
      end
    end
    h
  end
end

class String
  include EmurateJavaStringHashCode
end

key = ARGV.first
puts key.to_hashcode


確認用のjava HashCodeGenerator.java

public class HashCodeGenerater {
    public static void main(String argv[]) {
        System.out.println( argv[0].hashCode() );
    }
}


テストスクリプト test/test_hashcode_gen.rb

require 'test/unit'

$:.unshift "#{File.dirname(__FILE__)}/../"
$:.unshift File.dirname(__FILE__)

class HashCodeGenTest <Test::Unit::TestCase

  def test_random
    10.times do
      str = [Array.new(rand(20)){rand(256).chr}.join].pack("m").chomp
      j = `java HashCodeGenerater '#{str}'`
      r = `ruby hashcode_gen.rb '#{str}'`
      assert_equal(j,r)
    end
  end
 
end


テスト結果

Loaded suite test/hashcodegen_test
Started
.
Finished in 1.478273 seconds.

1 tests, 10 assertions, 0 failures, 0 errors


ちゃんと通りました。

--

ついでにCでも書いてみた。

#include <stdio.h>
#include <string.h>

int strhashcode( char *word );

int main( int argc, char** argv)
{
  printf("hashcode = %d\n", strhashcode(argv[1]) );
  return 0;
}

int strhashcode( char *word){
  int len,i,h = 0;
  len = strlen(word);
  for (i=0; i<len; i++){
    h = 31 * h + word[i];
  }
  return h;
}


No responses yet

6 月 30 2008

[works] eyeVioがHDビデオに対応

Published by haga under actionscript2.0, flash, works

eyeVioがHD動画に対応してます。

http://eyevio.jp/

今回もいつも通り、動画のプレイヤーと、JavaScriptあたりをやりました。

FlashPlayerは7で作っているのでExternalInterfaceクラスが使えないわけですが、 それでも一生懸命JavaScriptと連携しています。

SWFからダイナミックにHTMLのレイアウトを弄ったりして、なかなか楽しいです。

今回途中で非同期処理の管理に嫌気がさしたのでAS2用のスレッドライブラリを作りました。

AS3ではSparkの「そうめん」のような素晴らしいライブラリがあるんですが、AS2向けでシンプルなのは見つからなかったので 自作で

new Sequence(
  new Wait(1),
  new XMLLoad('hoge.xml'),
  new Wait(1),
  new FunctionJob(this,this.normalfunc)
).start();


こんな感じで書けるように。

もともとのソースコードのコールバック関数をそのまま弄らずシーケンス処理に組み込めるように 関数をひとつのスレッドとして利用できるようにしたのが正解でした。

非同期の整理のつもりでスレッドライブラリを作りましたが、メソッドが集中しやすいコントローラー系クラスの処理分散にも効果を発揮してウハウハ。

時代遅れのAS2なので、気合いをいれて拡張していくつもりはサラサラないけど、 気が向いたら公開したいですね。

No responses yet

6 月 25 2008

KDDIのSMTPリレーサーバ

Published by haga under linux, 日記

家のサーバから外にメールが送信できなくて、ハマっていたのだけど プロバイダのOP25Bという対策の所為だということに、やっと気付いた。

うちはKDDI 下記のページを探すのに2〜3時間かかった。

http://www.auone-net.jp/support/trouble/mail_other.html

relay-mta.auone-net.jp

KDDIはサポートサイトをFlexで作ったり、Macで表示されなかったり かなり酷いと思います。。

No responses yet

« Prev - Next »