投稿

javascriptで指定色を等分したグラデーションの自動作成

分かりづらいタイトルなので実際のものを こんな感じ 実際のコードは以下 *枠線は除いてある <div style="background: linear-gradient(to right , pink 0 , pink 33.32% , palegreen 33.33% , palegreen 66.65% , lightskyblue 66.66% , lightskyblue 100%);"> 指定色 [ pink, palegreen, lightskyblue ] で等分したグラデーションになっている これをjavascriptで自動作成するには function gradientGen(colors) {     var texts = ['to right'];     var ratio = 100 / colors.length;     for (var i = 0; i < colors.length; i++) {         if (i != 0) {             texts.push(colors[i-1] + ' ' + ((ratio * i)-0.01) + '%');         }         texts.push(colors[i] + ' ' + ratio * i + '%');     }     texts.push(colors[colors.length-1] + ' 100%')     return 'linear-gradient(' + texts.join(',') + ')'; } var colorList = ['pink','palegreen','lightsk...

Qtでlibmpvでの動画再生

mpvはWindows/MacOS/Linux対応のメディアプレイヤーである SMPlayerなどのバックエンドとして使われるが単体でも再生が可能 そのmpvにはlibmpvというAPIが付属しておりアプリケーション内で再生や制御を行える 今回はこれを使用し動画再生アプリを作成する まずは.proに以下を追加 既にKeyがある場合はそれに追加で QT_CONFIG -= no-pkg-config CONFIG += link_pkgconfig PKGCONFIG += mpv x11 次にmain.cppのQApplicationの宣言の下辺りに以下を追加 setlocale(LC_NUMERIC, "C"); あとはクラスに書いていくのだが mpvで動画を再生するのには再生先(QWidget)が必要となる なのでQWidgetを継承したカスタムクラスの"Player"を作成し、まとめて書いてしまうことにする QtCreator(QtDesigner)で配置した場合はPlayerへの格上げを忘れないように ヘッダには以下のincludeを追加 #include <mpv/client.h> #include <mpv/render.h> #include <mpv/qthelper.hpp> あわせてprivateに以下を追加 mpv_handle *mpvHandle = nullptr; ソースのincludeの下に以下を static void wakeup(void *ctx) {     Player *player = (Player *)ctx;     emit player->mpv_events(); } そして以下を追加しrun_mpv()はPlayerの初期化の際に読み込む(コメントアウト部分は後述) void Player::run_mpv() {     mpvHandle = mpv_create();     if (!mpvHandle)     ...

Firefoxで改造アドオンのインストール失敗

無駄な時間を過ごしたので忘れないように書き留めておく とあるアドオンの改造を行ったがインストールが出来ない 基本的には公式からアドオンのxpiをダウンロードしてからzipとして解凍し 内部のファイルを改変、再びzipに圧縮してからxpiに戻してインストール が手順なのだが問題発生 「このアドオンは壊れているため、インストールできませんでした」 と表示されてしまう 英語表記では"this add-on could not be installed because it appears to be corrupt" アドオンのデバッグから一時的なアドオンとして読み込むと問題なくインストールできる これでよくあるパターンは圧縮時のミスで、解凍時のフォルダごと圧縮してしまうとアウト アーカイバで開いた時にmanifest.jsonが最初に表示されればオーケー これを確認したが問題はなかった 次に考えたのはファイル改変時のミスで、エンコードや内容を見直した UTF-8で出力されておりタブ文字をスペースに直したり、別のエディタを入れて保存してみたりもした それでも上記のエラーでインストールが出来ない 署名がないアドオンをインストールするにはFirefox Developer Editionでないといけないらしいが エラー内容からして違うのではないかと思いつつインストール どちらにしろ入れる必要はあったが、結局同じエラー 他にもzip圧縮率を変えてみたりして睡眠時間を削り 何時間も格闘した後にMDNの manifest.jsonのページ を見ていると   "applications": {     "gecko": {       "id": "addon@example.com",       "strict_min_version": "42.0"     }   }, この項目を見て思い出した 前にWebExtensionのアドオンを作った時にも書いたと   Firefoxでは認証されていないアドオンは「id」を指定...

AMDグラフィックボードのファンを自動制御する

夏が近づくと出てくるトラブルが PCの温度上昇 である 基本的に温度が上昇してもCPUやGPUがクロックを下げることで、温度上昇を抑制してくれるが それは性能に制限がかかるということであり、そもそも温度上昇は故障の原因なので是非とも回避したい ファン制御アプリは有名な fancontrol が存在するが、知る限りでは制御時に参照する温度は1つで しかも個別に制御することが出来ない なのでCPU温度はfancontrolに任せておき、グラフィックボードのファン制御は別のアプリで行うことにした 使用するアプリケーションは amdgpu-fan AURからインストールが出来る インストール(もしくは起動)すると /etc/amdgpu-fan.yml に設定ファイルが作成されるので、これを管理者権限で編集する 開くと speed_matrix: - [0, 0] - [40, 30] - [60, 50] - [80, 100] とあるが、カンマで区切られた左側が温度、右側がファン速度である この場合40度では30%のファン速度ということになる この数字の組は増やすこともできるので、より細かく制御することもできる 保存し終えたあとはサービスが自動起動になっていることを確認し、ベンチマークなどで温度上昇が抑制されるかを試してみればいい 確認  sudo systemctl status amdgpu-fan 自動起動の有効化  sudo systemctl enable amdgpu-fan WebGLによるGPUストレステスト向けサイト   http://www.fishgl.com/

Qtで作るAndroidアプリケーション

AndroidでQtアプリケーションを実行するまで でアプリケーションの実行ができるようになったので、実際にアプリケーションを作る際のポイントを記す 必要ないこともあるかと思うが、今現在動いているものである プロジェクトの作成  前ので書いたとおりプロジェクトの作成時に対象端末用のAndroidキットを指定する デザイナでの配置  Android上でデザインが変わることもあるが、ウィジェットは同じ様に配置できる  ただしレイアウト上に置かないと配置が崩れるので注意 AndroidManifest.xmlの配置  一旦実行した後にプロジェクトフォルダ内の android-build フォルダを開き AndroidManifest.xml をコピーしてくる プロジェクトフォルダに android-sources フォルダを作成しコピーした上記ファイルを貼り付ける Qtに戻りサイドバーのプロジェクトから「既存のファイルを追加」を選択し android-sources フォルダ内の AndroidManifest.xml を指定する アイコンの設定  上記で追加したAndroidManifest.xmlをダブルクリックでAndroid Manifestエディタで開かれる  「アプリケーションアイコン」で大中小のアイコンを設定できる Javaクラスを読み込む  Qtのコードのみで出来る部分もあるが、Androidの設定に関わることなど出来ないことも多い  そのためQtからJavaのコードを実行する仕組みが用意されている  AndroidManifest.xmlをダブルクリックでAndroid Manifestエディタを開きパッケージ名を確認  以下を参考にフォルダを作成 パッケージ名  org.qtproject.example.TestApp 作成するフォルダ  プロジェクトフォルダ/android-sources/src/org/qtproject/example/TestApp このフォルダ内に.javaファイルを作成 内容はアプリケーションによるが一応枠組みのサンプルを記載 サンプ...

AndroidでQtアプリケーションを実行するまで

イメージ
QtはAndroidアプリの作成に対応しており、PC用のアプリケーションと同じように作ることが出来る やりたいことによってはJavaのコードを書く必要もあるが 基本的なことは出来るので、普段Qtを使っている人にはいいだろう でもJavaが使えるのであればJavaで書いたほうがよっぽど楽で良い JDKのインストール  既にインストールされているかもしれないが、今現在入ってるものは   jdk8-openjdk  8   jre8-openjdk  8 Android Studioのインストール  これの設定画面にある  「Android SDK」->「SDK Platform」で 対象バージョンのSDKを入れる  別タブの「SDK Tools」で   Android SDK Build-Tools   Android SDK Platform-Tools   Android SDK Tools   NDK  の4つを入れる Qtのインストール  ManjaroにもQtとQtCreatorのパッケージは存在するが、それでは動かない  Android用のファイルが入っていないためにキットが検出されないのだ  そこで、 Qt公式 からインストーラのqt-opensource-linux-x64-5.12.2.runをダウンロードする  使用したのは上記のオフラインインストーラだが、 ここから オンラインインストーラをダウンロードしても問題ないかと思う ※5.12を入れたところ表面上は問題なかったが、実行時にQPushButtonの長押しなどで QMetaObject::invokeMethod: No such method QPushButton::inputMethodQuery(Qt::InputMethodQuery,QVariant) と出てしまい長押し処理が中断されてしまう現象が発生した 5.9では問題ないので、この問題が発生する場合は 最下の AndroidでQtアプリケーションを実行する方法Old を参照すること...

マジックSysRqキー(Magic SysRq key)の有効化と永続化

近頃、公式から許可をもらいスタンドアロン化した S.T.A.L.K.E.R. Anomaly というStalkerのModで遊んでいるが このゲームをやっていると急に止まることがある ゲームが落ちたりフリーズするだけではなく、PC自体がフリーズしてしまうのだ Alt+F4やAlt+Tabも効かないので、ゲームを閉じることもウィンドウを切り替えることも出来ない ゲームが悪いのか、Wineが悪いのか、中古のグラボが悪いのかはわからないが、突然なんの操作もできなくなるのは困る 経験則からファイルの保存を先延ばしにしたりしないし 最近のブラウザは異常終了後にタブの復元を行ってくれるのでこれらは問題ない しかし何より怖いのはSSDやHDDやUSBメモリの破損である 果たしてSSDが強制終了に強いのか弱いのかは知らないが、良い影響を及ぼさないのは確実だろう 実際に強制終了後の起動時にはfsckのログが多数流れるので心臓にもよろしくない そこで出来るだけ安全に再起動させるのが、このマジックSysRqキーである これはカーネルレベルでコマンドを実行させることで ウィンドウマネージャやX11がフリーズしても特定の操作ができるようになっている・・・・らしい この時使うキーがSysRqなのでマジックSysRqキーと呼ぶようだ 実行方法は以下のキーを一定時間を開け、上から順番に押していく  基本的にSysRqキーはAltとPrintScreenの組み合わせなので書いているが違う場合もあるらしい キー 意味 説明  Alt + PrintScreen + R   unRaw  キーボードの制御を取り戻す オマジナイ?  Alt + PrintScreen + E   tErminate  すべてのプロセスに正常終了命令を送る  Alt + PrintScreen + I   kIll  すべてのプロセスに 強制 終了命令を送る  Alt + PrintScreen + S   Sync  書き込み予定のキャッシュをすべて書き込む ...