2022-08-05

brew doctor のエラー

$brew doctor を実行するとエラーになって、

 /usr/local/Homebrew/Library/Homebrew/os/mac/version.rb:32:in `block in from_symbol': unknown or unsupported macOS version: :dunno (MacOSVersionError)

 みたいなのが表示される。これで困ったら、brew update-reset をすればいいらしい。

2016-05-11

iOSのSafariとUIWebViewでspeechSynthesis.getVoices()が空っぽ

JavaScriptで、speechSynthesis.getVoices() とやれば、テキストを音声読み上げするときに設定するvoiceのリストが返ってくるはずなんだけど、iOSだと空っぽのemptyリストが返ってきてしまう。実際には、音声読み上げ可能なはずなのに、空っぽ。iOSのバージョン9.2でしかチェックしていない。

さあ困った。どうする?

予想としては、Objective-Cのコードで  [AVSpeechSynthesisVoice speechVoices]; とやったときに取得できるvoiceは利用可能なのでないかと思う。

実際に試してみる。やっぱりそうみたい。利用可能なのはこんな感じ。(ここから転載

LocaleLanguage/Country
ar-SAArabic (Saudi Arabia)
en-ZAEnglish (South Africa)
th-THThai (Thailand)
nl-BEDutch (Belgium)
en-AUEnglish (Australia)
de-DEGerman (Germany)
en-USEnglish (United States)
pt-BRPortuguese (Brazil)
pl-PLPolish (Poland)
en-IEEnglish (Ireland)
el-GRGreek (Greece)
id-IDIndonesian (Indonesia)
sv-SESwedish (Sweden)
tr-TRTurkish (Turkey)
pt-PTPortuguese (Portugal)
ja-JPJapanese (Japan)
ko-KRKorean (Korea)
hu-HUHungarian (Hungary)
cs-CZCzech (Czech Republic)
da-DKDanish (Denmark)
es-MXSpanish (Mexico)
fr-CAFrench (Canada)
nl-NLDutch (Netherlands)
fi-FIFinnish (Finland)
es-ESSpanish (Spain)
it-ITItalian (Italy)
ro-RORomanian (Romania)
no-NONorwegian(Norway)
zh-HKChinese (Hong Kong)
zh-TWChinese (Taiwan)
sk-SKSlovak (Slovakia)
zh-CNChinese (China)
ru-RURussian (Russia)
en-GBEnglish (United Kingdom)
fr-FRFrench (France)
hi-INHindi (India)

var msg = new SpeechSynthesisUtterance("てきすと");
msg.lang = "ja-JP";
speechSynthesis.speak(msg);

のように地域コードつきでlangを指定する。言語コードだけ指定して、msg.lang = "ja"; とやるのではダメみたい。

2016-05-04

HTML5のバリデーションチェックを使うのやめた

翻訳コンニャクで、HTML5のバリデーション(checkValidityなど)を利用してみたのだが、ブラウザごとの挙動にばらつきがありすぎて使いにくい。これから書き直して、サーバーサイドのチェックだけにする予定。

特に、Safariの挙動が制御しにくい。checkValidityは動くし、validationMessageも設定されているのだが、それにもかかわらずポップアップでエラー表示が行われない。Safariのためにゴチャゴチャ処理を書くとわけわからないことになりそう。

Safariは、executeCommandも動かないし、最近のIEよりも扱いにくい。

2016-03-09

Gitでハードリンクしたファイルを管理するのはやめたほうがいい

たぶん、checkoutしたときなどにファイルの上書きが起こって、そこでリンクが切れてしまうということなのだろう。いつの間にかリンクが切れてた。

シンボリックリンクだとメタ情報がコミットされるだけだし、ハードリンクだといつの間にかリンクが切れる。やっぱり、リンクとgitを組み合わせて使うのは良くなさそう。

サブモジュールとかいう機能を使うのと面倒くさくなりそうだし、どうしようかなー。

2016-02-25

django.db.utils.ProgrammingError: relation "auth_group" does not exist

Djangoで、manage.py test をしたら、
django.db.utils.ProgrammingError: relation "auth_group" does not exist
とかいうエラーになって困った。開発環境のmacの上では起こらないんだけど、Ubuntu Server14.04で起こる。データベースはPostgreSQL。

何だろうっていろいろ調べたけど、ここが答えをくれた。 次のように言ってる人がいた。
Did you run python manage.py makemigrations appname first, where "appname" is the name of the app containing your custom user model inheriting from AbstractUser?
AbstractUserを定義しているappnameを指定して、makemigrationsをしたら解決。モデルがちゃんとつくられていなかったみたい。そういえば、DBをflushした後、これを実行するの忘れてたかも。

migrationのテーブルに不完全なデータしかない状態で、テスト用のテーブルを作成しようとしてエラーになっていたということだろうか。

外付けUSBメモリをexFATでフォーマットしたらタイムカプセルできなかった

MacBookのディスクに空きがなくなって困ったので外付けのUSBメモリを買った。親指の爪くらいの小ささで、出っ張らないやつを挿しっぱなしにする計画。

で、外付けUSBのフォーマットについてなんだけど、USBメモリはデフォルトではFATで、これだと大きいサイズのファイルを扱えないかった。exFATにフォーマットしたら、Windowsパソコンともデータを共有できていいんじゃないかと思った。いまはVirtualBoxの中にしかWindows入ってないけど、そのうちWindowsのパソコンも買うかもしれないから、そのときに便利なようにという配慮。

しかし、exFATにはタイムカプセルでバックアップをとれないという落とし穴があった。バックアップはとっておきたい。小さなUSBメモリは嬉しいんだけど、なんかそのうち壊れたりするんじゃないだろうかって不安になる。

ということで、データを一時的に退避させて「Mac OS 拡張(ジャーナリング)」ってやつにフォーマットしなおすことにした。「Mac OS 拡張(大文字/小文字を区別、ジャーナリング)」というのもあるけど、大文字/小文字は区別しないのが普通みたい。実際のところ、Max OSXでは、大文字/小文字が異なるだけで同じ名前のファイルを作成できない。というわけで、大文字/小文字を区別しない方の「Mac OS 拡張(ジャーナリング)」にフォーマットするのが無難な選択のようだ。

もう再フォーマットはしたくない。けど、USB3.0はなかなか速い。

2016-02-17

DjangoでModelFormのカスタマイズ

DjangoでModelFormを使っていて、FormFieldを追加するとき。Modelのinstanceとの値のやりとりをどうしようか迷う。どうやら、初期値はModelFormの__init__()でモデルからフォームに渡してやり、フォームからモデルへの値の変更はModelFormの_post_save()でやるのが良さそう。

理解可能なように説明すると面倒くさいからできそうにない。

class ArticleForm(forms.ModelForm):
 
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.fields["text"].initial = self.instance.get_nice_text()
    
    def _post_clean(self):
        super()._post_clean()
        self.instance.set_nice_text(self.cleaned_data["text"])


という感じだといいのではないか。