夜露死苦変換

投稿者 nanki 2006-06-05 02:33:00 GMT

IMEが「ぐれっぷ」を「具烈婦」に変換したのをきっかけに。

ひらがなのみ対応。「ー」はだめ。

面白いのを見つけた人はコメント欄に残していってくださるとうれしいです。

るびいすと → 流美異酒人


Rails Plugin

投稿者 nanki 2006-04-25 23:35:00 GMT

全部終わったら公開しようと思っていたけど、全く終わる気配がないので公開します。

今回は量が多いので分割しました。

全部見たい人は、 タグ:rails_pluginでどうぞ。


Rails Plugin - ActiveRecord拡張系

投稿者 nanki 2006-04-25 23:30:00 GMT
composite_primary_keys
  • 主キーとして複合キーを扱える。
  • $ gem install composite_primary_keys
  • require 'compositeprimarykeys'

class Road < ActiveRecord::Base belongsto :attribute, :foreignkey => [:attributecode, :meshcode] end

class Attribute < ActiveRecord::Base setprimarykeys :attributecode, :meshcode end

Road.find(:first).attribute #=> SELECT...WHERE roads.attributecode = attributes.attributecode and roads.meshcode = attributes.meshcode ...

pessimistic locking
  • Account.transaction do
    account = Account.find(:first, :lock => true)
    end

Account.transaction do account = Account.find(:first) account.lock # ... end

で悲観的ロックができる。 * Edgeには取り込まれたっぽい。

has_many_polymorphs
  • Rails標準の :polymorphic では、逆向きの参照が出来ない、などの制限がある。
  • 記述も少なくなる。
  • 詳しい経緯
  • 下のように変わる。あってる?
  • # Rails
    class Dog < ActiveRecord::Base
    hasmany :eaterpetfoods, :as => :eater
    hasmany :petfoods, :through => :eaterpetfoods
    end

class Cat < ActiveRecord::Base hasmany :eaterpetfoods, :as => :eater hasmany :petfoods, :through => :eaterpetfoods end

class EatersPetfood < ActiveRecord::Base belongsto :petfood belongsto :eater, :polymorphic => true end

class Petfood < ActiveRecord::Base hasmany :eaterpetfoods hasmany :eaters, :through => :eaterpetfoods # これができない end

*
# hasmanypolymorphs
class Dog < ActiveRecord::Base;end
class Cat < ActiveRecord::Base;end

class EatersPetfood < ActiveRecord::Base belongsto :petfood belongsto :eater, :polymorphic => true end

class Petfood < ActiveRecord::Base hasmanypolymorphs :eaters, :from => [:dogs, :cats] end

* eaterが増える度にPetfoodを書き換えないといけないのがかっこよくない。

store_multiplied
force uppercase
ActiveCrypto
UpdateHabtmAttributes
allow_habtm_primary_key
userstamp

class ApplicationController < ActionController::Base before_filter do |c|

<span class="constant">User</span>.current_user = <span class="constant">User</span>.find(c.session[<span class="symbol">:user</span>].id) <span class="keyword">unless</span> c.session[<span class="symbol">:user</span>].nil?

end end

class Post < ActiveRecord::Base belongsto :createdby, :classname => "User", :foreignkey => "createdby" belongsto :updatedby, :classname => "User", :foreignkey => "updatedby" end

active form
riff
enforce_column_limits
validates_numericality_of
ActiveSearch
Spatial Adapter
settings
autoescape
deadlock_retry
calculations
guid
where
count_limit_associations
file_column
filters_column
filtered_column

Rails Plugin - 認証系

投稿者 nanki 2006-04-25 23:29:00 GMT
session_timeout
access_control
validates_captcha
account_location
acts_as_authenticated
login_engine
user_engine
ssl_requirement
security_extensions
sentry

Rails Plugin - View系

投稿者 nanki 2006-04-25 23:28:00 GMT
hotkey
SimpleSidebar
google maps
InPlaceControls

<%= inplaceradio_buttons :post, :published, :choices => [[true, "Yes"],[false, "No"]] %> <!-- :choicesは、値の配列 or 値とラベルの配列 -->

<%= inplaceselect :address, :country, :choices => countryoptionsforselect %> <!-- :choicesは、値の配列 or 値とラベルの配列 or optionsfor_selectの結果 -->

* svn://rubyforge.org/var/svn/inplacecontrols

widgets
acts_as_wizard

add_step do

named <span class="string"><span class="delimiter">'</span><span class="content">Insert your dog</span><span class="delimiter">'</span></span>
controlled_by <span class="symbol">:dogs</span>
enable_actions <span class="symbol">:new</span>, <span class="symbol">:create</span>
<span class="comment"># main/finishedに飛んでもらわないと困る</span>
add_rewrite({<span class="symbol">:action</span>=&gt;<span class="string"><span class="delimiter">'</span><span class="content">list</span><span class="delimiter">'</span></span>}, {<span class="symbol">:controller</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">main</span><span class="delimiter">'</span></span>, <span class="symbol">:action</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">finished</span><span class="delimiter">'</span></span>})

end

add_step do

named <span class="string"><span class="delimiter">'</span><span class="content">Finished!</span><span class="delimiter">'</span></span>
controlled_by <span class="symbol">:main</span>
enable_actions <span class="symbol">:finished</span>

end end

な感じで。 * application.rbに require 'create_cat_and_dog_wizard'をお忘れなく。 * URLはそのままだと、/cats/new?wizard=create_cat_and_dogになってかっこわるいので、
# routes.rb
map.connect 'createcatand_dog/:controller/:action/:id',

        <span class="symbol">:wizard</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">create_cat_and_dog</span><span class="delimiter">'</span></span></span></notextile></pre></div>でかっこよく。
  • wizardのURLは、
    urlfor :controller => 'cats', :action => 'new', :wizard => 'createcatanddog'
tabnav
  • タブナビゲーションを簡単に。
  • $ script/generate tabnav Main
  • <!-- layout.rhtml -->
    <%= starttabnav :main %>
    <%= @contentforlayout %>
    <%= endtabnav %>
  • class MainTabnav < Tabnav::Base     
    addtab do named 'User' # タブの名前 titled 'User!' # title属性(ブラウザによってはtooltipが出る) linksto :controller => 'user' # リンク先(url_forと同じオプション) end

add_tab do

named <span class="string"><span class="delimiter">'</span><span class="content">Admin</span><span class="delimiter">'</span></span>
links_to <span class="symbol">:controller</span> =&gt; <span class="string"><span class="delimiter">'</span><span class="content">admin</span><span class="delimiter">'</span></span>
show_if <span class="string"><span class="delimiter">&quot;</span><span class="content">params[:admin] == true</span><span class="delimiter">&quot;</span></span> <span class="comment"># 表示条件</span>

end
end

のように。 * links_toで指定されたページを表示している時は、自動的にハイライトされるが、それ以外のページでもハイライトさせたかったらhighligths_onを使う。

UJS Rails
rails-tidy
12_hour_time
live_tree
browser_filters
labeled_form_helper
label_helpers
restifarian
scriptaculous_slider
localization
css_graphs
asset_timestamping
add_query_mtime
javascript_generator_templates
us_states
wiki_engine
date_slider
head-helper
enhanced-form-tag-helper
liquid
rails_pdf
upload_progress
datebox_engine
HTML Output
syntax_highlight
theme_support
selector
safe_render
RUtils
cartographer
markaby

Rails Plugin - 開発系

投稿者 nanki 2006-04-25 23:27:00 GMT
row_version_migrations
Safe ERB
ARTS
annotate_models
assert_valid_markup
assert-valid-asset
debug_view_helper
continuous_builder
exception_notification
ar_fixtures
engines
refactor
assert_accessible
javascript-packaging
migrate_ext
Foreign Key Schema Dumper

Rails Plugin - その他

投稿者 nanki 2006-04-25 23:26:00 GMT
history

# actiontoskip アクションは対象外 historyskip :actionto_skip end

# 一個前の履歴を見る peeklastlocation(1)

# redirectで一つ前に戻る redirect_back(1)

# 現在のアクションを履歴に保存 storelocation # historyskipだろうがおかまいなし store_location(true)

inject
url_for_domain
legacy_interop
auto_hash
output_compression
Better Output Compression
google_analytics
json_webservice
numeric_spell
referenced_page_caching
foo_with_install
Flash Fixes

Web UI デザインパターン

投稿者 nanki 2006-04-22 16:20:00 GMT

AJAXだとかなんだとかでJavascriptを使ってもいい雰囲気になり、ライブラリも整備され、かなり高度なユーザインターフェースを作ることが可能になっている。

しかし、何の指針もなしに作っていたのでは、使用感に統一性の無いものがあふれかえってしまう。
そんなわけで、Railsで使えるものを中心に、使いどころ、使わないどころ、雑感を。

AutoComplete

Drag&Drop

SortableList

InPlaceEditor

ブラウザ内ウィンドウ

などなど。書き出してみると結構当たり前のことばかりか。
他にどんなのがありますかねぇ。

キー操作を扱える標準的なライブラリとかも欲しいかなぁ。

追記

2006.04.27 Ajax Pattern Screencasts


Lightbox JS : Webとモーダルダイアログ

投稿者 nanki 2006-02-23 09:25:00 GMT

Lightbox JSを使ってみた。

<a href="large.png" rel="lightbox" title="...">
<img src="thumbnail.png">
</a>

というコードを書き、画像をクリックすると、ページ遷移は起こらずに、画面が半透明の膜で覆われ、その上に大きい画像が表示される。(実物を見るのが早い)

すぐに、これはモーダルダイアログの代わりになるなと思い、prototype.jsと組み合わせて、画像以外も表示できるか試してみた。

モーダルダイアログには使いにくいという印象しかないのでどうなることかと思いきや、思いのほか使いやすい。

思うに、WebにおけるUIというのはほとんどモーダルなのだ。設定画面を使ってる間、前の画面を操作することはない。 ページを遷移して、何かしらの操作をして、また戻る、という袋小路のようなページがたくさんある場合、これをLightbox風モーダルダイアログに置き換えても、得るものこそあれ、何も失うものはない。

都合のいいことに、ほとんどのモダンなブラウザに対応している上、Javascriptが動かなくても、ただのリンクにしか見えないので、よほどのことをしない限りはテキストブラウザ上でも今までと同様に動作する。

検索 UI の改善:NULL::something では、検索ボックスの結果がオーバーレイ表示される。(Lightboxは使ってなかったと思う&IEは未対応)

もうちょっと改良してみようかと思ったら、こんなのあった→Lightbox Gone Wild!

参考:

Lightbox JS

モーダルダイアログとは

検索 UI の改善


コード自動生成

投稿者 nanki 2006-01-02 18:55:00 GMT

ごくまれに、クリックしてみたくなるGoogle広告があって、クリックしてみると、結構面白かったりする。

今回は、Excel で定義したデータファイルをD&Dするだけで、JavaのWebアプリケーションができあがってしまうというソフト。

デモムービーなんて、ステータスバーが進んでいくのを見るだけ。

暇をみて、Rails版を作ってみようか。

参考:

JasmineSoft Harvest