2021年12月12日日曜日

iPadのBluetoothキーボードでかな入力をつらぬく方法(かなチートシート)

私は、バリバリのかな入力派である。
というかローマ字入力がうまくできないのである。

先日iPadを入手したので、持っていたBluetoothキーボード(Logicool K480)を接続したのだが、「壊れて出ない文字がある」ならぬ「壊れてなくても出ない文字がある」状態だった。 
具体的にいうと「ろ」を押しても「ろ」が出力されず無反応だったり、「む」を押しても「へ」が出力される。

 どういうことかと言うとiPadでは、BluetoothキーボードをUS配列と認識するとのこと。(参考サイト)
「まじか」
これは、どうにもならんらしく、持っているK480のキートップにも

⇦のように、灰色の丸の中にわざわざiPadに接続した場合は、この文字が入力されますという表示がある。
(写真は叩くと拡大します。)

しかしだ!!
かなについては、どのキーを押すとどの文字が出るという表示はないのだ!

かな入力派は少数民族なため、迫害されているのかもしれないが、そこまでキートップに表示するとごちゃごちゃしすぎて、なんのこっちゃわからんようになるのも確かなので仕方ない。

そもそも、全かなを入力できるかもわからなかったが、テキトーにポチポチ押していたらどうやら全部入力できたので、ここに対応表を載せておく。

自分のキーボードは、Logicool K480だが、もしかすると他のキーボードでもいけるかもしれないので、ダメもとでチャレンジしてみるといいかもしれない。
出したい文字 押すキー
へ む
む ゜(半濁点)
゜(半濁点) へ
ー(伸ばし棒) Shift+゜(半濁点)
ろ Shift+け
「 Shift+へ
」 Shift+゛(濁点)
最初はゲンナリしたが、使っていると案外すぐに慣れて問題なくやっている。
なお、!や?は、発見できなかったので漢字変換ユーザー辞書に追加してしのぐことにした。 例: 読み「め」⇨変換「?」とか

2018年7月30日月曜日

bloggerで特定ラベルの投稿一覧を出す version 2

自分の以前のブログ記事「bloggerで特定ラベルの投稿一覧を出す」で方法を紹介して、このブログでもそれを使ってました。
それを見て、私のscriptを使ってくださる方もいらっしゃるようで、あるヘビーなブロガーの方に、ひとつのラベルに記事がたくさんあると全部表示されない、と教えていただいた。
調べてみると、150本以上記事のあるラベルを表示させようとすると、それ以上表示できない様子。
たくさん記事をアップしないと発見できない現象で、うちのブログは、記事数が少ないので発見できていなかった。
blogger APIでとれるfeedの最大数が原因だったんですけど、ただ、もともと最大150だったわけではなく、元々500だったのが2015年の末頃に減らされたらしいとのこと。

今見たら、私の元記事は、2012年でした。結構前なのね・・・
というわけで、いい機会なので同一ラベル記事150本超の場合にも対応して、version 2にしたので、記事をアップしました。

使い方は、Blogger の管理画面「ページ」から新しいページを作りhtml編集モードにして

<div id="entry_list_by_label"><script src="https://cdn.rawgit.com/choniwaniwani/wasure/92f7a895/toc/bloggerFeeds.2.js"></script>
<script>load_entry_list("ラベル名称");</script></div>
を貼り付けて、ラベル名称を書き換えるだけです。
こんな感じの同一ラベル記事をまとめたページを作成します。

ラベル名称は、そのまんまラベルの名前です。日本語でもOKでした。
で、このタグ貼付部分より前や後に普通に文章入れてもOKです。

タグ内部に入れてもいいので、レイアウトは多少カスタマイズできます。リンクのaタグには'linkHref'という名前の未使用classも入っているので、cssでカスタマイズも可。


以下、javascriptのコードに興味ある方向けの内容です。

なお、codeは、githubにおいてありますので、javascriptいじれる方は、勝手にコピって改造して使ってもOKです。
コード内で、feedを呼ぶところは、これなんだろうという感じですが、詳しいパラメータの解説は、こちらにあります。
ただし、この中には、bloggerでは使えないパラメータもあります。(やってみないとわからない。)

あと、今回bloggerのhtml編集画面の変な仕様というかバグを見つけたのですが、bloggerは、全角の記号をすべて勝手にescapeしてしまうようです。 それなので、たとえば、javascriptの文字列の中でも・(中黒)があると&#12539;になってしまいます。
全角なんだからほっといてほしいですほんとに。それで、最初ラベル名に中黒が入っていると動かないという謎の現象が発生していました。

2018年2月8日木曜日

cygwinのアップデートがやたら遅くて時間がかかる。(解決)

タイトルのとおりだが、cygwinのアップデートがやたら遅くて完璧に頭に来てた。
何時間も待っているが、autorebaseとやらがいつになっても終わらない。
インストールウィンドウを見ると、0p_000_autorebase.dash と表示されたまま固まっている。HDDは、ガリガリ止まらない。

ぐぐってみると、この問題で、怒ってるっぽい人は結構いるようだが 、我慢するかなんか難しい対応をしてるひととかいたけど、中に
原因はRapportというウィルス対策ソフトについてくるTrusteer エンドポイント保護というソフトが悪さをしていたようです。Rapportは三菱UFJ銀行のお勧めで無料ウィルス対策ソフトとしてインストールしたのですが、それが災いしていたようです。やはりタダより高いものは無いですね。
(引用元:http://soukitaisyoku-kigyou.blog.so-net.ne.jp/2016-11-08)
というのがあり、「あっ」と思い、norton360の「設定->ウイルス対策->自動保護」をオフにしたら今までのがウソのようにスイスイ進むようになった。

タダどころか天下のノートン先生でもこれでした。ちょっと遅くなる程度でなく、何十倍もじかんがかかるとかなんだかなぁ。


Ubuntu16.04のカーネルアップデート(to 4.13)でNVidia driverが認識しなくなった(解決)

Ubuntu16.04で、
sudo apt dist-upgrade
したら、 NVidia driverを認識しなくなった。
nvidia-smi を実行しても、
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. 
という、連れない返事・・・

driverは、aptで入れていて、パッケージ名は、「nvidia-387」
どうやら、ソイツが、kernel4.13に対応していないらしい。

↑のリンク記事だと、kernel4.10に戻して動かしていたが、
sudo apt install nvidia-
まで、打ち込んだところでtabキーを押してみると、候補の中に「nvidia-390」 がいたので、
sudo apt install "nvidia-*390*"
で、入れてみた。自動で387もアンインストールされるようだ。かしこいなぁ。
その後、再起動して無事認識しました。

2017年11月15日水曜日

Ubuntu16でnouveauドライバをアンインストールする。

Ubuntu16のマシンからnouveauドライバをアンインストールしたときの記録です。
 Ubuntu16のマシンにNVidiaのグラボを挿してNVidiaのドライバを入れたのですが、少し動作が不安定なので、nouveauドライバを抜いて様子を見ようとしたのが動機です。
なお作業は、sshでコンソールログインして行っいました。
 
NVidiaのドライバを入れた後に、lsmodをすると、
mxm_wmi                16384  1 nouveau
video                  40960  1 nouveau
i2c_algo_bit           16384  1 nouveau
ttm                    98304  1 nouveau
drm_kms_helper        155648  2 nouveau,nvidia_drm
な感じで、 nouveauドライバが入りまくっている。こいつらを消したい。
cudaは動くので、NVidiaのドライバが入っていることは確実。

まず、/etc/modprobe.d/blacklist-nouveau.conf を作成し中身を
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off 
としました。次に、dpkg -l | grep nouveau で見つけたあやしいやつを削除
sudo apt purge xserver-xorg-video-nouveau
 その後、
update-initramfs -u
これで再起動したら、lsmodしても綺麗サッパリnouveauが見えなくなりました。

2017年11月10日金曜日

ラズパイ3&バスパワースピーカーのノイズ退治(3.5mmジャック使用)

Raspberry pi3とバスパワースピーカーと3.5mmオーディオジャックの組み合わせで「強烈な」バックグラウンドノイズがのっていたのを解決した一例としてアップしておきます。

高音質にする、とかいう話ではなく、連続的な耐えられないノイズが発生していたのでそれを取った話です。

3.5mmオーディオジャック関連のノイズでは、ネットで
いろいろあったけど、ググっても見ないパターンでハマりました。

自分の場合↓の図のように接続していました。
これで、「ズビズビズビ、ピキーピピ、ズズビビ」のような、いかれたノイズが鳴り続けていました。どうやらこれは、電源系のノイズだったらしく次のようにつなぎ替えたらノイズが治まりました。
 バスパワースピーカーの電源を、別のACアダプタから取るのがポイントで、「ラズパイから電源を取らなきゃいんじゃね」と2個口以上あるUSBポートから、ラズパイとスピーカーの電源をとってしまうとノイズは消えませんでした。
 自分の場合は、ACアダプタ2つだとかさばるので、コイツを使って省スペースにしました。
この場合、一つの機器からラズパイとスピーカーの電源をとっていますが、片方がUSBポートで、もう片方が100Vに別のACアダプタをつないだものなのでOKでした。
つまり、ラズパイのオーディオジャックととバスパワーのスピーカーを使う場合、両方の機器の電源が一つの5Vの系にあるとノイズが発生するようです。

2017年11月9日木曜日

javascriptで簡単なカリー化関数を作った(ES6版)

最近、scalaからjavascriptに不本意ながら引っ越してきました。初めは嫌々ながらだったんですけど、ES6になってめっちゃ書きやすくなってるんですね。知りませんでした。
そんなわけで今回は、カリー化の仕組みがjavascriptの標準になさそうだったので、簡単にカリー化したいと思って調べてみると。 結構良さそうなのが、ありました。(Qiita: JavaScript でカリー化)
そのまま使っても良かったんですけど、僕はjavascriptでは、できるだけthisを使わないようにしているので、リンクの記事のcontextがいらないのと、その場合の空の括弧()がいらないので、上の記事のコードを参考に改造しました。
あと、他の言語から来ると、関数宣言の括弧の中にない引数をargumentsを使って取るのは気持ち悪いので、ES6の可変長引数を使ってこんな風にしてみました。
Function.prototype.curry = function (...args) {
  let func = this;
  function partial(...args) {
    return (args.length >= func.length)
      ? func.apply(null, args)
      : function(...ret_args) {
          return partial.apply(null, [...args, ...ret_args]);
        }
  }
  return partial.apply(this, args);
};
とりあえず、こんな感じにして動作確認
function sum1(a, b, c) {
  return a + b + c;
}
let sum2 = ((a, b, c) => a + b + c).curry()

console.log(sum1.curry(4, 5, 6))  // <- 6
console.log(sum1.curry(4)(5)(6))  // <- 15
console.log(sum2(10)(11)(12))  // <- 33
これでいいんだけど、あまりビルトインのprototypeを勝手に拡張すんな!としつこくMDN(ココやココ)に書いてあるので、僕は潔癖でないのでそういうの嫌なんだけど、まあ後でcurryメソッドとか正式に追加されたらそれはそれで嫌なので、ただの関数版も作ってみた。
scalaのimplicit conversionが懐かしいぜ・・・
function curry(fn) {
  return function partial(...args) {
    return (args.length >= fn.length)
      ? fn.apply(null, args)
      : function(...ret_args) {
          return partial.apply(null, [...args, ...ret_args]);
        }
  }
};
こっちの使い方はこんな感じ
let sum3 = curry((a, b, c) => a + b + c)

// sum1は、上のを使いまわし
console.log(curry(sum1)(4, 5)(6))  // <- 15
console.log(curry(sum1)(1)(2)(3))  // <- 6
console.log(sum3(20)(21)(22))  // <- 63
console.log(sum3(2)(4, 6))  // <- 12
まあ、難しいこと考えなければこれで良いような気がします。
関数版は、憎たらしいthisも使わないですんでるし。
昔、10年くらい前には、
{javascriptって何でもfunctionで出来てて意味わかんねー} 
とかって思ってたんすけど、その基本設計と最近のES5,ES6と続く言語の拡張により俄然、モダンな書き方ができる言語に変化してきてるんですね。