LINE 2台以上のスマホで利用する

Android

LINE 2台以上のスマホで利用する

2台以上のスマホ、タブレットでLINEが一度に使えたらいいなと思いますよね。

残念ながら2013年3月現在のバージョン、3.5.2では2台以上のスマホで同じアカウントを利用することはできません。

それどころか、2台目のスマホで、今まで持っているログインIDでログインし、電話番号を認証すると、今までのスマホに残っていたトークのデータが全て消えてしまうというとても悲惨なことが起こります。

line_2device.png

今までやり取りしたトークなどのデータが全部消えます。[sad]
もちろん、新しく認証したスマホの方に、過去のデータが落ちてくるということはありません。

何の警告もしてくれないので、気をつけましょう!

もちろん、2台目はFacebook IDでログインする、などとすれば2台目で使えるような気がしますが、これは別のアカウントなんですね。

ちなみに、PC版とスマホ版で同じアカウントを使ってLINEの内容を共有、ということは可能です。
私の場合は、2台目にLINEをインストールして、トークの内容が全部消えてしまったんですが、PC版も利用していたので、PC版でデータが残っていて助かりました。

PC版は意外と便利ですよ。PC版のダウンロードは下記のページの左にある、「LINE APP DOWNLOAD」をクリックしましょう。
先に、スマホでの登録がないと使えないので注意しましょう。

http://line.naver.jp/ja/

LINE

LINEはスマートフォンやPCで無料通話、無料チャット、SNSなどができるスマートフォンアプリ、ソフトウェアです。
公式サイト

LAMPサーバーの基本設定

Linuxサーバー

Centos5.xの場合です。
アプリの特性と関係無く基本的に設定する項目です。

apache

  • /etc/httpd/conf/httpd.conf
 ServerTokens ProductOnly
 #ServerTokens OS
 Timeout 30
 #Timeout 120

原則KeepAliveはOnにします。WebAPI用で連続アクセスが少なかったり、すこしでもサーバー負荷を減らしたい場合は負荷な場合はOffにすることも。

 KeepAlive On
 #KeepAlive Off

MaxKeepAliveRequestsは、良く閲覧されるページで参照されるファイル数に合わせる

 MaxKeepAliveRequests 15
 #MaxKeepAliveRequests 100

KeepAliveTimeoutは原則2秒にする。

 KeepAliveTimeout 2
 #KeepAliveTimeout 15

ServerLimitやMaxClientsはmod_phpを使うので控えめにします

 <IfModule prefork.c>
 StartServers       8
 MinSpareServers    5
 MaxSpareServers   20
 ServerLimit       64
 MaxClients        64
 #ServerLimit      256
 #MaxClients       256
 MaxRequestsPerChild  4000
 </IfModule>

不要なモジュールは読み込まないようにします。

  • -ldapを使わない場合
  •  #LoadModule ldap_module modules/mod_ldap.so
     #LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
    
    • -webdavを使わない場合
    •  #LoadModule dav_module modules/mod_dav.so
       #LoadModule dav_fs_module modules/mod_dav_fs.so
      
      • -proxyを使わない場合。
      •  #LoadModule proxy_module modules/mod_proxy.so
         #LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
         #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
         #LoadModule proxy_http_module modules/mod_proxy_http.so
         #LoadModule proxy_connect_module modules/mod_proxy_connect.so
        

        なお、/etc/httpd/conf.d/proxy_ajp.confはmod_proxyが必要なのでいかのようにリネームなどしておきます。

         mv /etc/httpd/conf.d/proxy_ajp.conf /etc/httpd/conf.d/proxy_ajp.conf.dist
        

        キャッシュ機能をつかわない場合

         #LoadModule disk_cache_module modules/mod_disk_cache.so
         #LoadModule file_cache_module modules/mod_file_cache.so
         #LoadModule mem_cache_module modules/mod_mem_cache.so
        

        munin等監視エージェント用に

         ExtendedStatus On
        
         <Location /server-status>
             SetHandler server-status
             Order deny,allow
             Deny from all
             Allow from 127.
         #    Allow from .example.com
         </Location>
        

        ディレクトリインデックスは非公開にします。

          <Directory "/var/www/html">
            Options FollowSymLinks
             #Options Indexes FollowSymLinks
          </Directory>
        

        アクセスログ出力の調整

         LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %X %D" combinedstat
         
         # do not log worm
         SetEnvIf Request_URI "default\.ida" no_log
         SetEnvIf Request_URI "cmd\.exe" no_log
         SetEnvIf Request_URI "root\.exe" no_log
         SetEnvIf Request_URI "Admin\.dll" no_log
         SetEnvIf Request_URI "NULL\.IDA" no_log
         # do not log local network
         SetEnvIf Remote_Addr 127.0.0.1 no_log
         # internal dummy connection
         SetEnvIf Remote_Addr "::1" no_log
         
         CustomLog logs/access_log combinedstat env=!no_log
        
         ServerSignature Off
         #ServerSignature On
         
        

        原則FileEtagは使いません

         FileEtag None
        

        HTTP TRACEは禁止します

         TraceEnable off
        

        テキスト系のコンテンツタイプ指定で最大に圧縮送信します。

         AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css
         DeflateCompressionLevel 9
        

        非同期ロギングを有効にします。

         BufferedLogs on
        

        php(5.1.6)

        APCをepelからインストールします。

         # yum install php-pecl-apc
        

        php5.3の場合はCentos5.6のリポジトリに用意されていないようなので、現時点では自前で何とかする必要があるようです。

        mysql

        Query Cacheと遅いクエリをロギングします。

         # Query Cache
         query_cache_size=64M
         query_cache_limit=1M
        
         # Log Slow Queries
         log-slow-queries=/var/log/mysqld-slow.log
         long_query_time=2
        

LAMPサーバーにNginxをリバースプロキシとして追加する

Linuxサーバー
既存のLAMPサーバーにNginxをリバースプロキシとして追加しました。
サーバー環境は下記の通りです。

  • CentOS 6.4 64bit
  • apache 2.2.15
  • php 5.4.21
  • mysql 5.5.33

以下、2013/10/21時点の情報になります。
Nginxとapacheは同一サーバーで動作させ、Nginxは80番ポート、apacheは8080番ポートで動作させます。
また、Virtual Hostは使用せず、すべてのアクセスをapacheに転送します。

Nginxのインストール

epelリポジトリのNginxはバージョンが古いため、Nginx本家のリポジトリから最新バージョンをインストールします。

 # vim /etc/yum.repos.d/nginx.repo 
 [nginx]
 name=nginx repo
 baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
 gpgcheck=0
 enabled=1
 # yum install nginx

CentOS以外のOSでは、下記を参考にしてください。
http://wiki.nginx.org/Install

Nginxの設定

デフォルト設定ファイルを削除または、conf以外の拡張子にリネームしてincludeされないようにします。

 mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.dist

リバースプロキシ用の設定ファイルを追加します。
server_nameは実際のホスト名に合わせて変更します。

 # vim /etc/nginx/conf.d/proxy.conf 
 server {
     listen       80;
     server_name  localhost;
 
     charset   utf-8;
     keepalive_timeout  65;
     server_tokens       off;
     sendfile            on;
     tcp_nopush          on;
     tcp_nodelay         off;
 
     index index.php index.html index.htm;
     location / {
         proxy_pass http://localhost:8080;
         proxy_set_header        X-Real-IP       $remote_addr;
         proxy_set_header        Host            $host;
         proxy_redirect          off;
         proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_connect_timeout 90;
         proxy_send_timeout 90;
         proxy_read_timeout 90;
         client_max_body_size 10m;
         client_body_buffer_size 128k;
         proxy_buffer_size 4k;
         proxy_buffers 4 32k;
         proxy_busy_buffers_size 64k;
     }
 }

設定ファイルをテストします。

 # nginx -t

Nginxを起動します。

 # service nginx start

Apacheの設定変更

動作させるポート番号を80から8080に変更します。

 # vim /etc/httpd/conf/httpd.conf

Listen 80を下記に変更します。

 Listen 8080

mod_rpafのインストール

Apache上でリバースプロキシーではなく元のアクセス元のIPアドレスを参照できるようにするためにmod_rpafをインストールします。
アクセスログにアクセス元を記録させるだけで良ければ、access_logのLogFormatにX-Forwarded-Forを追加するだけで済みます。なお、apahche 2.2ではerror_logのフォーマットを変更することはできません。(apache 2.4では変更可能になっています)

mod_rpafはソースコードからインストールするか、atomicリポジトリからyumでインストールします。

 # wget -q -O - http://www.atomicorp.com/installers/atomic | sh 
 # yum install mod_rpaf

apacheの設定をテストしてOKなら再起動します。

 # service httpd configtest
 # service httpd restart

以上で、Nginxをインストールする前と同様にWebサイトにアクセスできるようになりました。
動作に問題なければNginxを自動で起動するように設定します。

 # chkconfig nginx on

Kal Calenderの下のTableViewCellにデータを表示させたい

iPhone

iPhone標準のカレンダーのようなものをつくりたいときに、Kal Calendarというコンポーネントを使用しました。
そこで、今回は選択した日付に関連したデータをカレンダーの下のテーブルビューセルに表示させる方法を記載します。

クラス:KalViewController.m

 - (void)loadView
 {
   if (!self.title) self.title = @"Calendar";
   KalView *kalView = [[[KalView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] delegate:self logic:logic] autorelease];
   self.view = kalView;
   tableView = kalView.tableView;
   tableView.dataSource = detaSource;
   tableView.delegate = delegate;
   [tableView retain];
   [kalView selectDate:[KalDate dateFromNSDate:self.initialDate]];
   [self reloadData];
 }

 detaSource = [SimpleKalDataSource dataSource];
 [detaSource retain];

を追加してください。これで下のテーブルビューセルにアクセスできます。

次に、SimpleKalDataSourceを変更します。

ViewDataSource.m

 @implementation SimpleKalDataSource
 {
     NSArray* array_;
 }

まずはメンバ変数を定義します。

次に、下のテーブルビューセルに表示させたい値を配列に格納します。

 - (void)loadItemsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate
 {
     array = [NSArray alloc] initWithObjects:@"1", @"2", @"3", nil];
 }

あとは、配列の中身によって表示が変わるよう以下を設定してあげます。

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

どうしてもできない場合は、KalViewControllerの

 UITableViewDelegateのdelegate
 KalDataSourceのdataSource

の値を見てください。
retain忘れずに。

最後に、

 removeAllItems

日付が変更されたときに、データを削除します。
適宜削除の処理を書きましょう。

参考URL:
http://www.andyshep.org/2011/05/01/calendar-control-on-ios.html

http://stackoverflow.com/questions/12111309/kal-calendar-walkthrough

http://junpeiwada.com/2011/01/04/iphone%E7%94%A8%E3%81%AE%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88/