Runner in the High

技術のことをかくこころみ

Android Studio がクソ重い

ちょっとだけ軽くするためのTips的なエントリ

【環境】
Xubuntu 12.04 LTS 32-bit
Intel® Core™ i5 CPU M 560 @ 2.67GHz × 4
RAM 2G

1. Power Save Mode を使う

バックグラウンドでのコード分析とかそういうのを無効にしてちょっと軽くするオプション。
なにが無効になってるのかよくわからないが、結構効果アリ。
 
2. ウィンドウアニメーションを無効にする
Settings -> Appearance -> Window Option の項目から"Animate Windows"のチェックを外す。
いらないでしょこんなもん。

3. テーマを雰囲気軽そうなものにする
UbuntuならGTK+かな? Darculaのがイカしてるけど。
ていうかこれはあんまり効果ないかもしれない。

4. 必要のないプラグインを切る
GitとかSubversionとかターミナルから使うのであれば切れそう。
あとはMavenとかさ。使う人は切れないだろうけど。

オメガリズム(UPLIFT SPICE)のタブ譜を作りました

 
おそらくUPLIFT SPICEが発表している楽曲の中で一番知名度の高いであろう曲
オメガリズム(Omega Rhythm)のタブ譜を作りました。

イントロがクリアできればあとはもう全部簡単?な気がする。
ギターソロも落ち着いてやればきっと問題なし。
いわゆるストリングスキッピングを多用した曲ですな。

P.S. 2017/6/21
リンク切れになっていたのを修正しました

(Contents: Gt1, Gt2)
DOWNLOAD ptb format.

カノジョ(UPLIFT SPICE)のタブ譜作りました


サークルでの演奏のためにUPLIFT SPICEから割と有名?な「カノジョ」のタブ譜を作りました。
ギターから見ると全体的に難易度も高くないので一日あればコピーできるんじゃないでしょうかね。
リズムギターはボーカルと兼ねることを前提に作っていますので簡単です。
おかしなところがあったら自分で直してください。

P.S. 9/15
音源的に見るとこの曲にはギターが二本必要なのですが
ライヴ演奏用に一本にまとめたタブ譜も作りました。
もしかするとこっちのほうがしっくりくるかもしれません。

P.S. 2017/6/21
Dropboxの共有リンクの仕様変更の関係でリンク切れになっていたのを修正しました。

(Contents: Gt1, Gt2 - CD ver.)
DOWNLOAD ptb format.
(Contents: Gt1 - LIVE ver.)
DOWNLOAD ptb format.

Qtでメニューにファビコンを表示したいときのメモ

ファビコン!
 

タイトル通り。
メニューにかっこよくファビコンを表示したい!という人のためのメモ。

QIcon MainWindow::getFavicon(QString url)
{
QEventLoop wait;
QPixmap icon;
QImage img;
QUrl request;

request.setUrl(QString("http://favicon.hatena.ne.jp/?url=%1").arg(url));

netReq = new QNetworkRequest(request);
netRep = netMan->get(*netReq);
connect(netMan, SIGNAL(finished(QNetworkReply*)), &wait, SLOT(quit()));
wait.exec();

img = QImage::fromData(netRep->readAll(), "PNG");
icon = QPixmap::fromImage(img.convertToFormat(QImage::Format_RGB32));

return icon;
}

ファビコンを取得するAPIはてなの非公式のものを使う。

http://favicon.hatena.ne.jp/?url=[URL]

いかんせん非公式なものなのでいつ使えなくなるかはわからない。
でも取得の精度も高いしなくならないといいな。
ちなみに指定するURLにはスキームをちゃんと指定しておかないとまともに動かないので注意。

9、10行目あたりで急に出現するnetRepとかnetReqとかはほとんどQNetwork系の変数。
QNetworkRequestとかQNetworkReplyとか調べればたぶんすぐ分かる、はず。
取得の際にはQEventLoopを用いてこの関数内だけで完結させる。
(排他処理とかがちゃんとしてないのでそこら辺は直したほうがいいかも)

ファビコンのデータが取得できたら上のコードのようにQIconへ変換する。
QImage::convertToFormatにてFormatを指定する際には
QImage::Format_RGB32QImage::Format_Indexed8が指定できる。
取得されるデータは前者を使うと高品質、後者だと低品質なものになる。
他にも指定するともしかしたらなにかが起きるんだろうけどそれは未検証()

void MainWindow::setMenuIcon(void)
{
ui->actionGoogle->setIconVisibleInMenu(true);
ui->actionGoogle->setIcon(getFavicon("http://www.google.co.jp"));

ui->actionAmazon->setIconVisibleInMenu(true);
ui->actionAmazon->setIcon(getFavicon("http://www.amazon.co.jp"));

ui->actionBing->setIconVisibleInMenu(true);
ui->actionBing->setIcon(getFavicon("http://www.bing.com"));

ui->actionYahoo->setIconVisibleInMenu(true);
ui->actionYahoo->setIcon(getFavicon("http://www.yahoo.co.jp"));
}

で、まあこんな感じでひとつひとつメニューアイテムにアイコンをセットしていく。
actionGoogleとかactionBingとかはご覧の通りどれもQActionの変数。
このときにsetIconVisibleInMenuでちゃんと表示するように設定するのを忘れないこと。
以外にこの存在を知らなくてずっと悩んでる人がQtCentreには結構いたような気がする。

PNG形式のファイルを取得してQIconに変換するっていう処理だけで正直結構ハマった。
加えて、あんまりQIconとかQPixmapの変換に関する詳しい資料がネットにない。
ここらへんはまたいつか記事にしてまとめないといかんね。

今回のソースファイルは全てGitHubにて公開してあります
IzumiSy/qfavicon

QUrlQueryとQUrlのメモ

Qt4.xでビルドが通っていたソースコードがQt5.1でなぜかビルドエラーを吐くようになった。
調べてみると、Qt5からQUrlメンバ関数だったaddQueryItemが廃止され
変わりにQUrlQueryというクラスが導入されたとのこと。
ということでそれについてのメモ

QUrl target("http://www.example.com/ex.html");

target.addEncodedQueryItem("AAA", "1234");
target.addEncodedQueryItem("BBB", "5678");

上のコードにおいて変数targetには
 http://www.example.com/ex.html?AAA=1234&BBB=5678
といったようなURLが格納される。
デリミタはsetQueryDelimitersを用いて自由に変更できる。
また、QPairでQListコンテナを作りsetQueryItemsでいくつかのクエリを一気に追加することもできる。

このクエリの追加に関して、新たに導入されたのがQUrlQueryとかいうクラス
使い方は実はすごい簡単

QUrl target("http://www.example.com/ex.html");
QUrlQuery q;

q.addQueryItem("AAA", "1234");
q.addQueryItem("BBB", "5678");
target.setQuery(q);

このコードで、上と同じURLが変数targetに格納される。
可読性は上がるんだろうけど、コードそのものは長くなる気がする。
あとはhasQueryItemとか、いくつかのちょっとしたメンバ関数が増えたくらいか。

参考: How do you port QUrl addQueryItem to Qt5's QUrlQuery? - Stack Overflow

そりゃ君がすきだから(RADWIMPS)のTab譜作りました


RADWIMPSのアルバム「RADWIMPS2 発展途上」に収録されている「そりゃ君がすきだから」のtab譜を作りました。
ボーカルの転調パートのハモりが死ぬほど高いですね・・・
ギターソロは死ぬほど簡単なので誰でもできそうです

P.S 2017/6/21
リンク切れになっていたのを修正しました

(Contents: Vocal, Gt1)
DOWNLOAD ptb format.

libnotifyをQtで使う

今日はUbuntuユーザーにはお馴染みのNotify(?)をQtで表示してみようかと思います。
(この記事で作ったプロジェクトは IzumiSy/libnotify-on-Qtです)

Ubuntuユーザー馴染みのNotifyメッセージ
 

知っている方も多いと思いますが、QtにはQSystemTrayIconというクラスがあります。
一応これを使ってもメッセージのバルーンを表示することは出来るのですが、どうも環境に依存しないタイプのポップアップしか出せないらしく、Ubuntuにおいても下のように吹き出し型のものになってしまいます。

QSystemTrayIconをWindowsで用いた例。
Ubuntuにおいても同様のスタイルで表示される。

ということで、上のほうのカッコいいやつ(Ubuntu独自のバルーン)をさっそくQtで表示させていきます。

STEP1. libnotify-devをインストールする

実は意外と多い最初のトラブルがこれと関連している。
導入されないとnotify.hが見つからなくてイライラする

 
ソースコードのビルドの際にglib.hが見つからないのでこれも導入する

STEP3. pkg-configのサポート

# To support for pkg-config
CONFIG += link_pkgconfig
PKGCONFIG += libnotify
これをproファイルのどこか適当に追加しておく

ここまでで一応必要な材料はすべて揃ったのだが、このままビルドすると、Qtによって定義されている signals という定数と、Gtkによって定義される変数の名前との間に定義衝突が発生し、ビルドエラーを引き起こす。ということで、下記の情報を参考に、然るべき場所にて signals を定義破棄する必要がある

How to prevent symbol collisions between GTK+ and Qt - Nokia Developer

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <qmainwindow>

// To prevent prevent symbol collisions between GTK+ and Qt
#undef signals

#include <libnotify⁄notify.h>

namespace Ui {
class MainWindow;
}
libnotify/notify.h をインクルードし、適切な箇所に表示に必要なコードを書く。
関数について詳しくは検索のこと。
void MainWindow::on_pushButton_clicked()
{
notify_init("Hello World");
NotifyNotification *hello =
notify_notification_new("Hello world",
"This is an example notification.",
"dialog-information");
notify_notification_show(hello, NULL);
}

やったね!表示されたよ!

Starting(Ne;on ver)のTab譜作りました

本家

MIDI


Kraster の Happily N'Ever Before に収録されている Starting(Ne;on ver) のタブ譜を作りました。
個人的には結構好きな曲なんですがYoutubeだとそんなに再生回数は伸びてませんね。
まあいずれにせよ前から楽譜に起こしたいと思っていた曲の一つです。

一応PDFファイルでのダウンロードも用意しておきましたが、どうもPowerTabでPDFの楽譜を出力させると「8」が線と重なって「0」のようにみえてしまうようなので、注意してください。

P.S. 2017/6/21
リンク切れになっていたのを修正しました

(Contents: Vocal, Gt1, Gt2, Bass)
DOWNLOAD ptb format.
DOWNLOAD pdf format.