EclipseからPhpStormに乗り換えました

しばらくPhpStormを仮運用していたのですが、ライセンスを購入してもらい、Eclipseから乗り換えました。

乗り換えた理由

Eclipseに比べてだいぶ軽い

これが一番の理由です。非常にお世話になったIDEで、Eclipseと戯れた時間は多かったです。ただし重い。何年経っても重い。チューニングしようが重いものは重い。この点、PhpStormは大変軽快です。ステップ実行しようが、ファイルの検索、置換、ジャンプ等の全ての操作が軽快です。こういうところを放置しておくと、生産性にじわじわ効いてくるので、今ここで乗り換えないと、だいぶ損する気がしました。

Eclipse(PDT)でできていたことは全部出来る

WEBアプリケーションの実行は当然、Coverage、XDebug、PHPUnitのなど、Eclipse(PDT)で出来ていたことは全て出来ます。

私の心境の変化

そもそもEclipseを使い続けていた理由は、言語によって開発環境を変えなくてもプラグインがあるから、Eclipseならほぼ対応できるという点でした。しかし最近はそれぞれに特化しているモノのほうが良いという考えに変わってきています。WEBアプリケーションよりもスマホネイティブアプリのほうが良い、マルチプラットフォームで動作するアプリよりも、ネイティブで書かれたMacアプリのほうが良い、と。だったらIDEもある言語に特化したものが良い。となったわけです。ちなみに矛盾しますがPhpStormはマルチプラットフォームで動きます。

インストール後

ここからはやった設定などの覚えがきです。

設定

  • Appearance > UI Options > Look and feelをDarculaに
  • Editor > Colors & Fonts > Schema nameをSolarized Darkに
    • https://github.com/braver/PhpStorm-Solarized
    • https://github.com/cweagans/PhpStorm-solarized
  • FontはやっぱりMonacoで
  • PHPのパス設定
  • XDebugするためのサーバ設定
  • KeymapをMac OS Xに(Command + Cとかでコピーできるよう)

よく使うであろうショートカット等

キー 内容
Ctrl + →← エディタータブの切り替え
Ctrl + ↑↓ 前 or 次のメソッドにジャンプ
Commnad + Shift + N ファイルを名前であいまい検索して開く
Command + D 現在行の複製
Command + Y 現在行の削除
Command + Shift + ↑↓ 選択行のコードを移動
Command + B キャレット位置にあるメソッドなどの定義にジャンプ
Command + Option + →← ジャンプした履歴を辿る
Command + Option + T 選択範囲をif,forなどで囲む
Command + Option + Shift + T 選択範囲をリファクタリング(名前変更、メソッド抽出など)
Command + J テンプレート(スニペット)呼び出し

あとがき

これで開発スピードが上がるので、もっと他のことに時間を割けそうです。

ちなみにPhpStormのライセンスは、PhpStorm良いなーとTwitterで呟いていたら、その翌朝には代表がライセンス買ってくれました。そんな会社ランカードコムをよろしくお願い致します。(とか宣伝ぽく)

 

Facebooktwitterlinkedintumblrmail

Eclipseでプロジェクトが表示されなくて翻弄される

Netbeansが好きなmuraveです。おはようございます。ご無沙汰しております。

Eclipseさん、苦手なのですが、強力なので使うことも多いです(DBモデリングでERMasterとか)。
今回は主にPythonの開発環境としてPyDevを使いたくて環境をつくりました。

最初、PyDevプラグインだけをいれて作業していたのですがHTMLエディターがなかったのでAptana Studio全部を入れたほうがいいなと(PyDevが入っていると依存性エラーがでてインストールできなかったので)PyDevをアンインストールしてからAptana Studioをインストールしました。

すると、作業していたプロジェクトが見えなくなりました。 ギャーー!

File > Import > Existing Projects into Workspace

で読み込もうとしても

「Some projects cannot be imported because they already exist in the workspace」

プロジェクトはあると言われててます。見えないのに。

いろいろと試しましたが結局昨日は解決できませんでした。

今朝、試しに別途新しいプロジェクトを作ったのですがそれも見えなくて「これはPyDevの問題か?」とJavaパースペクティブに切り替えたところプロジェクトが見える! 設定の問題? それとも壊れてる?

結論は Packege Explorer の Top Level Elements が Working Sets になっていたためでした。

Projectsに変更すると

表示されました。ほっ。

基本的なことなのでしょうが、絶望的な気分になりました。

Facebooktwitterlinkedintumblrmail

Objectve-Cでクラスのインスタンスメソッドを書き換える

つい最近までiOS用のコードを書いていたのですが、その中でとあるオープンソースのライブラリを使用しています。でその中のとあるインスタンスメソッドの処理を書き換える必要がありました。
カテゴリ使って書き換えようと思ったのですが、その処理自身がカテゴリで定義されていたため無理でした。

まあライセンスに問題なければソースを直接修正すれば良いのですが、ライブラリのアップデートとかに備えておきたいとこです。
そこでclass_replaceMethodを使って書き換える方法に落ち着きました。

//ExampleClassのexampleMethodを書き換える例

#import 

...

id class = [ExampleClass class];//クラス定義取得
SEL sel = @selector(exampleMethod);//セレクタ取得

void (^block)() = ^{
  //処理を書き換える
};

IMP imp = imp_implementationWithBlock(block);//BlocksからIMPを生成

Method method = class_getInstanceMethod(class, sel);//元のインスタンスメソッドを取得
char* types = method_getDescription(method)->types;//インスタンスメソッドの引数の型を取得
class_replaceMethod(class, sel, imp, types); //書き換え!

これをAppDelegateなんかで実行しておけばOKです。

Facebooktwitterlinkedintumblrmail

Androidアプリのメモリリークを調査する

Androidでメモリリークを調査することがあったので手順を記述します。

1.Eclipseをダウンロードします。
    そこから!?と思うかもしれませんが一応書いておきます。

    http://www.eclipse.org/downloads/

    ここからEclipse Classic 4.2.1をダウンロードします。

    (※http://developer.android.com/sdk/index.htmlここから、
    EclipseとSDKが一括のものがダウンロード出来ますが
    プラグインが上手く入らなかったのでこれは使いませんでした。)

2.ADTをインストールします。
    1)Help→Install New Software
    2)addボタンを押して、以下のように設定します。
    3)適当に必要なものをインストールします。

3.BIRTプラグインをインストールします。
    1)Help→Install New Software
    2)Work withで「Juno – http://download.eclipse.org/releases/juno」を選択します。
    3)BIRTEnginをチェックします。
    4)インストールします。

4.Memory Analyzerプラグインをインストールします。
    1)Help→Install New Software
    2)Work withで「Juno – http://download.eclipse.org/releases/juno」を選択します。
    3)Memory Analyzerをチェックします。(Generale Purpose Toolsの中にあります。)
    4)インストールします。

5.DDMSのPerspectiveを開きます。
    1)対象のプロセスを選択して、「Dump HPROF file」を押します。
    2)表示されたダイアログで「Leak Suspects Report」をチェックし、「Finish」を押します。

メモリリークの詳細が表示されます。

Facebooktwitterlinkedintumblrmail

NSDictionaryのdictionaryWithObjectsAndKeysが辛い

iOS開発をやっていて、NSDictionaryでよく使うdictionaryWithObjectsAndKeys、NSArrayのarrayWithObjectsですが、下記のように入れ子になってくると何のこっちゃ分からなくなります。

NSDictionary *dictionary1 = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"Taichiro", @"firstname",
                             @"Yoshida", @"lastname",
                             [NSArray arrayWithObjects:
                              [NSDictionary dictionaryWithObjectsAndKeys:
                               @"twitter", @"type",
                               @"dataich", @"id",
                               nil
                               ],
                              [NSDictionary dictionaryWithObjectsAndKeys:
                               @"facebook", @"type",
                               @"dataich", @"id",
                               nil
                               ],
                              nil],
                             @"accounts",
                             nil
                             ];

NSLogで出力した結果を見ると、下記のようなシンプルな内容なのですが。

{
    accounts =     (
                {
            id = dataich;
            type = twitter;
        },
                {
            id = dataich;
            type = facebook;
        }
    );
    firstname = Taichiro;
    lastname = Yoshida;
}

これをもう少し簡単にかける方法があります。
dictionaryWithObjectsAndKeysには @{}
arrayWithObjectsには @[]
というリテラル?が用意されてます。
これを使って書き直すと下記のようになります。

NSDictionary *dictionary2 = @{
                              @"firstname" : @"Taichiro",
                              @"lastname"  : @"Yoshida",
                              @"accounts"  : @[
                                                @{
                                                    @"type" : @"twitter",
                                                    @"id"   : @"dataich"
                                                },
                                                @{
                                                    @"type" : @"facebook",
                                                    @"id"   : @"dataich"
                                                }
                                             ]
                              };

ちょっとは見やすくなりますね!

Facebooktwitterlinkedintumblrmail

Roundcubeのプラグインを、プラグインマネージャからダウンロードする

Roundcubeのプラグインをダウンロードする際、プラグインマネージャを使用すると
必要なプラグインを選択し、最新のものをダウンロードすることができます。

プラグインマネージャの主な機能

・簡易プラグインの配布
・プラグインのアップデート
・プラグインの関連情報
・アカウント設定に関するユーザレベルの制御
・Roundcubeデータベースの整理
・統一されたローカライゼーションの公開および配布
・ローカライゼーション翻訳の完全追跡
・プラグインのシステムの問題を報告
・リリースノートとドキュメントリンク

新しいスキンに対応したものが多いので、簡単に使用することが出来ます。

プラグインマネージャのダウンロード

プラグインマネージャの使用開始時には、他のプラグインを使っていないことが前提です。
プラグインマネージャの他に、以下のプラグインが必要になります。
・global_alias
・http_request
・jqueryui
・qtip
・settings

全て一緒に、こちらからダウンロード出来ます。
http://myroundcube.com/myroundcube-plugins/plugin-manager


ダウンロードが完了したら、プラグインディレクトリを指定し、フォルダを解凍します。
ディレクトリの場所はこちら。

<ルートディレクトリ>/roundcube/plugin

プラグインマネージャの設定

“config.inc.php.dist” ファイルのコピーを作成し、”config.inc.php” にリネームします。
コピーしたプラグインマネージャの ”config.inc.php” ファイルをテキストエディタで編集します。

<ルートディレクトリ>/roundcube/plugin/plugin_manager/comfig.in.php

管理者アカウントを追加します。(アカウントは複数追加できます。)

1
2
3
4
//管理者のアカウントを追加
$rcmail_config['plugin_manager_admins'] = array('admin1@mydomain.tld','admin2@mydomain.tld');$rcmail_config['plugin_manager_admins'] = array('<管理者のアカウント(メールアドレス)を記入>');

“main.inc.php”ファイルに、”plugin_manager”を追記します。

1
2
3
4
//プラグインマネージャを追加
$rcmail_config['plugins'] = array();$rcmail_config['plugins'] = array('plugin_manager');

一緒にダウンロードされた、以下のヘルパープラグインも同様にプラグインの設定を行って下さい。
・global_alias
・http_request
・jqueryui
・qtip
・settings

Roundcubeにログインし、設定をクリックすると”Manage Plugins”という項目が追加されます。


“Manage Plugins” 下の ”Pulugins Dounloads” をクリックし、Roundcubeのバージョンを選択します。
私の場合は、 ”Download plugins for Roundcube 0.8.4″ を選択し、”I agree”(同意する) をクリックします。


ここまで進むと、以下のように表示されます。
色がついているプラグインは有料です。


必要なプラグインにチェックを入れて、”Download Zip-Archive”ボタンをクリックすると
Zipファイルがダウンロードされます。

ダウンロードが完了したら、Zipファイルをプラグインディレクトリに解凍し
それぞれプラグインの設定を行います。

試しに、”compose_in_taskbar” を入れてみます。
特に難しい設定はないので、すぐに使用することができます。


タスクバーに、メッセージの新規作成ボタンを追加するプラグインです。
もちろんクリックすると、メッセージが新しく作成されます。

他にも様々な機能のプラグインが配布されているので、自分好みの機能を追加して
使いやすくカスタマイズすると、楽しいですね♪

Facebooktwitterlinkedintumblrmail

Roundcubeにプラグインを追加する

前回はRoundcubeのインストール&設定を行ったので、
本来の目的である、プラグインを試用していきたいと思います。

公式サイトのwikiに、使用可能なプラグインと設定の手順が載っていました。
http://trac.roundcube.net/wiki/Plugin_Repository

英語は得意ではないですが(;´Д`)カタコトなGoogle翻訳機能様を頼りつつ
なんとか読み解いて、探り探りやっていきました。

プラグインのインストールとプラグインの有効化

プラグインをインストールし、有効化します。

1、プラグインをダウンロードします。
2、プラグインディレクトリを指定し、フォルダを解凍します。

プラグインディレクトリの場所は以下になります。

<ルートディレクトリ>/roundcube/plugins/

3、解凍したフォルダの中に”config.inc.php.dist”ファイルが存在する場合は
コピーを作成し、”config.inc.php”にリネームします。
“config.inc.php.dist”ファイルに直接書き込まないよう気を付けて下さい。

“README”ファイルが存在し、設定の手順が載ってある場合は
手順に従い、設定を行って下さい。

4、’main.inc.php’ファイルに、追加したプラグインのディレクトリ名を追記します。
配列に列挙されたプラグインだけが有効になります。

‘main.inc.php’ファイルをテキストエディタで編集します。

<ルートディレクトリ>/roundcube/config/main.inc.php
//'additional_message_headers'と'archive'を追加
$rcmail_config['plugins'] = array();
// ↓
$rcmail_config['plugins'] = array('additional_message_headers', 'archive');

プラグインを無効にしたい場合は、リストから削除します。

//'additional_message_headers'を削除
$rcmail_config['plugins'] = array('additional_message_headers', 'archive');
// ↓
$rcmail_config['plugins'] = array('archive');

5、WEBブラウザからRoundcubeにアクセス、または更新を行い、追加した機能を確認します。

以上の設定を行えば、簡単に機能を追加することが出来ます。

ヘルプ機能を追加

Roundcubeをインストールした際、既にプラグインがいくつか入っていたので
試しにヘルプ機能を追加してみることにしました。

タスクバーにヘルプが追加されたので、クリックしてみると・・・

ヘルプのリンク先を指定してないので、何も表示されません。
“config.inc.php”ファイルを確認します。

<ルートディレクトリ>/roundcube/plugins/help/config.inc.php

ヘルプのリンク先を設定します。
特にページを作っていなかったので、Roundcubeの公式WikiのURLを指定しました。

//helpのリンク先を指定
$rcmail_config['help_source'] = '';
// ↓
$rcmail_config['help_source'] = 'http://trac.roundcube.net/wiki';

設定が済んだらページの更新を行い、ヘルプの内容が変更されているか確認します。

“larry”用のスキンも用意されていたので、レイアウトもバッチリです(´∀`)

Facebooktwitterlinkedintumblrmail

Roundcubeをインストール&設定してみました

弊社でカスタマイズ&運用サポートを行っております、
高機能WebメールRoundcube!!
業種や用途等に合わせて、自由にカスタマイズできるのが特徴です。

そのままでも使用できますが、それでは普通のWebメールと変わらず(;´Д`)
どうやらプラグインを使えば、簡単に色んな機能が追加できるようなので
さっそくRoundcubeをインストールしてみることに。

とりあえず簡単にプラグインを突っ込んで試してみたいだけなので、
下記のサイトを参考にさせていただきました。感謝です!
http://pnpk.net/cms/archives/650/all/1

ローカルでメールクライアントを構築し、Gmailを利用します。
あくまで簡単に簡単に(^_^;)

GmailでIMAPを利用する場合、Gmailの設定画面で事前に
IMAP経由でのメール受信を有効にしておく必要があります。
RoundCubeでGmailを受信する場合には、
Gmailログイン“設定”“メール転送とPOP/IMAP 設定”“IMAPアクセス”
“IMAPを有効にする” にチェックをしておいてください。

Roundcubeをダウンロード

http://roundcube.net/ からRoundcubeをダウンロードします。
今回は0.8.4を選びましたが、最近0.9-beta版が出たようですね~。

Apacheのドキュメントルートにフォルダを解凍し、フォルダ名を”roundcube”にリネームしました。
私の環境ではココです。

C:/Apache/htdocs

動作環境については、roundcubeフォルダにあるINSTALLファイル内で
REQUIREMENTS(必要条件)と記述してありました。
確認確認~(´∀`)~♪

* The Apache, Lighttpd, Cherokee or Hiawatha web server 
* .htaccess support allowing overrides for DirectoryIndex 
* PHP Version 5.2.1 or greater including
    - PCRE, DOM, JSON, XML, Session, Sockets (required)
    - libiconv (recommended)
    - mbstring, fileinfo, mcrypt (optional)
 * PEAR packages distributed with Roundcube or external:
    - MDB2 2.5.0 or newer    - Mail_Mime 1.8.1 or newer
    - Mail_mimeDecode 1.5.5 or newer
    - Net_SMTP 1.4.2 or newer
    - Net_IDNA2 0.1.1 or newer
    - Auth_SASL 1.0.6 or newer * php.ini options (see .htaccess file):
    - error_reporting E_ALL & ~E_NOTICE (or lower)
    - memory_limit > 16MB (increase as suitable to support large attachments)
    - file_uploads enabled (for attachment upload features)
    - session.auto_start disabled
    - zend.ze1_compatibility_mode disabled
    - suhosin.session.encrypt disabled
    - mbstring.func_overload disabled
    - magic_quotes_runtime disabled
    - magic_quotes_sybase disabled
 * PHP compiled with OpenSSL to connect to IMAPS and to use the spell checker
 * A MySQL (4.0.8 or newer), PostgreSQL, MSSQL database engine   or the SQLite extension for PHP
 * One of the above databases with permission to create tables
 * An SMTP server (recommended) or PHP configured for mail delivery

私の環境は、ざっとですが以下のとおりです。
・OS Windows7
・PHP Version 5.3.13
・Apache/2.2.22
・mysqlnd 5.0.8

ドキュメントルートにRoundcubeを入れておくと、こちらから設定が確認できるようです。
http://localhost/roundcube/installer/
設定出来ていれば”OK“の表示が!!

次にtemp、logsフォルダに書き込み権限を付与します。
設定方法は、こちらに詳しく書いてありました。
http://technet.microsoft.com/ja-jp/windows/ff189334.aspx

php.iniを編集

RoundCubeを動作させるために”php.ini”の内容を一部変更します。

//先頭の;を外す
extension=php_fileinfo.dll
//先頭の;を外す
extension=php_openssl.dll

私の場合、”php.ini”内に”extension=php_fileinfo.dll”の記述がなく
書いてるのと違う!どうしてくれんだ!!と焦りましたが
ちゃんと存在しました(;´∀`)

拡張モジュールは”php”フォルダの中の”ext”に収められています。
私の環境ではココです。

C:/PHP/ext

“php.ini”に”extension=php_openssl.dll”の記述を追加し、
設定を反映させるため、保存完了後、Apacheを再起動します。

Roundcubeに利用するデータベースを作成

私はphpmyadminを使用しました。
以下手順です。

1、WEBブラウザでhttp://localhost/phpmyadmin/にアクセスします
2、上部の”SQL”タブをクリックします
3、”サーバ上でクエリを実行する”に以下のコマンドを入力します

-- データベースの追加(データベース'roundcubemail'をUTF-8で作成)
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- ユーザの追加(ユーザ'roundcube@localhost'をパスワード'roundcube'で作成)
CREATE USER 'roundcube'@'localhost' IDENTIFIED BY 'roundcube';
-- アクセス権限の追加(データベース'roundcubemail'に対してユーザ'roundcube@localhost'に適用可能な権限すべてを一度に付与)
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'roundcube';

4、右下の”実行”をクリックします
5、特に問題がなければ、”SQL は正常に実行されました”と表示されます

テーブルを作成

データベーステーブルを作成します。
以下手順です。

1、左部のデータベース一覧から”roundcubemail”を選択
2、上部”インポート”タブを選択
3、以下のファイルを読み込む

&lt;ルートディレクトリ&gt;/roundcube/SQL/mysql.initial.sql

インポートが完了すると、テーブルが12個新規作成されます。

Roundcubeの初期設定を行う

ここまで準備が整ったら、WEBブラウザ経由で以下のURLにアクセスし、初期設定を行います。
http://localhost/roundcube/installer/

動作するのに必須な項目が、すべて”OK“であれば問題無いようです。
最下部の”NEXT”をクリックして先に進みます。


それ以外の”NOT AVAILABLE“等になっている場合は、phpinfoを確認し、
コンポーネントが有効になっているか確認します。
設定は後からでも出来るので、特に何も設定しませんでした。

そのまま”CREATE CONFIG”をクリックすると、
main.inc.phpとdb.inc.phpの設定が、自動的に作成されます。

 main.inc.php (download)
 db.inc.php (download)

downloadをクリックして、それぞれ設定ファイルを
以下の場所に保存します。

&lt;ルートディレクトリ&gt;/roundcube/config

CONFIGファイルの編集
直接テキストエディタでファイルを編集します。
Gmailを利用した場合の設定です。

“main.inc.php”の設定

//IMAPサーバの指定
$rcmail_config['default_host'] = '';
↓
$rcmail_config['default_host'] = 'ssl://imap.gmail.com:993';
//IMAPサーバ接続ポートの変更
$rcmail_config['default_port'] = 143;
↓
$rcmail_config['default_port'] = 993;
//SMTPサーバの指定
$rcmail_config['smtp_server'] = '';
↓
$rcmail_config['smtp_server'] = 'ssl://smtp.gmail.com';
//SMTP接続ポートの変更
$rcmail_config['smtp_port'] = 25;
↓
$rcmail_config['smtp_port'] = 465;
//SMTPログインユーザの指定 
$rcmail_config['smtp_user'] = '';
↓
$rcmail_config['smtp_user'] = '%u';
//SMTPパスワードの指定 
$rcmail_config['smtp_pass'] = '';
↓
$rcmail_config['smtp_pass'] = '%p';

“db.inc.php”の設定

//SMTPパスワードの指定 
$rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';
↓
//データベースのユーザ名とパスワードを入力
$rcmail_config['db_dsnw'] = 'mysql://root(ユーザ名):******(パスワード)@localhost/roundcubemail';

RoundCubeにログインする
http://localhost/roundcube/ にアクセスすると、RoundCubeのTOPページが表示されます。

ここで指定するログイン名は、実際のメールサーバのユーザー名とパスワードになります。
Gmailアカウントでログインする場合にはユーザー名にメールアドレス(xxxx@gmail.com)と、
パスワードを入力します。


問題なくログインできたら、不要になったinstallerフォルダの削除を行います。
以下を、フォルダごと削除して下さい。

&lt;ルートディレクトリ&gt;/roundcube/installer

以前試みた時には、うまくいかず断念しましたが、今回はなぜかスムーズに進みました。
大したことはしてませんが、動いてる感があるのでなんだか嬉しいです!


オリジナル感を出したいのでマークをねこちゃんに(笑)
可愛い可愛い(´∀`)ふふふ
スキンを自分好みに変えれるのは嬉しいですね~。

次は、プラグインを入れていきたいと思います。

Facebooktwitterlinkedintumblrmail

Eサイクルがやってきた

『CEATEC JAPAN 2012』長崎県ブースに一緒に出展した有安オートさんのEサイクル「ISOLA」。
一目惚れして即発注でした。

本日、ついにやって来ました。折りたたみにパワーアップして!

折りたたんだ状態はこんな感じ。

組み立てた状態のは私(murave)の、折りたたみ状態のはminemazさんのです。

有安オートさんのページ
https://sites.google.com/site/ariyasuauto/

Eサイクル「ISOLA」のページ
http://www.isola-japan.com/

Facebooktwitterlinkedintumblrmail

いらっしゃいませ OSC2012福岡

ブースこんな感じです。エレベーターで上がってきたらすぐというナイスポジション。
「受付ですか?」と言われガチなのがたまに傷デス。

あと喫煙所(屋上?)へもウチのブースの横から出れますヨ。

セミナー関係は14時からは @minemaz が

『県庁並行稼働中!OpenCOBOL汎用機ダウンサイジングでのハマりどころ』

というセミナーを行います。

また、12時からの

『OSS九州サミットあげいん ~横の連携、深めていきますよぉ~』

にも @minemaz がパネリストとして登場します。

よろしくお願いします。

おまけ。缶バッチ((C)みさくらなんこつ・JACUG)に侵略された自由配布ブース。

Facebooktwitterlinkedintumblrmail