メインコンテンツに移動
mattz.xii.jp

Main navigation

  • Home
User account menu
  • ログイン

Togetterをフィルタリングするuser.js

By mattz, 2011/06/03

http://mattz.xii.jp/sites/default/files/togetter-filter_100.js
http://mattz.xii.jp/sites/default/files/togetter-filter_100b1.js

出来ること

  1. 指定したIDによるまとめを一覧から除外
  2. 指定したキーワードをまとめタイトルに含むまとめを一覧から除外
  3. 指定したID(1とは別管理です)によるコメントをコメント欄から除外
  4. 指定したIDのtweetを一時的に抽出/非表示/強調する機能を追加(1.0.0で追加)

簡単な使い方

user.jsそのものの使い方は省略します。

まとめのタイトルによるフィルタリング

このuser.jsを有効な状態でTogetterの「注目のまとめ」などの一覧ページを開くと、各まとめのタイトルの左に[NGワード登録]というボタンが表示されま す。
これをクリックすると、入力用のダイアログが開きます。初期状態ではそのまとめのタイトルが既に入力済みの状態になっていますので、適宜編集して[OK]ボタンを押すと、そこで登録した単語(文字列)を含むまとめは、「NGタイトルにより非表示にされています(クリックで再表示)」という表示に置き換わります。

これをクリックすると、フィルタリング対象のまとめでも表示し、登録してしまったNGワードを削除することもできます。

なお、「,」半角のカンマはNGワードに使えません。

まとめた人のIDによるフィルタリング

このuser.jsを有効な状態でTogetterの「注目のまとめ」などの一覧ページを開き、各まとめのまとめた人のアイコンをクリックすると、「このユーザの作 成したまとめを非表示にしますか?:○○」というダイアログが開きます。

[OK]を押すと、以後その人の作成したまとめは、一覧に表示されなくなります。復帰させたい場合は、その人のプロフィールページ(http://togetter.com/id/○○)に行くと、ページの左上の方に「このユーザのまとめは現在フィルタリング対象です。→[解除]」というメッセージが表示されますので、「解除」ボタンをクリックしてください。

コメント欄のIDによるフィルタリング

このuser.jsを有効な状態でTogetterの何かのまとめを開き、コメント欄の誰かのアイコンをクリックすると、「このユーザのコメントを非表示にしますか ?:○○」というダイアログが開きます。

[OK]を押すと、以後その人のコメントは、どのまとめページにも表示されなくなります。復帰させたい場合は、その人のプロフィールページ(http://togetter.com/id/○○)に行くと、ページの左下の方に「このユーザのコメントは現在フィルタリング対象です。→[解除]」というメッセージが表示されますので、「解除」ボタンをクリックしてください。

特定IDの抽出/非表示/強調

このuser.jsを有効な状態でTogetterの何かのまとめを開き、誰かのつぶやき部分をクリックすると、

このような物が表示されます。

[Pick-up]を押すと、その人のtweetsだけを残して、他の人のtweetを非表示にします。
[Remove]を押すと、Pickupの逆でその人のtweetsを非表示にします。
色付きの■部分を押すと、その人のtweetsのフォントカラーをその色に、背景色をアイボリーに変更して、少し目立つようにします。

やめたいときは「Click (or press [ESC]) to close.」部分をclickするか、Ecsキーを押してください。

また、これらの抽出/非表示/強調はあくまで一時的なもので、ページを読み込み直すと元の状態に戻ります。

タグ

  • JavaScript
  • UserJS
  • Togetter
  • Opera

Togetter用のuser.js最新版

By mattz, 2011/06/02

http://mattz.xii.jp/sites/default/files/togetter_421.js

2011/10/05:いくつか設定項目を追加しました。

http://mattz.xii.jp/sites/default/files/togetter_410.js

2011/06/10:いくつか設定項目を追加しました。

http://mattz.xii.jp/sites/default/files/togetter_401.js

2011/06/06:Togetterのhtmlが変更になったようで「最初から"もっと読む"」が効いていなかったので修正しました。

http://mattz.xii.jp/sites/default/files/togetter_400.js

多少修正して、とりあえず4.0.0としてはフィックスします。

http://mattz.xii.jp/sites/default/files/togetter_400b1.js

とりあえず版。Togetterさん、リニューアルで以前に比べればだいぶすっきりしましたけど、個人的にはまだ要らない(サービスとし て必要なのは分かりますが)要素が多いので、その辺をすっきりするだけです。まぁ、ほとんどの項目はuser.cssで消せるんですけどね。

スクリプト適用前

スクリプトを適用し、全ての設定を有効にした場合

フィルタリングしたりするのは、別ファイルに分けようかと検討中。

タグ

  • JavaScript
  • UserJS
  • Togetter
  • Opera

ライブみてきました

By mattz, 2011/05/29

いつも通りたむらぱんのライブだったりする訳ですけど、いつもと違うところもあって、今回はワンマンじゃなくてHALCALIさんと一緒。一緒っていっても 別に一緒に歌ったりする訳ではないですけどね。会場は下北沢GARDENというハコで、今回のライブのページがこちら→~Special two sets that blooms in shimokitazawa~

構成は前半がたむらぱんで、機材の入れ替えがあって後半がHALCALIというもの でした。

前半のたむらぱんパートは、新曲の「しんぱい」の初披露などはあったものの、こう言ってはなんですが前回のLIQUID ROOMからそんなに変わってなかった りで、あまり驚きなどはなくて。最近「ノバディノウズ」よくやるのはなんでかなぁ、くらい。2曲目の後のアクシデントについてはあんまり触れないでお きますけど、ちょっとどうなの、とは思いました。あ、あと会場が狭い + 僕の知る限りではクアトロ以来の踏み台ありだったので、たむらさんがよく見え たのは良かったところ。出来ればいつも踏み台で歌ってもらえないかな。

で、1時間弱でたむらぱんパートは終わりで、なんかここで帰っちゃった人が結構いたみたいです。僕はメインはもちろんたむらぱん目当てでしたけど、今 まで全く聴いたことはないとはいえ、HALCALIはHALCALIでどんなもんなのか楽しみにしていたので最後まで観てきましたが、帰っちゃった人、多分損しましたよ。

だって、この際なので正直に書きますけど、後半のHALCALIさんのステージの方が楽しかったですから。ジャンル的にはヒップホップだそうですが、今まで ヒップホップなんて全然聴いたことありませんし、当然ライブなんか初めてです。HALCALIさんの曲も全然知りませんでしたけど、なんだか聴いててウキウ キ・ワクワクする感じでとてもよかったです。HALCALIファンなんだろうな、って人が近くで楽しそうに踊ってたので、そのノリ見ながら僕も適当に体揺ら したりしてました。たむらーのみんなも、もうちょっとだけ大きく体動かしたらいいのになぁ、などとも思いましたけど、楽しみ方は人それぞれですしね。

音楽のジャンルとしてはあまり好みではないので、HALCALIのCD買ったりすることは多分ないかな、なんて思うんですが、ライブはまた観てみたい気もしま す。

オチも何も無いですが、今日(日付的には昨日だけど)のライブの感想はこんな感じです。

タグ

  • たむらぱん
  • ライブ
  • 音楽
  • HALCALI

「なんだっけ」でググると「もしかして:」を提示してくれるuser.js for Opera

By mattz, 2011/05/12

なんだっけ、でくぐったら「もしかして:」で検索ワードだしてきたらこわいに触発された。力不足でクロスブラウザにはできなかった。

追記その5:「Opera9.6 から「安全でなくなった」 UserJavaScript があるけ どイコール「危険」というわけでもない話」を併せてお読みください。

拾う単語は、Yahoo!の急上昇ワードランキングから取得するようにした。Twitterの日本のTrendsから、とか、他の例えばランダム単語APIなんかでもいい。ただしその場合は若干スクリプトを変更する必要がある。Google TrendsのAPI欲しいんだけどないのかな?

あと、xmlをGETしてくるところは http://javascript.g.hatena.ne.jp/edvakf/20100329/1269881699 をほぼそのまま利用させてもらった。edvakfさんに感 謝。

追記その4:追記の1~3はそうはいってもやっぱり恥ずかしいのでhtmlのコメントとして隠した。とにかくコメント欄参照のこと。

// ==UserScript==
// @name          nandakke.js
// @author        mattz
// @namespace     http://mattz.xii.jp
// @license       public domain
// @description   「なんだっけ」でググると「もしかして:」を提示してくれるuser.js for Opera
// @published     2011-05-13
// @version       0.0.2
// @include       http://www.google.com/search?*
// @include       http://www.google.co.jp/search?*
// ==/UserScript==
(function(){
  var _document = document;
  var call = Function.prototype.call,
      indexOf = Array.prototype.indexOf,
      splice = Array.prototype.splice,
      preventDefault = Event.prototype.preventDefault,
      removeChild = Node.prototype.removeChild,
      createElement = Document.prototype.createElement,
      push = Array.prototype.push,
      appendChild = Node.prototype.appendChild,
      parseFromString = DOMParser.prototype.parseFromString,
      getElementsByTagName = Document.prototype.getElementsByTagName,
      parseInt = window.parseInt,
      random = Math.random,
      encodeURIComponent = window.encodeURIComponent,
      setAttribute = Element.prototype.setAttribute,
      getElementById = Document.prototype.getElementById,
      split = String.prototype.split;
  var scripts = [];
  var callbacks = [];
  opera.addEventListener('BeforeScript', function(e) {
    indexOf.call = splice.call = preventDefault.call = removeChild.call = call;
    var s = e.element;
    var index = indexOf.call(scripts, s);
    if (index >= 0) {
      callbacks[index].call(null, s.text);
      splice.call(scripts, index, 1);
      splice.call(callbacks, index, 1);
      preventDefault.call(e);
      removeChild.call(s.parentNode, s);
    }
  }, false);
  var xGet = function (url, callback) {
    createElement.call = appendChild.call = push.call = call;
    var s = createElement.call(_document, 'script');
    s.src = url;
    appendChild.call(_document.body, s);
    push.call(scripts, s);
    push.call(callbacks, callback);
  }
  var rand_word = function(xml) {
    parseFromString.call = call = setAttribute.call = createElement.call = appendChild.call = getElementById.call = call;
    var xmldom = new DOMParser();
    xmldom.async = false;
    var dom = parseFromString.call(xmldom, xml, "application/xml");
    if (! dom) return false;
    var is = getElementsByTagName.call(dom, 'item');
    var r = parseInt(random() * 20);
    var word = is[r].getElementsByTagName('title')[0].textContent;
    var b = createElement.call(_document, 'b');
    b.textContent = word;
    var a = createElement.call(_document, 'a');
    a.href = '/search?hl=ja&rls=ja&spell=1&q=' + encodeURIComponent(word);

    setAttribute.call(a, 'class', 'spell');
    appendChild.call(a, b);
    var span = createElement.call(_document, 'span');
    span.textContent = 'もしかして: ';
    setAttribute.call(span, 'class', 'spell');
    setAttribute.call(span, 'style', 'color:#cc0000');
    var p = createElement.call(_document, 'p');
    setAttribute.call(p, 'class', 'ssp');
    appendChild.call(p, span);
    appendChild.call(p, a);
    appendChild.call(getElementById.call(_document, 'topstuff'), p);
  }
  var init = function() {
    split.call = call;
    var a = split.call(location.search, /[\?&]/);
    for(var i = 0; i < a.length; i++) {
      var q = split.call(a[i], /=/);
      if ('q' == q[0] && '%E3%81%AA%E3%82%93%E3%81%A0%E3%81%A3%E3%81%91' == q[1]) {
        xGet('http://searchranking.yahoo.co.jp/rss/burst_ranking-rss.xml', rand_word);
        return false;
      }
    }
  }
  window.addEventListener('DOMContentLoaded', init, false);
})();

タグ

  • JavaScript
  • UserJS
  • Opera
  • 検索

MySQLのDrupal 6からSQLiteのDrupal 7へ

By mattz, 2011/04/25

各nodeの移行をすべく色々試行錯誤した。ちなみに本文中の「{hogehoge}」ってやつはテーブル名を表していますが、そもそもこのエントリは基本自分用で、Drupalを全く知らない人は全く想定していません。

まず、Drupal 6のnodeの中身は、基本的に{node}と、{node_revisions}に保存されている。ので、その中身をSelectして、それっぽいテーブルにつっこめばいいだろう、と思ったのだが、Drupal 7には{node}はあっても、{node_revisions}はない。{node_revision}ってのはあったが、本文を保存するカラムがな い。

色々と探してみて、{field_data_body}のようだと思われたので、{node}、{node_revision}、{field_data_body}の各テーブルのそれぞれのカラムに、Drupal 6のDBからSelectした値を入れてみる。結果、nodeの中身は表示されない。

もうちょっと探してみたら、{field_revision_body}というテーブルも見つけたのでそこにもそれらしい値を入れてみたが表示されない。

ここまで来てやっとnodeモジュールのソースを見るという行為に着手。いやまぁ最初にやれって思わないわけではない。というのは置いといて、ソースをざっと見た限りでnode/addするときにupdateしたりinsertしたりするテーブルには他に{history}というのもあるらしいことが分かったので、そこにも値を入 れてみるが表示されない。

もう値が必須なテーブルはないと思うんだけどなぁ、と思いながら、外部からリンクされていて今でも時々アクセスのあるnode(エントリ)から優先して、手作業で中身を移す。

四百いくつかあるエントリの50くらいは手作業で移行しただろうか。そこでめんどくさくて飽きる。どうせめったに参照されることもないし、ほっといてもいんじゃね?という思いに作業を中断し3日ほど放置。

まぁ、ちょっとずつでもやるかなぁと思い直し作業を再開しようと思ったら、なぜか過去のnodeも全て表示できているっぽい。

???

もっとも、データ自体はちゃんとスクリプト書いて必要なテーブルに必要な値は入れたはずなので、元々表示されないほうが不思議だったのだが、何故何もしてないのに表示できるようになったのだろう。Drupalのキャッシュかなぁ?

タグ

  • 雑記
  • Drupal

Operaの設定でおすすめしたいこと

By mattz, 2011/04/21

基本的にマウスジェスチャとかショートカットとかは、ほとんど変更しないで使うんですが、どうしても変えずにはいられない設定が少しだけあります。

マウスジェスチャ

マウスジェスチャに関しては1個だけ。標準の設定だと、GestureRight(右クリックしたままマウスを右に動かす)とFlipForward(左クリックを押したまま右 クリック。ロッカージェスチャーともいうんでしたっけ?)のアクションは、同じ「Forward | Fast forward, 0」になっています。これは、「(履歴を)進むけど、進むページがない場合はFast Forward、それも無理ならなにもしない」というものです。同じアクションが違うジェスチャに割り当ててあるのはもったいないので、どちらかの設定を逆にします。

Forward | Fast forward, 0

を

Fast forward, 0 | Forward

こうする。つまり「Fast Forward、できない場合は履歴を進む、それも無理ならなにもしない」です。僕の場合は、FlipForwardの方を変更しています。ひ とつの例としては、検索結果のページからどれかのページを開く場合。開いてみたページがピンと来ないので検索結果に戻り、検索結果の次のページに行きたい、とか言う場合に役に立ちます。最初から別タブで開いとけとかいうツッコミは無しの方向で。これに限らず、履歴上の「次」とサイト構成上の「次」が異なる場合は結構あるので。

ショートカット

F1の割り当ては標準ではヘルプページを開く、ですがヘルプページなど滅多に見ませんので、僕はこれを「go to nickname」に変更しています。で、よく使うブックマークレット(例えばlivedoor clipにclipするとか、livedoorReaderでSubscribeするとか、textareaをリザイズ可能にするとか)は全てニックネームをつけておいて、F1を押して出てくるダイアログに、そのニックネームを入力して使います。

「go to nickname」の標準の割り当てキーはShift+F2で、「go to page」のF2とセットになっててこれはこれでいいとは思うのですが、Shift+というのはやっぱりめんどくさいので、隣のF1を使うことにしました。

これの何がいいかというと、ブックマークのニックネームはOpera Linkで同期できるので、新しくセットアップしたOperaでも、F1の割り当てを1つだけ変更すればすぐにいつもの環境にできることです。この程度であればバックアップとか必要ない。

というか書いてて思いましたけど、おすすめのショートカット変更ではなくて、ブックマークレットにはニックネームをつけよう、とい う方が主題ですよね、どうみても。まぁいいか。

ちなみに以前はCtrl+Qあたりも変更してましたが、最近は「終了を確認する」を有効しているので、特に変更の必要を感じなくなりました。

タグ

  • Opera

Drupal 7に移行しました(途中だけど)

By mattz, 2011/04/19

暫定的ながら、ブログをDrupal 6からDrupal 7に移行しました。

コンテンツ(エントリ)の移行は最近の一部のみなので、古いエントリのパーマリンクがかなり死んでたり、内部リンクが色々ダメになってはいますが、追々でやります。

タグ

  • 雑記
  • Drupal

livedoor Readerの表示を左右逆にするuserCSS

By mattz, 2011/04/19

個人的に「右側にメニュー類」が好きなんですよね。Windowsのタスクバーも、Operaのタブバーも(今は使ってないけどパネル使うときはパネルも)全部右に配置してるし。
自己分析すると、日本語(以外の多くの言語もそうですが)はltr(左から右に書かれる)なので、多くの場合文章のかたまりはブロックの中の左側に寄ります。で、この時に左側がメニューだとごちゃごちゃしたものが目に入るのが気が散って嫌なんだと思います。

それなりに理由はあるんだと思うんですが、PC関係は左側にメニュー類が配置されているものが多いです。livedoor Readerもツリービュー?が左で、メインの表示領域が右という配置で、まぁ、特に何も考えずにこれまでずっと使ってきたんですが、昨夜急にそれが気になりだしてしまったのでuserCSSを書いてみました。

@charset 'utf-8';
/* 配置を逆に */
#left_container{
  float:right !important;
  width:250px !important;
  position:absolute !important;
  right:0 !important;
  left:auto !important;
}
#right_container{
  float:left !important;
  width:auto !important;
  position:absolute !important;
  right:250px !important;
  left:0 !important;
}
/* ツリービュー?のスクロールバーを右にする為に */
#subs_container{
  direction:ltr !important;
}

タグ

  • UserCSS
  • 雑記

D6to7

By mattz, 2011/04/14

このサイトのCMSをDrupal 6から新しいバージョンであるDrupal 7に移行しようと奮闘中です(というこのエントリは、構築中の7側にしか投稿しません)。

ついでなので、いまいち重くて使いづらかったさくらの共用MySQLをやめ、Drupalが7から新たに対応するようになった、sqliteにしちゃおうかと思っています、というかしました。DBの種類が変わるということで、DrupalのUpgrade機能に頼れませんので、データの移行のほとんどが半分手作業です。でまぁ、どんなことをやったかという辺りの覚え書きです。

sqliteに変えようと決めて、実際にその作業を今まさに行っているところではありますが、一応、MySQLのままのUpgradeにも挑戦してはいます。まぁ、うまくいかなくて諦めたんですけどね。あと、結構めんどくさい。

DrupalのUpgradeは、簡単にまとめるとモジュールやテーマなどの設定をいったん初期状態に戻し、更新を適用し、モジュールやテーマの設定を元に戻す、ってのが正しい手順です。が、セキュリティフィックスとかの(小数点第2位)のマイナーバージョンアップであれば、初期状態の戻すの手順は、まぁ省略しても大体うまく行くもので、実際、最初にセットアップしたのが6.11で、その後の6での最新版6.20まで、9回の更新を一度も飛ばさずに行いましたが、初期状態に戻すって、真面目にやってたの最初の2回くらいです(もちろん、個人ブログだからできることであって、商用サイトではそうはいかないでしょうけど)。

とはいえ6を7に、となるとさすがにそのやり方では無理なので、6で使ってるテーブルを、全て別名でコピーし、まずそちらに向けてDrupal6を構築し、そこでDrupalを7に更新、うまく行ったら、サーバ側の設定でそちらに向ける、なんてことを目論んで何度か試したのですが、全然うまくいきゃしねぇ。

そんな訳で、sqliteでDrupal 7をさくらインターネットのスタンダードプランで構築する場合のメモです。

大筋としては、「さくらインターネットサーバでDrupal 6.11を導入した」でやったことと同じですが、今回は./sites/default/settings.php ではなく、 /sites/[FQDN]/settings.phpに設定情報を書いています。この方があとで何かと便利なので。

あとsqliteですが、DrupalのDB設定は

   $databases['default']['default'] = array(
     'driver' => 'sqlite',
     'database' => '/path/to/databasefilename',
   );

こんな感じで記述する(もうちょっと細かく設定できるけどそこまでやるほどのものでもないので)のですが、databasefilenameは事前に作っておいたりする必要はありません。install.phpにアクセスした時点で勝手に作られます。ただし、次の画面に進む前に、databasefilenameに書き込み権限を付与しましょう。これが分からなくて何回もやり直しました。なおこのファイルは、念のため公開ディレクトリ(さくらなら~/www)の外に置きましょう。

モジュールとかテーマとかは、7に対応しているものとそうでないものが結構バラバラです。うちの場合、tagadelicとかtrackbackモジュール(とか自作のモジュール)が未対応なので、タグクラウドとかトラックバックとかカレンダー表示とか個別エントリ表示時の前/次リンクあたりが、今のところありません。

データ(各nodeの中身とか)の移行については多分別エントリで。

なんにせよ、こんな作業、仕事だったらやってらんね。

タグ

  • 雑記
  • Drupal

TwitterのパーマリンクURLにおけるスクリーンネームの意味のなさについて

By mattz, 2011/04/06

どういう事かというと

http://twitter.com/MATSUO_Tetsuji/statuses/55477380877262848

http://twitter.com/-/statuses/55477380877262848

http://twitter.com/ikedanob/statuses/55477380877262848

こういうことです。

なお、3つめの例に他意はございません。

以前、Twitterを火元に炎上した事案におきまして、某まとめブログが火元ツイートのURLを伏せたつもりで、http://twitter.com/*hoge/statuses/55477380877262848 みたいに伏字っぽくして紹介してたんだけど、アクセスしたら普通に見られんじゃん、ってことで、あぁここ(URL中のscreen name部分)の文字は何でもいいのね、ってのに気づいた。

そのまとめブログも知っててやったのかもしれないけどね。

タグ

  • 雑記
  • Twitter

ページ送り

  • 先頭ページ
  • 前ページ
  • …
  • Page 4
  • Page 5
  • Page 6
  • Page 7
  • Page 8
  • Page 9
  • Page 10
  • Page 11
  • Page 12
  • …
  • 次ページ
  • 最終ページ

最近のエントリー

  • 2025シーズン セ・パ12球団の総移動距離
  • 2023年度 パシフィック・リーグ主催試合ヒーローインタビューランキング
  • 2024シーズン セ・パ12球団の総移動距離
  • 当サイトのDrupalが10になりました
  • E-Vinoを買ってみました
  • 2023シーズン セ・パ12球団の総移動距離
  • 俺は野球殿堂博物館を甘く見ていた
  • 2022シーズン セ・パ12球団の総移動距離
  • Drupalを9にあげてみました
  • 2021シーズン セ・パ12球団の総移動距離
RSS feed