exlar's IT note

ITやスマートデバイスを中心とした趣味情報の寄せ集め

閲覧中ページをbitlyで短縮URLにしてからTwitterクライアントの投稿欄に入力するブックマークレット

閲覧中ページをbitlyで短縮URLにしてからTwitterクライアントの投稿欄に入力するブックマークレット

これなに?

閲覧中サイトのURLを短縮URL化したうえで、Twitterクライアント(公式)のTweet投稿画面を開いてページタイトルと短縮URLを入力するものです。

例えば本ページの場合はこんな感じになります。
『 || 閲覧中ページをbitlyで短縮URLにしてからTwitterクライアントの投稿欄に入力するブックマークレット - まとめノート (exlair's note) http://bit.ly/1cxACM7

Mac / iOS(8.xで確認) いずれも Safari / Chrome で動作することを確認しています。

きっかけ

ブラウザで閲覧中のサイトをTweetして共有したいと思った時、

  • URLをはりつけるのが面倒臭い
  • ページタイトルも表示したいんだけどなぁ
  • 文字数の節約/クリック数統計のためにbit.lyを使いたい
  • iOS標準の共有機能によるTweetはいまいち好きになれない

といったシーンがあるかと思います。また、「家ではMacだけど外ではiPhone/iPadなんだよね」といったことも最近ではよくある話。そして、利用しているデバイスに応じて方法が変わるのも面倒くさい話。

というわけで、閲覧中のページを共有したい時 MacでもiPhoneでも、Twitter公式クライアントを入力窓にすればいいや、というのが今回の話。

使い方

普通のブックマークレットです。
bit.lyで短縮URLを作成するために自身のIDとAPIkeyを利用する前提で作っていますので、適宜書き換えてください。 それぞれ、i='your user name'(メールアドレスではないもの)とk='your bitly API key'(R_ から始まる桁数の多い文字列)の部分です。

Tweet w/t Bitly
(Mac向けのリンク。お気に入り欄にドラッグして登録してください)

Tweet w/t Bitly
(iOS向けリンク。iOSの場合はブックマークレットを直接お気に入り登録できないため、この仮URLをお気に入り登録したうえで、その後URLを下記のコードに書き換えてください。全部上書きでOKです)

なお、Safari も Chrome も、MacとiOS間でブックマークを共有(割と早い)する機能がありますので、その場合はブラウザで登録した方が楽です。

javascript:(function(d,l){ var i,k,u,s;i='your user name';k='your bitly API key';u='http://api.bit.ly/v3/shorten?format=json&callback=bitlycb&login='+i+'&apiKey='+k+'&longUrl='+encodeURIComponent(l.href);s=d.createElement('script');s.type='text/javascript';s.src=u;d.body.appendChild(s);})(document,location);var bitlycb=function(r){ var t,h;t=document.title;t=t?t:'';h='twitter://post?message='+encodeURIComponent(' || '+t+' '+r.data.url);console.log(h);location.href=h;};

他のTwitterクライアントを使いたい場合

ひとつのコードでMacもiOSも対応できる理由は、Twitterクライアントを起動するためのURIスキームが twitter:// となっており同一であるためです。ですので、以下の対応が可能です。

  • 他のTwitterクライアントでもMacとiOS対応しているものがあり、かつクライアントを呼び出すURLスキームの部分が同一である場合
  • マルチデバイス対応なんていらない(例えばiPhoneだけでいいよ)という場合は、選択肢がグッと広がります。いくつかサンプルを記載しますが、色々ありますので調べてください。

なお、これはTwitterクライアントに限定されるものではありません。

実装

(function(d,l){
    var i,k,u,s;
    i='your user name';
    k='your bitly API key';
    u='http://api.bit.ly/v3/shorten?format=json&callback=bitlycb&login='+i+'&apiKey='+k+'&longUrl='+encodeURIComponent(l.href);
    s=d.createElement('script');
    s.type='text/javascript';
    s.src=u;
    d.body.appendChild(s);
})(document,location);

var bitlycb = function(r){
    var t,h;
    t=document.title;
    t=t?t:'';
    h='twitter://post?message='+encodeURIComponent(' || '+t+' '+r.data.url);
    console.log(h);
    location.href=h;
};

CentOS7でsambaが起動しない

CentOS7の環境でsmbを起動するためにsystemctl start smbしたところ…

12月 06 15:27:12 cent sudo[21191]: username : TTY=pts/0 ; PWD=/etc ; USER=root ; COMMAND=/bin/systemctl start smb.service
12月 06 15:27:12 cent systemd[1]: Starting Samba SMB Daemon...
-- Subject: Unit smb.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit smb.service has begun starting up.
12月 06 15:27:12 cent systemd[1]: smb.service: main process exited, code=exited, status=1/FAILURE
12月 06 15:27:12 cent systemd[1]: Failed to start Samba SMB Daemon.
-- Subject: Unit smb.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit smb.service has failed.
-- 
-- The result is failed.
12月 06 15:27:12 cent systemd[1]: Unit smb.service entered failed state.

チェックポイント

  1. systemdのstatusがenableになっているか? systemctl list-unit-files
  2. /etc/samba/smb.conf は正しく設定されているか?

CentOS6.xから7へアップグレードした際に調子が悪くなったので、yum remove sambaして再インストール。他にもいろいろなエラーが発生したので、プロセス管理機構が大幅に変わるようなアップデートは新規インストールした方がよいなと改めて思う。

OSXからCentOS6.5へknife soloしたい!発生したエラーと対策

随分前に少し使って放置していたChef実行環境(knife solo)を改めて使ってみる。

  • Client環境 (knife solo): OSX
  • Server環境: CentOS 6.5: インストールしてアップデートした程度の状況。ほぼ初期状態

まず最低限ということで、

  1. 接続先情報を初期化する knife solo prepare の実行完了
  2. recipeを実行する knife solo cook の実行完了

を最初の目標にする。recipeはユーザを作成する程度の簡単なものにした。

Chef & knife 関連はさすがに環境変化が激しく、Web検索で見つかる情報はどれも古く感じてしまうのが辛いところ。いろいろな情報をかき集めながら初期環境を構築した。正常パターンは追々メモすることとして、本記事ではハマったところのエラーを記録する。

関門1: Cookbook *** not found. が発生した時

knife solo prepare ***@hostname.local を実行したあと、 knife cook に入ろうとしたところで ERROR が発生してしまいなかなか前へ進めない。

Uploading the kitchen...

Generating solo config...

Running Chef...

Starting Chef Client, version 11.12.0
Compiling Cookbooks...

Running handlers:
[2014-10-27T21:35:08+09:00] ERROR: Running exception handlers
Running handlers complete

[2014-10-27T21:35:08+09:00] ERROR: Exception handlers complete
[2014-10-27T21:35:08+09:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 2.393915796 seconds
[2014-10-27T21:35:08+09:00] ERROR: Cookbook users not found. If you're loading users from another cookbook, make sure you configure the dependency in your metadata
[2014-10-27T21:35:08+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
ERROR: RuntimeError: chef-solo failed. See output above.

Cookbook users と記載されている部分は、今回適用しようと思った recipe の名前。これが見つからないとエラーになっている。

対処方法

CookbookへのPATHが通っていない。結果だけ見ると単純すぎる…

cookbook_path    ["cookbooks", "site-cookbooks"]

昔作った .chef/knife.rb の表現が古くなっていたようで、そちらのはこの記載が入っておらずなかなか気づかなかった。既存の .chef を削除した後、knife solo init . を実行すると新しいものが作られる。

関門2: metadata.rb内のlong_descriptionが邪魔する

Running handlers:
[2014-10-27T21:42:08+09:00] ERROR: Running exception handlers
Running handlers complete

[2014-10-27T21:42:08+09:00] ERROR: Exception handlers complete
[2014-10-27T21:42:08+09:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
Chef Client failed. 0 resources updated in 2.06716861 seconds
[2014-10-27T21:42:08+09:00] ERROR: No such file or directory - /home/****/chef-solo/cookbooks-3/ssh/README.md
[2014-10-27T21:42:08+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
ERROR: RuntimeError: chef-solo failed. See output above.

対処方法

knifeコマンドでrecipeを作成すると自動生成されるmetadata.rb内には以下の記述がある。小規模・個人的な利用なので不要なファイルは削除してしまった為、ここでファイルが存在しないとエラーになっている様子。

long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))

long_descriptionは行ごとごっそり削除してしまうことにする。

関門3: SSLチェックのエラーが出る

[2014-10-27T21:56:04+09:00] WARN:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SSL validation of HTTPS requests is disabled. HTTPS connections are still
encrypted, but chef is not able to detect forged replies or man in the middle
attacks.

To fix this issue add an entry like this to your configuration file:

```
  # Verify all HTTPS connections (recommended)
  ssl_verify_mode :verify_peer

  # OR, Verify only connections to chef-server
  verify_api_cert true
```

To check your SSL configuration, or troubleshoot errors, you can use the
`knife ssl check` command like so:

```
  knife ssl check -c /home/****/chef-solo/solo.rb
```

* * * * * * * * * * * * * * * * * * * * * * * * * * 

対処方法

ここは素直にrecommendされている一行 ssl_verify_mode :verify_peer.chef/knife.rb に追加する。

そして成功へ

なんとか実行完了しました。黒いターミナルの上に輝く緑の文字が嬉しい。