ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Jpmobile
Lay Rails on ¡°Galapagos¡±
Jpmobile: A Rails Plugin for Japanese Mobile Phones
? {Ruby             c200 8   Sf[^



   ? { ? ^ Cg       ?




   ? { ? ^ Cg   ¡§




   ? { ? ^ Cg       ?


                                   Photo taken by Kath B
http://?ickr.com/photos/kathb/2196643434/
   ? { ? ^ Cg   ¡§
The Market of Japanese Cellphones
                          ? {Ruby             c200 8   Sf[^




has evolved Exclusively,
                         ? { ? ^ Cg       ?




just like Galapagos.     ? { ? ^ Cg   ¡§




                         ? { ? ^ Cg       ?


                                                         Photo taken by Kath B
                      http://?ickr.com/photos/kathb/2196643434/
                         ? { ? ^ Cg   ¡§
Japanese mobile phones have a lot of
fascinating features ...




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
However, these features are provided
with Cell-phone-operator-speci?c
speci?cations,




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
which is sometimes undocumented.




                          ? {Ruby              c200 8   Sf[^



                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§




                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§
Example.
Requesting GPS location of device:




                         ? {Ruby              c200 8   Sf[^



                         ? { ? ^ Cg       ?




                         ? { ? ^ Cg   ¡§




                         ? { ? ^ Cg       ?




                         ? { ? ^ Cg   ¡§
for DoCoMo:
<a href=quot;[URL]quot; lcs>GPS</a>
for au:
<a href=quot;device:gpsone?url=
[URL]&amp;ver=1&amp;datum=0&amp;unit=0
quot;>GPS</a>            (of?cially undocumented)
for SoftBank 3G:
<a href=location:auto?[URL]>GPS</a>
for SoftBank 2G:
<a href=quot;[URL]quot; z>GPS</a>       ? {Ruby              c200 8   Sf[^




for Willcom:
                                ? { ? ^ Cg       ?




<a href=quot;http://location.request/
                                ? { ? ^ Cg   ¡§




dummy.cgi?my=[URL]&pos=$locationquot;>GPS</a>
                                ? { ? ^ Cg       ?




                                ? { ? ^ Cg   ¡§
Of course, the responses are also in
various formats!




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
I guess you shouldn¡¯t want to know
them!




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
In short,




            ? {Ruby              c200 8   Sf[^



            ? { ? ^ Cg       ?




            ? { ? ^ Cg   ¡§




            ? { ? ^ Cg       ?




            ? { ? ^ Cg   ¡§
working on websites for Japanese
mobiles is




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
collecting boring ¡°know-hows.¡±




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
But we cannot give up the fascinating
features of Japanese mobile phones ...




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
Motivation:
want to build websites for Japanese
mobile phones in Rails way.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
My answer:




             ? {Ruby              c200 8   Sf[^



             ? { ? ^ Cg       ?




             ? { ? ^ Cg   ¡§




             ? { ? ^ Cg       ?




             ? { ? ^ Cg   ¡§
for DoCoMo:
<a href=quot;[URL]quot; lcs>GPS</a>
for au:
<a href=quot;device:gpsone?url=




     before
[URL]&amp;ver=1&amp;datum=0&amp;unit=0
quot;>GPS</a>            (of?cially undocumented)
for SoftBank 3G:
<a href=location:auto?[URL]>GPS</a>
for SoftBank 2G:
<a href=quot;[URL]quot; z>GPS</a>       ? {Ruby              c200 8   Sf[^




for Willcom:
                                ? { ? ^ Cg       ?




<a href=quot;http://location.request/
                                ? { ? ^ Cg   ¡§




dummy.cgi?my=[URL]&pos=$locationquot;>GPS</a>
                                ? { ? ^ Cg       ?




                                ? { ? ^ Cg   ¡§
after
 for all Japanese mobiles:
<%= get_position_link_to quot;GPSquot;,
                         :action=> ... %>
                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
Jpmobile is introduced in ...




                                ? {Ruby              c200 8   Sf[^



                                ? { ? ^ Cg       ?




                                ? { ? ^ Cg   ¡§




                                ? { ? ^ Cg       ?




                                ? { ? ^ Cg   ¡§
Who am I?




            ? {Ruby              c200 8   Sf[^



            ? { ? ^ Cg       ?




            ? { ? ^ Cg   ¡§




            ? { ? ^ Cg       ?




            ? { ? ^ Cg   ¡§
SHIDARA Yohji dara
? Jpmobile         the author of Jpmobile
? http://d.hatena.ne.jp/darashi
    http://twitter.com/darashi
    in Japanese)
?
  born in Sapporo, live in Sapporo,
  love Sapporo
  -- 1.5hrs. from Tokyo by air ? {Ruby              c200 8   Sf[^




?            a graduate student? { ? ^ Cg       ?




? Ruby Sapporo Staff
                               ? { ? ^ Cg   ¡§




? RubyKaigi2008 Staff          ? { ? ^ Cg       ?




                               ? { ? ^ Cg   ¡§
My recent work:




                  ? {Ruby              c200 8   Sf[^



                  ? { ? ^ Cg       ?




                  ? { ? ^ Cg   ¡§




                  ? { ? ^ Cg       ?




                  ? { ? ^ Cg   ¡§
http://buzztter.com
extracts buzzphrases from twitter.com




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
By the way,




              ? {Ruby              c200 8   Sf[^



              ? { ? ^ Cg       ?




              ? { ? ^ Cg   ¡§




              ? { ? ^ Cg       ?




              ? { ? ^ Cg   ¡§
I love soupcurry!
(a typical Sapporo food)




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
? {Ruby              c200 8   Sf[^



? { ? ^ Cg       ?




? { ? ^ Cg   ¡§




? { ? ^ Cg       ?




? { ? ^ Cg   ¡§
? {Ruby              c200 8   Sf[^



? { ? ^ Cg       ?




? { ? ^ Cg   ¡§




? { ? ^ Cg       ?




? { ? ^ Cg   ¡§
so that I made a website:




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




http://soupcurry.info
                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




http://soupcurry.info
                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
You can ?nd the nearby soupcurry
restaurants with your mobile (using
GPS). -- if you are in Japan ;-)




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
You can ?nd the nearby soupcurry
restaurants with your mobile (using
GPS). -- if you are in Japan ;-)




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
The reusable component dragged out
from soupcurry.info is the origin of
Jpmobile.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
Features of Jpmobile




                       ? {Ruby              c200 8   Sf[^



                       ? { ? ^ Cg       ?




                       ? { ? ^ Cg   ¡§




                       ? { ? ^ Cg       ?




                       ? { ? ^ Cg   ¡§
Detecting mobile phones and its
operator




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
is the most fundamental procedure to
handle mobile phones




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
It¡¯s not so easy ...


Various User-Agents:
? DoCoMo/2.0 SH902i(c100;TB;W24H12)
? KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0
? SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/
    NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
?   Vodafone/1.0/V903SH/SHJ001/SN000000000000000
    Browser/UP.Browser/7.0.2.1 Profile/MIDP-2.0
    Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2 Ext-
    V-Profile/VSCL-2.0.0                 ? {Ruby              c200 8   Sf[^



?   J-PHONE/4.3/V603SH/SNXXXX0000000 SH/0007aa Profile/
                                         ? { ? ^ Cg       ?




    MIDP-1.0 Configuration/CLDC-1.0 Ext-Profile/
    JSCL-1.3.2                           ? { ? ^ Cg   ¡§




?   Mozilla/3.0(WILLCOM;KYOCERA/WX310K/
    2;1.2.2.16.000000/0.1/C100) Opera 7.0
                                         ? { ? ^ Cg       ?




                                         ? { ? ^ Cg   ¡§
with Jpmobile,




     <% if request.mobile? %>
       from mobile!
     <% else %>
       from PC!
     <% end %>          ? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
case request.mobile
when Jpmobile::Mobile::Docomo
  # for DoCoMo
when Jpmobile::Mobile::Au
  # for au
when Jpmobile::Mobile::Softbank
  # for SoftBank
when Jpmobile::Mobile::Willcom
  # for Willcom
when Jpmobile::Mobile::Emobile
  # for EMOBILE         ? {Ruby              c200 8   Sf[^




else
                        ? { ? ^ Cg       ?




  # for PC              ? { ? ^ Cg   ¡§




end                     ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
Switching templates for mobiles




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
If you want to switch templates for PCs
and for mobiles, or for each operator,




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
just put mytemplate.html.erb and
mytemplate_mobile.html.erb, or




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
put mytemplate_mobile_docomo.html.erb
and mytemplate_mobile_au.html.erb.
(DoCoMo and au are cell-phone-operators)




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
Supporse that we have these templates.




  mytemplate_mobile_docomo.html.erb


  mytemplate_mobile.html.erb
                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




  mytemplate.html.erb      ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
Access from PC:




  mytemplate_mobile_docomo.html.erb


  mytemplate_mobile.html.erb
                          ? {Ruby              c200 8   Sf[^



                          ? { ? ^ Cg       ?




  mytemplate.html.erb     ? { ? ^ Cg   ¡§




                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§
Access from DoCoMo:




  mytemplate_mobile_docomo.html.erb


  mytemplate_mobile.html.erb
                          ? {Ruby              c200 8   Sf[^



                          ? { ? ^ Cg       ?




  mytemplate.html.erb     ? { ? ^ Cg   ¡§




                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§
Access from mobiles except DoCoMo:




  mytemplate_mobile_docomo.html.erb


  mytemplate_mobile.html.erb
                           ? {Ruby             c200 8   Sf[^



                          ? { ? ^ Cg       ?




  mytemplate.html.erb     ? { ? ^ Cg   ¡§




                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§
Getting position of mobile-phones




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
in a view:

<%= get_position_link_to quot;GPSquot;,
                       :action=> :gps %>

in a controller, ¡®gps¡¯ action:


  request.mobile.position.lat
                                 ? {Ruby              c200 8   Sf[^



                                 ? { ? ^ Cg       ?




                                 ? { ? ^ Cg   ¡§




  request.mobile.position.lng
                                 ? { ? ^ Cg       ?




                                 ? { ? ^ Cg   ¡§
Getting production-numbers and/or
subscriber-identi?ers.




                          ? {Ruby              c200 8   Sf[^



                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§




                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§
It should be frustrating to input the
password with your mobile every time
you are going to login.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
Usually the identi?er of the device or
the subscriber can be obtained.




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
Of course they are based on the various
speci?cations!




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
with Jpmobile,




request.mobile.ident_device
request.mobile.ident_subscriber

request.mobile.ident
 = ident_subscriber || ident_device
                        ? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
Note that they are not creditable
because these identi?ers are just
passed as plain text.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
The security will be slightly improved
with combining IP-address veri?cation.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
Validation of IP-address range




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
We may want to block PCs for some
(marketing?) reasons,




                          ? {Ruby              c200 8   Sf[^



                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§




                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§
or we may want to check if the
identi?ers (for a device or a subscribe)
is surely passed from mobile.




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
The operators provides the information
of the IP-address ranges on the website




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
of course in various formats, and even
worse, usually they are not machine
readable (dirty scraping is needed).




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
Since Jpmobile contains the tables
obtained from these machine-unfriendly
websites,




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
Just do




     request.mobile.valid_ip?


                        ? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
Adding session IDs to URL and FORM




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
Some devices does not support cookies.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
For them, you need to pass the session
ID via URL and FORM parameters.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
class MyController <
           ApplicationController
  trans_sid
end
                        ? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
Getting specs of the screen




                              ? {Ruby              c200 8   Sf[^



                              ? { ? ^ Cg       ?




                              ? { ? ^ Cg   ¡§




                              ? { ? ^ Cg       ?




                              ? { ? ^ Cg   ¡§
The screensize differs according to the
model.




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
In order to optimize the output, we
need the information about the screen.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
The information may be passed via
HTTP header, or not.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
We need to scrape the of?cial websites
in case that the information in the
header is not available.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
request.mobile.display.colors
request.mobile.display.width
request.mobile.display.height

                      ? {Ruby              c200 8   Sf[^



                      ? { ? ^ Cg       ?




                      ? { ? ^ Cg   ¡§




                      ? { ? ^ Cg       ?




                      ? { ? ^ Cg   ¡§
Conversion of the Emoticons




                              ? {Ruby              c200 8   Sf[^



                              ? { ? ^ Cg       ?




                              ? { ? ^ Cg   ¡§




                              ? { ? ^ Cg       ?




                              ? { ? ^ Cg   ¡§
Lots of lovely emoticons are available
in Japanese mobiles.




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
Each operator have own set of
emoticons and own encoding.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
The speci?cations are so complex that I
can make another presentation.




                             ? {Ruby             c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
The mappings (between operators) are
also complex and not publicly available
in machine-readable format.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
Jpmobile maps all emoticons (of all
operators) into Unicode Private Area,
and




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
the output is transparently converted
into the format appropriate for the
target device.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
in a controller:


class MyController <
            ApplicationController
  mobile_filter
end
                        ? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
I¡¯m going to add the feature to send
emoticons PCs with embedding images.




                          ? {Ruby              c200 8   Sf[^



                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§




                          ? { ? ^ Cg       ?




                          ? { ? ^ Cg   ¡§
Some mobiles do not support UTF-8 or
stop sending emoticons under UTF-8
communication.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
We need to communicate with them in
Shift-JIS (a legacy but one of the most
commonly used encoding).




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
in a controller:


class MyController <
            ApplicationController
  mobile_filter
end
                        ? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§




                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
Summary:




           ? {Ruby              c200 8   Sf[^



           ? { ? ^ Cg       ?




           ? { ? ^ Cg   ¡§




           ? { ? ^ Cg       ?




           ? { ? ^ Cg   ¡§
Japanese mobile phones have a lot of
fascinating features.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
But we need lots of boring know-hows
to build websites for Japanese mobile
phones.




                           ? {Ruby              c200 8   Sf[^



                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§




                           ? { ? ^ Cg       ?




                           ? { ? ^ Cg   ¡§
Jpmobile helps you!




                      ? {Ruby              c200 8   Sf[^



                      ? { ? ^ Cg       ?




                      ? { ? ^ Cg   ¡§




                      ? { ? ^ Cg       ?




                      ? { ? ^ Cg   ¡§
Finally, I want to ask your help:




                              ? {Ruby              c200 8   Sf[^



                              ? { ? ^ Cg       ?




                              ? { ? ^ Cg   ¡§




                              ? { ? ^ Cg       ?




                              ? { ? ^ Cg   ¡§
I¡¯m a student, so I don¡¯t have many
mobile-phones to test Jpmobile on.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
I often ask my colleagues for help,
paying a canned coffee.




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
So, if you ?nd out some problems or if
you make any improvement of
Jpmobile, please let me know.




                            ? {Ruby              c200 8   Sf[^



                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§




                            ? { ? ^ Cg       ?




                            ? { ? ^ Cg   ¡§
It may take long, but I¡¯d like to work
on it.




                             ? {Ruby              c200 8   Sf[^



                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§




                             ? { ? ^ Cg       ?




                             ? { ? ^ Cg   ¡§
? {Ruby              c200 8   Sf[^



                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§




http://jpmobile-rails.org
                        ? { ? ^ Cg       ?




                        ? { ? ^ Cg   ¡§
? {Ruby              c200 8   Sf[^



? { ? ^ Cg       ?




? { ? ^ Cg   ¡§




? { ? ^ Cg       ?




? { ? ^ Cg   ¡§

More Related Content

¥¬¥é¥Ñ¥´¥¹¤Ë¾€Â·¤ò·ó¤³¤¦: ЯŽ¡ëŠÔ’ÓÃRails¥×¥é¥°¥¤¥óJpmobile

  • 1. Jpmobile Lay Rails on ¡°Galapagos¡± Jpmobile: A Rails Plugin for Japanese Mobile Phones
  • 2. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? Photo taken by Kath B http://?ickr.com/photos/kathb/2196643434/ ? { ? ^ Cg ¡§
  • 3. The Market of Japanese Cellphones ? {Ruby c200 8 Sf[^ has evolved Exclusively, ? { ? ^ Cg ? just like Galapagos. ? { ? ^ Cg ¡§ ? { ? ^ Cg ? Photo taken by Kath B http://?ickr.com/photos/kathb/2196643434/ ? { ? ^ Cg ¡§
  • 4. Japanese mobile phones have a lot of fascinating features ... ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 5. However, these features are provided with Cell-phone-operator-speci?c speci?cations, ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 6. which is sometimes undocumented. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 7. Example. Requesting GPS location of device: ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 8. for DoCoMo: <a href=quot;[URL]quot; lcs>GPS</a> for au: <a href=quot;device:gpsone?url= [URL]&amp;ver=1&amp;datum=0&amp;unit=0 quot;>GPS</a> (of?cially undocumented) for SoftBank 3G: <a href=location:auto?[URL]>GPS</a> for SoftBank 2G: <a href=quot;[URL]quot; z>GPS</a> ? {Ruby c200 8 Sf[^ for Willcom: ? { ? ^ Cg ? <a href=quot;http://location.request/ ? { ? ^ Cg ¡§ dummy.cgi?my=[URL]&pos=$locationquot;>GPS</a> ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 9. Of course, the responses are also in various formats! ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 10. I guess you shouldn¡¯t want to know them! ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 11. In short, ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 12. working on websites for Japanese mobiles is ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 13. collecting boring ¡°know-hows.¡± ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 14. But we cannot give up the fascinating features of Japanese mobile phones ... ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 15. Motivation: want to build websites for Japanese mobile phones in Rails way. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 16. My answer: ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 17. for DoCoMo: <a href=quot;[URL]quot; lcs>GPS</a> for au: <a href=quot;device:gpsone?url= before [URL]&amp;ver=1&amp;datum=0&amp;unit=0 quot;>GPS</a> (of?cially undocumented) for SoftBank 3G: <a href=location:auto?[URL]>GPS</a> for SoftBank 2G: <a href=quot;[URL]quot; z>GPS</a> ? {Ruby c200 8 Sf[^ for Willcom: ? { ? ^ Cg ? <a href=quot;http://location.request/ ? { ? ^ Cg ¡§ dummy.cgi?my=[URL]&pos=$locationquot;>GPS</a> ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 18. after for all Japanese mobiles: <%= get_position_link_to quot;GPSquot;, :action=> ... %> ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 19. Jpmobile is introduced in ... ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 20. Who am I? ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 21. SHIDARA Yohji dara ? Jpmobile the author of Jpmobile ? http://d.hatena.ne.jp/darashi http://twitter.com/darashi in Japanese) ? born in Sapporo, live in Sapporo, love Sapporo -- 1.5hrs. from Tokyo by air ? {Ruby c200 8 Sf[^ ? a graduate student? { ? ^ Cg ? ? Ruby Sapporo Staff ? { ? ^ Cg ¡§ ? RubyKaigi2008 Staff ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 22. My recent work: ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 23. http://buzztter.com extracts buzzphrases from twitter.com ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 24. By the way, ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 25. I love soupcurry! (a typical Sapporo food) ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 26. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 27. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 28. so that I made a website: ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 29. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? http://soupcurry.info ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 30. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? http://soupcurry.info ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 31. You can ?nd the nearby soupcurry restaurants with your mobile (using GPS). -- if you are in Japan ;-) ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 32. You can ?nd the nearby soupcurry restaurants with your mobile (using GPS). -- if you are in Japan ;-) ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 33. The reusable component dragged out from soupcurry.info is the origin of Jpmobile. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 34. Features of Jpmobile ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 35. Detecting mobile phones and its operator ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 36. is the most fundamental procedure to handle mobile phones ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 37. It¡¯s not so easy ... Various User-Agents: ? DoCoMo/2.0 SH902i(c100;TB;W24H12) ? KDDI-CA32 UP.Browser/6.2.0.7.3.129 (GUI) MMP/2.0 ? SoftBank/1.0/910T/TJ001/SN000000000000000 Browser/ NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 ? Vodafone/1.0/V903SH/SHJ001/SN000000000000000 Browser/UP.Browser/7.0.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2 Ext- V-Profile/VSCL-2.0.0 ? {Ruby c200 8 Sf[^ ? J-PHONE/4.3/V603SH/SNXXXX0000000 SH/0007aa Profile/ ? { ? ^ Cg ? MIDP-1.0 Configuration/CLDC-1.0 Ext-Profile/ JSCL-1.3.2 ? { ? ^ Cg ¡§ ? Mozilla/3.0(WILLCOM;KYOCERA/WX310K/ 2;1.2.2.16.000000/0.1/C100) Opera 7.0 ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 38. with Jpmobile, <% if request.mobile? %> from mobile! <% else %> from PC! <% end %> ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 39. case request.mobile when Jpmobile::Mobile::Docomo # for DoCoMo when Jpmobile::Mobile::Au # for au when Jpmobile::Mobile::Softbank # for SoftBank when Jpmobile::Mobile::Willcom # for Willcom when Jpmobile::Mobile::Emobile # for EMOBILE ? {Ruby c200 8 Sf[^ else ? { ? ^ Cg ? # for PC ? { ? ^ Cg ¡§ end ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 40. Switching templates for mobiles ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 41. If you want to switch templates for PCs and for mobiles, or for each operator, ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 42. just put mytemplate.html.erb and mytemplate_mobile.html.erb, or ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 43. put mytemplate_mobile_docomo.html.erb and mytemplate_mobile_au.html.erb. (DoCoMo and au are cell-phone-operators) ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 44. Supporse that we have these templates. mytemplate_mobile_docomo.html.erb mytemplate_mobile.html.erb ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? mytemplate.html.erb ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 45. Access from PC: mytemplate_mobile_docomo.html.erb mytemplate_mobile.html.erb ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? mytemplate.html.erb ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 46. Access from DoCoMo: mytemplate_mobile_docomo.html.erb mytemplate_mobile.html.erb ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? mytemplate.html.erb ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 47. Access from mobiles except DoCoMo: mytemplate_mobile_docomo.html.erb mytemplate_mobile.html.erb ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? mytemplate.html.erb ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 48. Getting position of mobile-phones ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 49. in a view: <%= get_position_link_to quot;GPSquot;, :action=> :gps %> in a controller, ¡®gps¡¯ action: request.mobile.position.lat ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ request.mobile.position.lng ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 50. Getting production-numbers and/or subscriber-identi?ers. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 51. It should be frustrating to input the password with your mobile every time you are going to login. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 52. Usually the identi?er of the device or the subscriber can be obtained. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 53. Of course they are based on the various speci?cations! ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 54. with Jpmobile, request.mobile.ident_device request.mobile.ident_subscriber request.mobile.ident = ident_subscriber || ident_device ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 55. Note that they are not creditable because these identi?ers are just passed as plain text. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 56. The security will be slightly improved with combining IP-address veri?cation. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 57. Validation of IP-address range ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 58. We may want to block PCs for some (marketing?) reasons, ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 59. or we may want to check if the identi?ers (for a device or a subscribe) is surely passed from mobile. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 60. The operators provides the information of the IP-address ranges on the website ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 61. of course in various formats, and even worse, usually they are not machine readable (dirty scraping is needed). ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 62. Since Jpmobile contains the tables obtained from these machine-unfriendly websites, ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 63. Just do request.mobile.valid_ip? ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 64. Adding session IDs to URL and FORM ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 65. Some devices does not support cookies. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 66. For them, you need to pass the session ID via URL and FORM parameters. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 67. class MyController < ApplicationController trans_sid end ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 68. Getting specs of the screen ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 69. The screensize differs according to the model. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 70. In order to optimize the output, we need the information about the screen. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 71. The information may be passed via HTTP header, or not. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 72. We need to scrape the of?cial websites in case that the information in the header is not available. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 73. request.mobile.display.colors request.mobile.display.width request.mobile.display.height ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 74. Conversion of the Emoticons ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 75. Lots of lovely emoticons are available in Japanese mobiles. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 76. Each operator have own set of emoticons and own encoding. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 77. The speci?cations are so complex that I can make another presentation. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 78. The mappings (between operators) are also complex and not publicly available in machine-readable format. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 79. Jpmobile maps all emoticons (of all operators) into Unicode Private Area, and ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 80. the output is transparently converted into the format appropriate for the target device. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 81. in a controller: class MyController < ApplicationController mobile_filter end ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 82. I¡¯m going to add the feature to send emoticons PCs with embedding images. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 83. Some mobiles do not support UTF-8 or stop sending emoticons under UTF-8 communication. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 84. We need to communicate with them in Shift-JIS (a legacy but one of the most commonly used encoding). ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 85. in a controller: class MyController < ApplicationController mobile_filter end ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 86. Summary: ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 87. Japanese mobile phones have a lot of fascinating features. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 88. But we need lots of boring know-hows to build websites for Japanese mobile phones. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 89. Jpmobile helps you! ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 90. Finally, I want to ask your help: ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 91. I¡¯m a student, so I don¡¯t have many mobile-phones to test Jpmobile on. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 92. I often ask my colleagues for help, paying a canned coffee. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 93. So, if you ?nd out some problems or if you make any improvement of Jpmobile, please let me know. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 94. It may take long, but I¡¯d like to work on it. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 95. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ http://jpmobile-rails.org ? { ? ^ Cg ? ? { ? ^ Cg ¡§
  • 96. ? {Ruby c200 8 Sf[^ ? { ? ^ Cg ? ? { ? ^ Cg ¡§ ? { ? ^ Cg ? ? { ? ^ Cg ¡§