とらきす の ぐだログ

とらきすのぐだログ

ぐだぐだとなんかするブログ。

個人的メモ: ゆるく覚えるロシア語その1 〜 ロシア文字編

2019/05/07 - いくつかの例外規則と"Катюша"の歌詞を追加しました
2019/04/14 - 記号音(硬音記号、軟音記号)の項目が抜けていたので追記しました


ふとした事からロシア語を勉強し始めたので、そのメモ的なもの。

学び始めた理由は、わりとマジでなんとなくです。もともとロシア文化にわずかながら興味があった… というのもありますが、その程度のやる気で始めたものです。

私自身は、特別 外国語が得意という訳ではないです。むしろ、学校での英語の成績は最底辺を争っているレベルですので、苦手と言っても良いでしょう。
そんな私がやり遂げられるのでしょうか。今から不安になってきました…

この記事の続きは… いきなりで申し訳ないのですが、4月の応用情報技術者試験に向けて勉強をしなければならないので、それまではお預けです。 しばしお待ちを。

はじめに断っておきますが、ガチでロシア語覚えたいって人は、ブラウザバックする事を勧めます。
初心者がとっつきやすいように発音をかなり日本語に寄せてある為、あまり正確ではありません(ただ、まるきり通じない事はないと思います)。
タイトルにもある通り、「なんとなくロシア語が読めたりしたら格好いいだろうなー」なんてゆるーいモチベーションの方向けに書いたものですので、それで十分だと思える方はどうぞ。

※ カタカナでは表せない細かいニュアンスの違いがある為です。このシリーズでも、なるべく早い段階でカナ表記はやめるつもりです。
より高みを目指したい方は、発音記号や口蓋化などについて調べると良いです。


目次


まずはロシア文字を覚えよう

日本語を学ぶときには平仮名から覚え始めるのと同じで、始めはロシア文字(ロシア語アルファベット)を覚えよう、と。

ロシア文字さえ覚えてしまえば、ロシア語を朧気ながらも読み上げるくらいの事はできるようになります。 これがもし日本語だったら、漢字の読みまで覚えなきゃいけない訳で。それに比べたらだいぶ楽ちんです。

それに、取っ掛かりは確かに大変ですが、この章をマスターしてしまえば、以降は英語よりも覚えるのは簡単だと思います。
英語などの例外規則がかなり多い言語に比べると、ロシア語はいくらか素直で、日本人に優しいと言われています。

※ 例えば、母音が2つ連続した場合、英語ではその間に別の子音が挿入されたりする事が多いです(例: "door" → "dɔwə")。
ロシア語ではそのような例外はなく、きっちりと1音ずつ発音します。


ロシア文字一覧

ロシア文字の一覧です。全部で33文字
英語のアルファベット(発音が違ったりはしますが)に加え、スラブ(ヨーロッパ中東域)語の表記に用いられるキリル文字がいくつか含まれます。

ロシア文字 А а Б б В в Г г Д д Е е Ё ё Ж ж З з И и Й й
対応する
アルファベット
A B V G D ye yo J Z I y
IPA発音記号 /a/ /b/ /v/ /g/ /d/ /je/ /jo/ /ʐ/ /z/ /i/ /j/
カナ読み ィエ ジュ
ロシア文字 К к Л л М м Н н О о П п Р р С с Т т У у Ф ф
対応する
アルファベット
K L M N O P R S T U F
IPA発音記号 /k/ /l/ /m/ /n/ /o/ /p/ /r/ /s/ /t/ /u/ /f/
カナ読み
ロシア文字 Х х Ц ц Ч ч Ш ш Щ щ ъ Ы ы ь Э э Ю ю Я я
対応する
アルファベット
H ts ch sh shsh - wi - E yu ya
IPA発音記号 /x/ /t͡s/ /t͡ɕ/ /ʂ/ /ɕɕ/ - /ɨ/ / ʲ/ /ɛ/ /ju/ /ja/
カナ読み チュ シュ シシ - ゥイ -

赤紫色に塗られている部分は硬母音
青紫色に塗られている部分は軟母音です。

また、
赤文字有声子音
青文字無声子音です。

灰色に塗られているのは記号音で、単体では発音を持ちません。
ъが硬音記号、ьが軟音記号です。

上記のカナ読みは、後に母音が続かないとき(直後に子音が続いたり、単語の末尾である場合)の読み方です。


発音の基礎

ロシア語では、ローマ字と同様に「子音 + 母音」の組み合わせが基本です。
もちろんいくつか例外規則もありますが、それさえ覚えてしまえば、カタコトながらも読み上げるくらいの事はできるようになります。

1. 母音

"а, ы, у, э, о"硬母音と呼ばれ、「ア、ゥイ、ウ、エ、オ」と発音します。
日本語の母音を強めに(若干大げさに)発音した感じに近いです。

一方で、"я, и, ю, е, ё"軟母音と呼ばれ、硬母音に「ィ」を付けた「ヤ、イ、ユ、ィエ、ヨ」と発音します。
日本語で言えば、ヤ行に相当します。

なんだかыとиの発音が逆になっているように感じられますが、そういうものなんです。これは覚えるほかありません。もっとも、発音は近いので、会話をする上ではあまり気にしなくて良いです。

なお、"э"はあまり頻繁には使用されません。

2. 子音

ロシア語の子音は、基本的に母音とセットで発音します。

例として "б" を硬母音と組み合わせてみると、
"ба, бы, бу, бэ, бо" → 「バ、ブィ、ブ、ベ、ボ」、

軟母音なら、
"бя, би, бю, бе, бё" → 「ビャ、ビ、ビュ、ビェ、ビョ

…という風に変化します。

3. 記号音

ロシア文字には、"ъ"と"ь"という特殊な文字が含まれています。
それぞれ硬音記号軟音記号と呼ばれ、単体では音を持ちませんが、前後の音に影響を与えます。

硬音記号"ъ"は、子音と軟母音の間で使用され、互いの発音を分離させます。
例えば、"бя"(「ビャ」)に硬音記号を加えた"бъя"は、「ブャ」と発音します。
母音はそのままで、子音の末尾を「ゥ」に置き換えたようなものと考えてください。

軟音記号"ь"は、子音の後で使用され、直前の子音を軟音化させます。
例えば、"ть"は「ツィ」、"тъя"は「ツィヤ」と発音します。
子音に「ィ」を付け加えたような感覚です。つまり、子音と母音の間で使用される場合は、これも発音を分離させている事になります。

Tips. "щ"

"щ"はやや特徴的な発音で、「シシャ、シシ、シシュ、シシェ、シショ」というふうに発音します。

実はこの文字は"ш"と"ч"を合わせて作られたもので、本来は"shch"、即ち「シチ」という発音でした。しかし、現在のロシア標準語では"shsh"と読むのが一般的です。

"щ"を日本語に訳す際には、古い発音が用いられる事が多いです。
例えば有名なロシア料理である"борщ"は、日本では「ボルシチ」と読まれる事がほとんどですが、実際は「ボルシュ」という方が近いです。

※ 1つ目の「シ」はかなり短い音である為、日本語読みでは省略される事が多いです。
また、より正確に表すなら「ボールシュ」という方が正しいです。

稀ではありますが、"щ"の別表記として"сч"や"шч"が使われる事があります。
この場合は、表記通り「シチ」と発音しましょう。


ロシア語のアクセント

"До́брое у́тро." (ドーブライ ウートラ)
"До́брый де́нь." (ドーブルィー ヂェーニィ)
"До́брый ве́чер." (ドーブルィー ヴェーチル)


これは、ロシア語で「おはよう」「こんにちは」「こんばんは」を意味する言葉です。

いくつかの母音の上に" ´ "が書かれている事に気づいたでしょうか? これはアクセント記号と呼ばれるもので、その単語のアクセントの位置を示します。
一部の単語(接続詞、人名など)を除き、ロシア語の単語は必ず1つのアクセントを持ちます。

ロシア語では、音の強弱や長短によってアクセントを表現します(強弱アクセント)。これに対し、日本語は音の高さによってのみアクセントを表現します(高低アクセント)。

カナ読みを見てみると、アクセントの位置と長音(ー)の位置とが対応している事がわかると思います。アクセントの位置では、音を強く、長く発音します。


アクセント記号は、普通は省略されます。教科書や辞書など、堅い文章の中で使われる程度でしょう。
従って、アクセントの位置に関しては、単語ごとに覚えるほかありません。

実は、"ё"の黒点2つ(トレマ)もアクセント記号です。"ё"が含まれる単語があったなら、そこがアクセントになります。
ただし、これも"е"として表記される事がほとんどで、あまりアテにはなりません。


例外的な構文・発音ルール

ロシア語にも、いくつかの例外規則が存在します。
なんだか難しく感じますが、頑張って覚えましょう。

1. 正書法

"г, ж, к, х, ч, ш, щ"の後に"ы, я, ю"が続く事はありません
代わりに、これらに対応する母音("и, а, о")を使用します。

2. 半母音

"й"は半母音と呼ばれる特殊な音で、原則母音の後で使用します。

  • "ай, ый, уй, эй, ой" → 「アイ、ゥイー、ウイ、エイ、オイ」、
  • "яй, ий, юй, ей, ёй" → 「ィアイ、イー、ィウイ、ィエイ、ィオイ

…といった感じです。

ただし、外来語などでは"y"行の子音として使われる事もあります。

3. ж, ц, ш と ч, щ

"ж, ц, ш"は、後に軟母音が続いたとしても、常に硬音として発音します。
反対に、"ч, щ"は常に軟音として発音します。

例えば、"жэ"と"же"は、いずれも「ジェ」と発音します。

4. 母音の変化

アクセントが付かない"о"は、「 ("а")」と発音します。

また、"я, е"は、アクセントが付かない場合「 ("и")」と発音します。
"е"が単語の末尾にある場合は「 ("я")」と発音します。

5. 有声子音の無声化

無声子音の直前にある、または単語の最後にある有声子音は、下記の通りに無声化されます。

※ 無声化とは、簡単に言うと濁点がなくなる事を言います。もともと濁点がない音("й, л, м, н, р")の場合は、変化しません。

  • "б" → "п"
  • "в" → "ф"
  • "г" → "к"
  • "д" → "т"
  • "ж" → "ш"
  • "з" → "с"

6. 無声子音の有声化

有声子音(ただし"в"を除く)の直前にある無声子音は、有声化されます。

※ 前述した無声化と反対に、濁点が付く事を言います。対応する有声子音がない音("х, ц, ч, щ")の場合は、変化しません。

7. г の変化

  • "к, т, ч"の直前または"бо"の直後にある"г"は、「 ("х")」と発音します
  • 単語の末尾で"~ого"または"~его"として使用される場合は「 ("в")」と発音します

8. 黙字

単語の始端、末端でない子音が3つ連続するとき、その中にある"д, в, л, т"は発音されません。

9. その他

他にも、

  • "ж, ч, ш"の直前にある"с, з"は、"ж, ч, ш"にそれぞれ変化する
    • 例) "сша" → "шша"
  • "тц, дц, тс, тьс"は"цц"として、"тч, дч"は"чч"として発音する

などのいくつかの例外がありますが、ここまで覚える必要は今のところありません。


その他Tips

ロシア語の文章の書き方は、英語とほぼ同じで、句読点には","(コンマ)や"."(ピリオド)、":"(コロン)、";"(セミコロン)、"!"(エクスクラメーション)、"?"(クエスチョン)などが使用されます。
また、文頭や固有名詞の先頭においてのみ大文字が使用されます。英語の一人称である"I"のような例外はありません。

ロシア語では、英語と同様に人称代名詞を頻繁に使います。英語でいう"I"、"you"、"he"、"she"などの事ですね。 また、会話中で既に登場した固有名詞は、以降は代名詞で表現されます。


Катюша を読む

これまでに学習した事の確認として、ロシアの軍歌"Катюша"の歌詞をカタカナ読みに書き出してみましょう。
原文にアクセント記号を書き加えてあるので、単語の知識がなくても、これまでの学習内容でなんとかなるはずです。


Катюша
作詞: Михаил Васильевич Исаковский
作曲: Матвей Исаакович Блантер

※ Расцвета́ли я́блони и гру́ши,
Поплы́ли тума́ны над реко́й.
Выходи́ла на берег Катю́ша,
На высо́кий берег на круто́й.

Выходи́ла, пе́сню заводи́ла
Про степно́го си́зого орла́,
Про того́, кото́рого люби́ла,
Про того́, чьи пи́сьма берегла́.

Ой, ты, пе́сня, пе́сенка деви́чья,
Ты, лети́ за я́сным со́лнцем всле́д,
И бойцу́ на да́льнем пограни́чье
От Катю́ша переда́й приве́т.

Пу́сть он вспо́мнит де́вушку просту́ю,
Пу́сть услы́шит, ка́к она́ поёт,
Пу́сть он зе́млю бережёт родну́ю,
А любо́вь Катю́ша сбережёт.

※ 繰り返し


ハイ、どうでしたか?
それでは答え合わせとして正解(?)を載せておきます。


カチューシャ
作詞: ミハイル・ヴァシリエヴィチ・イサコフスキー
作曲: マトヴェイ・イサーコヴィチ・ブランテル

※ ラスツヴィターリ ヤーブラニ イ グルーシ
パプルィーリ トゥマーヌィ ナド リコーイ
ヴィハヂーラ ナ ビリク カチューシャ
ナ ヴィソーキィ ビリク ナ クルトーィ

ヴィハヂーラ ピェースニュ ザヴァヂーラ
プラ スチプノーヴァ シーザヴァ アルラー
プラ タヴォー カトーラヴァ リュビーラ
プラ タヴォー チイ ピースィマ ビリグラー

オイ トゥイ ピェースニャ ピェーシンカ ヂヴィーチヤ
トゥイ リチー ザ ヤースヌィム ソールンツィム フスリェート
イ バイツー ナ ダールィニム パグラニーチィエ
アト カチューシャ ピリダーィ プリヴェート

プースツィ オン フスポームニト ヂェーヴシク プラストゥーユ
プースツィ ウスルィーシト カーク アナー パヨート
プースツィ オン ジェームリュ ビリジョート ラドヌーユ
ア リュボーフィ カチューシャ ズビリジョート

※ 繰り返し


どれくらい合っていましたでしょうか?

今回、アクセント記号もカナ訳も自力でやったので、間違ってないか正直不安ですが、おおむねこんな感じになるはずです。
ただ、ロシア語では前後の単語に発音が引っ張られる事が多いので注意が必要です。
例えば、"берег Катю́ша,"の発音は上では「ビリク カチューシャ」となっていますが、「ク」と「カ」が続くと少し発音しにくいですよね。ここは「ビリッ カチューシャ」という方がネイティブっぽいです。
言葉というのは、発音のしやすい形へ変化していくもの。これはどんな言語にも当てはまる事です。

「これ間違ってない?」という場合は気軽にコメントくださいね。私自身も初心者ですので、遠慮せずお願いします。


さて、次回は基本的な文法から学んでいきます。
ついていけるのか、私!?

何度でも復活する「Microsoft Teams」を完全に消し去る方法

Officeのアイコン、予告通り変更されましたね。少し前からMicrosoftが提唱していたFluent Designとやらの一環でしょう。
正直言うとFluent Designの見た目は好みなので、今回のアイコン変更がわりと楽しみだったり。


さて本題へ。

Office 365のプランを最安のBussinesに変えたんですね。そしたら、Microsoft Teamsというアプリケーションも一緒にインストールされたんですよ。
調べてみるとプロジェクト内で共同編集をしたりする為のサポートアプリっぽい? Slack的な感じですかね。
普通に要らないし、それに起動時にいちいちログインを迫ってきて、これがけっこう鬱陶しい。なので、とりあえずアンインストールしたんですが…

PC立ち上げたら、また勝手に起動しとる!

そう、何度消しても勝手にインストールされて、復活してくるんです。
なんか軽く殺意が湧いたので、このMicrosoft Teamsの自動インストール機能をオフにする方法を書いておきます。


  1. Microsoft Teamsをアンインストールする
  2. Teams_windows_x64.msiを入手する
  3. 管理者権限のコマンドプロンプトから、下記コマンドを実行する
    • msiexec /i Teams_windows_x64.msi OPTIONS="noAutoStart=true"
    • インストーラのパスは適宜変更してください
  4. 少し待ちます
  5. 撲滅完了!

なぜか解決方法がどこにも書いていなかったので、簡単にですが記事にしてみました。
少なくとも私は、現状この方法で対処できています。

というか、そもそも"自動インストール機能"ってのがふざけてますよね。どんだけ使わせたいねん。

なにかあればコメントまで。

Ryzen 5 2400GでグラボなしゲーミングPCを組みたい

1/9のCESにてRyzen 3000シリーズが発表される予定ですね。

ですが私はそんな世間に逆行し、Ryzen 5 2400Gを使ってPCを組みたいと思います。

別にひねくれてる訳じゃなくてですね、PCが壊れたので早急に必要だったというだけで。
それに、今からRyzen 2000シリーズを買うってのも普通に良い選択肢だと思いますよ。
Intelと違ってAMDマザボを使い回せますから(Intelは新製品を出す度にCPUソケットを新しくするので、マザボも買い換える必要がある)、しばらく旧世代CPUでしのいでからタイミングを見て売っぱらい、それを元手にCPUを買い換えればオーケー。

ゲーミングPCという呼び方は正直あまり好きじゃないのですが、まぁ要するに、それくらいパワフルなPCを目指すという事で。

実際に組み立てた感想などはまた後日。


はじめに、今回のPC構成をば。

  • CPU
  • クーラー
  • ポンプ電源ケーブル
    • 変換名人 IDEP-FAN3/4
  • グリス
    • Thermal Grizzly Kryonaut x 1g
  • マザーボード
    • ASRock B450 Gaming-ITX/ac
  • メモリ
    • Corsair Vengeance LPX CMK16GX4M2B3000C15B
  • 電源
    • デルタ電子 DPS-300AB-9J
  • PCケース
  • ケースファン
    • Corsair AF120 White LED Quiet Edition

SSDは以前のPCから流用しています(SanDisk X400 M.2 512GB)。


全部解説してても仕方ないので、かなり大雑把に。

Ryzen 5 2400Gは、1000シリーズ(Summit Ridge)と2000シリーズ(Pinnacle Ridge)の狭間に位置する、いわば第1.5世代のRyzen(Raven Ridge)です。
グラフィック部分にはRadeon RX Vega 11を搭載。Radeon RX 550が8コアな事を考えると、11コアは多いですね。あっちはVRAMがDDR5なのでもっと早いですけど。
うまくOCしてやればCore i3-8100とGT 1030のパワーを併せ持つ(と言われている)、最強クラスのAPUです。これからはノングラボの時代ッ!

OCした2400Gはそこそこ発熱するそうですので、簡易水冷としてMasterLiquid Lite 120を用意しました。今後Ryzen 3000Gシリーズが発売されたら多分買い換えると思いますので、多少はオーバースペックでも良いものを買っておく事に。
高級品のKryonaut(通称: クマさんグリス)も用意。Conductonaut(通称: クマメタル)も考えましたが、流石にそこまでは要らないかなと。

マザボはASRockのB450 Gaming-ITX/ac。StoreMIも使いたかったので、B450チップセットを載せてるグラボに。Mini-ITXでB450チップ載せてるマザボってほんと少ないんですよ。
AMDと仲が良いといわれるMSIのB450I GAMING PLUS ACと迷いました。でもMSIの公式HP、サーバが弱いのか結構な頻度で障害発生してるんですよね。そのせいでQVLが見られなかったなど、サポートにやや不安が… 悪名高きGIGABYTEよかマシだとは思いますが。あと、ファン関連のコネクタがかなり少なかったのもネック。
B450 Gaming-ITX/acでも水冷ポンプ用の電源コネクタが足りないので、変換ケーブルをかまして電源から直接取ります。

Ryzen-Gシリーズにとって、メモリクロックは命です。という訳で、少なくとも3,000 MHz動作が保証される(はず)、CMK16GX4M2B3000C15Bをチョイス。よくある8 GiB x 2のOCメモリですが、ヤフオクで安く売ってたのが主な選考理由です。
Corsairメモリはメモリコントローラに統一性がなく、同じ型番でも違うメーカーのが使われたりしているらしいです。つまりは運ゲー
動く事を祈りましょう。

このマシンは今後もAPUのみの構成(グラボは載せない)にするつもりなので、電源は300 Wの安物。DPS-300AB-9Jというモデルの中古品です。最近のドスパラBTOマシンに入っている電源らしいですが… うーん、その名前を聞くだけで不安すぎますね。
でも一応は国産っぽいので、まぁ大丈夫でしょ。

なるべく小さめのPCがよかったので、皆さんお馴染みMETIS PLUSMini-ITXのアルミケースです。レッドとブルーだけ何故か他の色より安く、そしてブルーで自作している人が多かったようなので、私はレッドを買います(やっぱひねくれてる)。
白LEDのリアファンが付属。また、120 mm角のトップファンを付けられます。MasterLiquidは白色で光るらしいので、統一性を出す為にAF120 Quiet Editionのホワイトを選びます。正直言うと照明云々とかものすごくどうでも良いのですが、LEDなしとそんなに値段変わらないので、ついでに。
それと、SFX電源を使用する際はATXとの変換アタッチメントが必要ですので、気をつけてください。私は知らなくて死にました。


こんなもんですかね。
自作PCは初めてなので、失敗したら怖いですが、とりあえずやってみる事にします。

今はパーツの到着待ち。まだかなー

近況報告というかなんというか

最近ブログに全く触っていないなと思ったので。

というかTwitterもニコフレもここしばらくやってないですね。別に理由がある訳じゃないんですけど、私飽きっぽいので、そのうちきっと使い始めるようになるんじゃないでしょうか。

えー、今は学校の課題でArduino弄ってます。というか、この愚痴を喋りたかっただけかもしんない。
ともかく、Arduinoゲームボーイ音源を再現してみようかと模索していて、今はLR35902(実質Intel 8080)の命令セットを移植している最中です。

目指すはGBSファイルの再生。
プログラムの中で鳴らしても汎用性皆無で面白くないですし、かと言ってオリジナルのフォーマットを作るのは大変。作ったところで、結局はMIDIとかMMLとかからのコンバータも作らないと意味ないですもの。
GBSならそこそこ知名度ありますし、直接レジスタの値取り出せるならその方が楽ですしね。まぁ、GBSファイルをArduinoの中に置いていちいち読み出す訳にもいきませんので、配列にコンバートするソフトくらいは作りますけども。

でもGBSフォーマットって、あれ要するに「これ音鳴らすコードなんじゃねーか?」って部分をごっそり切り取ってるだけじゃないですか。つまり、万全を期するならば、全命令セットを実装しないといけないんですよね。
音源関係の\$FF00〜3F以外の操作は無視するにしても、どう転ぶかわかりませんし。まだきちんと理解できてないのですけど。

それに、結局はGBS入りのヘッダを置いておかなきゃならないので、Arduino Unoなんかではメモリが足りません。Dueだと動作電圧が3.3Vで鬱陶しいので、まぁ、Megaでしょうな。ポチりますか。

あと1週間でGBSファイルの再生まで漕ぎ着けなきゃなりません。まだ出音テストどころか、音源部も碌に実装できていないのに(!?)
ゲームボーイの音源仕様を理解するだけでやたら時間を食いました。

あ、オブジェクト指向は諦めました(笑)
ファイルサイズは別に良いんですけど、パフォーマンスがどうにも。関数呼び出すだけで数クロック持っていかれるとか言うじゃないですか、冗談じゃない。
グローバル変数置いとくのだけは嫌なので、とりあえず全部クラスで囲って静的メンバにします。
あーでも、それだとconstexpr関数が作れないですね。constexpr入りのクラスの作り方がよくわからんのですよ。

音声出力用の2ch汎用DAC、調整つまみ用の2連可変抵抗、イヤホンジャック、ローパスフィルタ用のコンデンサやらコイルやら。
そして何より、4.194304MHzクロックの水晶発振器! これはゲームボーイのCPUと同じクロック周波数です。
Arduinoに付いている水晶振動子は16MHzなのですが、この数値、個人的にはものすごい中途半端だと思うんですよ。2n、これが一番しっくりくる。ゲームボーイ処理の多くが2nHzに頼っているので、これは外せませんね。
ともかく、幾つかの入力クロックを外部クロックに設定すれば良い…のですよね? 多分。

とりあえず、Arduinoは…なんというか、微妙ですよね。

いや、何というか、わざわざC++で書くものではないでしょう。
浮動小数点数演算が遅いだのアレコレ言われておりますが、C++で書けるようにする為、本来はない機能をソフトウェア的に実装するしかなかったのでしょうね。
今でも生産され続け往年の名機ともいわれるZ80だって、浮動小数点数演算の命令なんて持っていませんよ。

無理に高級言語を使おうとせずに、どうせならアセンブリだけで良かったんじゃないですかね。
C++にしたって、機能が制限されすぎです。マシンスペック的な問題もあるかとは思うのですけど、C++の真髄はSTLにこそあるじゃないですか。I/O系のとかそういうのじゃなしに、vectorとかタプルとか。動的がダメならせめてarrayくらい入れておいて欲しかった。

C#で書きたい〜(無理

C++でも、プロパティ実装してくれたら個人的にだいぶ評価上がるんですけどねぇ。
あとstrong alias。これは、C++17で実装されるんでしたっけ? きっとavr-gccには実装されないんだろうな…(遠い目)
Atmelが買収されちゃった訳ですし、avr-gccの更新有無も心配ですね。しばらく触る事はないだろうがな!

ともかく、ここ数日でC++は書き飽きたので、作り終わったら関数型言語の勉強でもしようかと思っています。

…んー、どの言語にしよう。
純粋関数言語ってなんか…格好いいですよね(単純)。でも、そうなると選択肢がHaskellに限定される。なんか有名すぎてイヤなんですよね、かじるくらいならいいですけど。
Haskellも結局はI/Oモナドで妥協してるんですから、純粋/非純粋の境界線はあまり気にしなくていいのかも。そもそも、私数学嫌いですし。

msiファイルのインストールをちょっぴり簡単にするソフトを作った

(しばらくムダ話が続きます。飛ばしたい方はこちらへ)


あなたは、.msiが好きですか?
私は、はっきり言ってキライだね!


なぜかってそりゃ、もちろん面倒だからです。

.exe形式のインストーラなら、右クリックしてコンテキストメニューから「管理者として実行」を選べば済みますよね。ほぼ手間なし。
熟練されたWindowsユーザーなら、インストーラをいきなりダブルクリックなんてしないはずです。アイコンに管理者権限のマークが付いていれば別ですが。この一連の操作が、クセになってしまっているはずなのです。
…私だけじゃないよね?


それなら、.msi形式はどうか?


  1. 管理者権限でコマンドプロンプトを実行する
  2. インストーラをShiftキー押しながら右クリックして「パスとしてコピー」を押す
  3. コマンドプロンプトにパスを貼り付けてEnterキーを押す




面倒すぎるわ!!!


初見じゃ絶対にわかりませんよ。

右クリックしても「管理者〜」ってのが出てきませんから、普通は「msi形式は管理者権限いらないのかな」と思います。
そしていざインストールを始めてみると、面白い事にエラーメッセージを吐きやがるのです。そしてそのエラーメッセージには、管理者なんて単語は一切入っていないんです。

わかるかこんなもん!!!

そして「msi インストール エラー」とかって検索をかけて、ようやく対処法を見つける… もはや通過儀礼といっても過言ではないでしょう。


慣れてしまえば確かに大した手間ではないのですけど、そうじゃないそうじゃないんですよ

msiexec.exeを起動するには、コンソールからインストーラのパスと一緒に呼び出してやる必要があります。
管理者権限のコマンドプロンプトから呼び出せば、自ずとmsiexec.exeも管理者権限になるという仕組みなのですが…

なんかこう、もっとスマートにできないものなんですかね?

Windows 10なら、スタートを右クリックすればすぐに管理者権限でコマンドプロンプト実行できるようになってますけど、Windows 7だとそれだけでも結構手間がかかるんですよ。

管理者としてインストール」みたいな気楽な感覚で使えたら、私も.msiと仲良くやっていけそうなのに…




EasyMsi

という訳で、EasyMsiというソフトを作ってみました。

どんなソフトかって言うのは、この画像を見てもらえばわかります。

f:id:trackiss:20180918021341p:plain


はい、これだけです。
.msiファイルのコンテキストメニューに「管理者としてインストール」を追加するだけ。

ただそれだけですが、個人的には大満足です。こういう細かいとこに手が届く系大好き。

ダウンロードはこちらからどうぞ。

ご安心ください。EasyMsiのインストーラは、.msi形式ではなく.exe形式です。ウイルスチェックも万全。
そのうちVector様に登録申請しますので、もし申請が通ったらこのリンクは消します。

動作を確認したのはWindows 10 (1803)のみですが、Windows Vista以降のOSであれば、正常に動作するかと思います。少なくとも、Windows XP以前のOSでは動作しません。

動作にはMicrosoft .NET Framework 4.6以降が必要です。Windows Updateを素直に受け取っていればまず問題はないはずです。

インストールに必要なディスク容量は700KB程度。
もしそんなにディスクスペースがないという方がおられましたら、自力でなんとかしてください。

現状、日本語英語に対応しています。インストール時に日本語を選べば「管理者としてインストール(A)」に、英語を選べば「Install as administrator」になります。
それ以外の言語は気が向いたら。



本当に、プログラム的には大した事してないんですよね。マジで数行だけ。
msiexecを管理者として呼び出して、同時にパスを渡してやるっていうシンプルこの上ないコードです。

それよりもむしろ、レジストリの操作とか、あとインストーラの作成に手間取りました。
今回はInno Setupを使ってみた訳ですが、言語によってレジストリ処理を変える方法でずっと詰まってた。結局、命令文にLanguage: xxxオプション付けるだけでした。

それじゃ、iOS 12のアップデートしてきますーノシ

(個人的)最強のプログラミング言語「Haxe」

プログラミング言語

まぁ、もはや宗教ですよね。こういうのって。
そら一長一短はあるでしょうけど、慣れてるものが一番なのは変わりませんよ。

という訳で、下記は「個人的な意見」ですのでね。参考程度にお読みください。


Haxe?何それ聞いた事ない!

Haxe(ヘックス)は、そこそこマイナーなオブジェクト指向+関数型プログラミング言語です。
とはいえ、「関数型よくわからん」って人は、別に関数型構文使わなくても問題ありません。

まずは世界にこんにちはしておきましょう。

// Main.hx

package;

class Main
{
  public static function main():Void
  {
    Sys.println("Hello World!");
  }
}

このコードからだけでも、Haxeの特徴が幾つか見えてくるかと思います。
Haxeシンタックスハイライトまで用意してくれているはてなさんホント神

  1. packageとかいう謎の構文
  2. とりあえず全部クラスで囲っとけ記法
  3. エントリーポイントはMain.hxのmain関数
  4. 型は名前の後に書く

ん、こんなもんでしょうか。
まぁ際立っておかしな部分はないですよね。

ただ、もしかしたらこの特徴を見てハッと思い当たるフシがある人もいるかも知れません。

実はこのHaxe、かの有名なAdobe Flashスクリプト言語であるActionScriptとほとんど同じ構文なのです。
というより、もともとActionScriptの代替として開発された言語だそうで。

また、HaxeはaltJSとしての一面も持ち合わせています。

altJSってのはつまり、JavaScriptがフリーダムすぎるから書きやすくしよーぜ、ってノリで開発された、いわばJavaScriptの亜種みたいなもんですね。
Microsoftが開発しているTypeScriptなんかが有名な例でしょう。

HaxeにもJavaScriptのコードを出力する機能が付いていますし、何ならHaxeから出力した方が10%程早く動作するそうで。
そもそも、Haxeの構文そのものがJavaScriptの標準化であるECMAScriptと似通っています。

というかですね。

Haxeが出力できる言語の一覧を見てみましょう。

多い…多くない?

その結果、Haxeがターゲットとしているプラットフォームの一覧が、こちら。


クッソ画質荒いやん、気が向いたら直しときます

いや…マジで多いって。

ここで重要なのが、ソースコードを出力するという点。つまり、ネイティブコードでのクロスプラットフォームが実現できるという事になります。

それじゃ、出力されたソースコードを元に、更にコンパイルの作業をしなきゃいけないの?それは面倒だよ…

一応、FlashとNeko、HashlinkについてはHaxe単体でのコンパイルが可能ですが、確かに面倒ですよね。

そこでLimeの出番です。

Limeは、ウィンドウ処理や入出力、音声処理などの低レイヤー層を管理するフレームワークです。しかも、ビルド機能付き。
WindowsならVisual C++macOSならXcode…といったように別途ソフトのインストールが必要ですが、シームレスに実行ファイルを作成できるようになります。


Haxeの言語機能

まず、Haxeは静的型付け言語です。
先ほども書きました通り、変数名やメソッド名の後に型を指定します。

// 32bit整数型
var i:Int = 5;

基本型はInt32(Int)、Int64、Float、Boolのみのようです。
Intは環境に関わらず32bitとなるようです。
Floatは倍精度、つまりはCにおけるdouble型ですね。
一応、符号なし整数型としてUInt型も定義されているようですが、非推奨となっています。

インスタンスの生成や、配列の作成時にも型を指定します。

// インスタンスの生成
var c:Test = new Test();

// 整数型配列の作成
var a:Array<Int> = new Array();

まぁ、でもいちいち書いてたら面倒ですよね。インスタンス作成時とか。

という訳で、もちろんあります型推論

var i = 5;
var c = new Test();
var a = [0];

メソッドの引数なんかにも型推論が使えますが、こちらはあまり推論の精度が良くないし、わかりにくくなるので使わない方が良いでしょう。

そして、Haxeだとこんな書き方ができちゃいます。

var a = [for(i in 0...10) i];

// [0,1,2,3,4,5,6,7,8,9]
Sys.println(a);

// Success
Sys.println(if(a.length == 10) "Success"; else "Failure";);

そう、Haxeではif文やfor文などが式として使えてしまうのです!
これがものすごく便利。
偶数だけを順に格納したければ、

var a = [for(i in 0...10) if(i % 2 == 0) i];

// [0,2,4,6,8]
Sys.println(a);

はたまた、

var a = [for(i in 0...4) i * 2];

// [0,2,4,6,8]
Sys.println(a);

と書けば良いのです。すごいっしょ?

ただ、Haxeだといわゆるforeach方式のfor文しか使う事ができません。逆順も不可能です。
つまりHaxeのfor文では、Cでいう所の

// C
for(int i = 10; i > 0; i--) {}

みたいな事ができないという事になります。


…forがないなら、whileを使えばいいじゃない!

var i = 10;
var a = [while(i > 0) i--];

// [10,9,8,7,6,5,4,3,2,1]
Sys.println(a)

いや、でもこれだと別に変数用意しなきゃなんでちょっと良くないですね。他になんか良い方法ないんやろか。

それと、新しい言語を習得するときにかなりのネックとなる多次元配列。これ、言語によってかなりバラつきありますからね。構文も概念も。

まず、Haxeには多次元配列という概念はありません。
その代わり、配列の中に配列を入れる事が可能です。JavaScriptと同じですね。わかりやすくて実に良い。

また、連想配列を作る事も可能です。

var a =
[
  [0, 1, 2],
  [for(i in 0...3) i],
  [
    "ぜろ" => 0,
    "いち" => 1,
    "に" => 2
  ]
];

// 全て 2
Sys.println(a[0][2]);
Sys.println(a[1][2]);
Sys.println(a[2]["に"]);

正確には、連想配列はMapオブジェクトとして実装されています。上記のは省略記法。

まぁ、他にも色々と便利な機能がてんこ盛りです。すげぇっすよ。


言語独自の機能があるって聞いたけど

Haxeには、どんな言語に出力しても使えるHaxe標準ライブラリのほか、言語独自のライブラリも幾つか含まれています。
C++なら標準ライブラリが移植されていますし、JavaScriptならjQueryが移植されています。当然、他の言語に出力する時には使えません。

特に、Haxeの唯一のマルチメディア機能と言っても過言ではないFlash API。これも、Flashでしか使えない機能となっております。残念。


が…あるッ…
OpenFLッ…


何それ

OpenFLは、Flash APIHaxeに移植するフレームワークです。Limeを下敷きに動作します。

…というか、Limeのリンク踏んでくれた方なら気づいたと思いますが、そもそもLimeはOpenFLの一環で作られたものです。

しっかし、Flash APIならマルチメディア系で出来ない事ほとんどないですよ。ゲームだってどんとかむです。

例えば、OpenFLを使って作られた有名なゲームにPapers, Pleaseがあります。
入国審査をするゲームですね。
どうやら映画化が決定しているらしく、Wikipediaに個別記事まである。そんなに売れてたんだあのゲーム。

それと…こちらはややマイナーですが、Evolandというゲーム。
初めは2Dのピクセルに始まり、次第に3Dポリゴンへと変わっていくというかなり特殊なゲームですね。
続編のほかモバイル版もリリースされており、まさにHaxeフル活用って感じです。

まぁ、デベロッパであるShiro Gamesの創立者の一人は、Haxe開発者であるNicolas Cannasse氏ですので、当然と言えば当然ですけどね。

また、OpenFLを使った2DゲームエンジンHaxeFlixel(ヘックスフリクセル)があります。

Flash向けのゲームライブラリであったFlixelを、Haxeに移植・改変したフレームワークですね。
今はまだあまり有名なゲームはないようですが、結構な数のゲームが作られています。見たところ、モバイル端末向けのゲームが多いようです。これもHaxeだから成せる技。


Haxeの開発環境

現状では、FlashDevelopVisual Studio Codeがベストな選択肢かと思います。

FlashDevelopの場合は標準でHaxeをサポートしていて、新規プロジェクトの作成も簡単に出来ます。
ただ、私が普段使い慣れていない為か使いにくかったです…申し訳ない。

Visual Studio Codeの場合、vshaxeというサードパーティの拡張プラグインを使う事になります。
しかしサードパーティとは言え、頻繁に更新されていてかなり信頼性は高いです。シンタックスハイライトやオートコンプリート、エラー診断、コンパイルなどなど、一通りの機能は揃っています。
というか、Haxeコンパイラそのものに構文を解析したりオートコンプリートしたりという機能が備わっていますので、それを利用している形になっています。C#のRoslynとVisual C#の関係性みたいなもんですかね。ですので、精度で他に劣るという事はないでしょう。

Limeのプラグインも別途公開されていますので、VSCodeから直接 実行ファイルの作成まで出来てしまいます。
vshaxe単体でも、JavaScriptだったりNekoだったりならコンパイルは可能ですが。

VSCodeは(一応)テキストエディタなので比較的動作も軽く、他の言語をササッと書く時にも便利です。
HTML/CSSに関してのみはBracketsの方が良いと思いますが、それ以外で専用IDEがない言語なら、だいたいVSCodeで間に合います。JSONとかね。

それに知ってる方も多いとは思いますが、ついこの間にGithubMicrosoftに買収されましたよね。VSCodeには以前からもGit連携機能が搭載されていましたが、今後はよりGithubに密接した機能が追加される事でしょう。期待です。

そして何より、VSCodeWindows/macOS/Linuxに対応しています。アレです、最近流行りのElectron製アプリです。
FlashDevelopはWindows専用なのが一番の難点と言えましょう。


Nekoって?

Nekoは、2005年あたりに登場した比較的若い言語です。

一応は言語仕様を持っており、中間言語に変換して、Windows/macOS/Linuxで動作するVM上で実行するタイプの言語なのですが、Haxeから変換して踏み台として使用される事が多いと思います。
そもそもNekoの開発者はNicolas Cannasse氏(また出た!Haxeの開発者)ですし。

しかしそのお陰とあって、PC向けのソフトウェアを作るのならNekoを選択しておけば間違いはないでしょう。


Hashlinkって?

Hashlinkは、2年前くらいに突如として登場した言語です。

というか、Haxe Foundationがお送りするHaxe専用VMですまたかよ

Neko VMと何が違うのかと言いますと、まずこちらはiOSAndroidにも対応しているらしいという点。
そして描画にSDL2を使用しており、独自のUIライブラリも将来的に提供されるそうです。
また、静的型付けになった事でよりHaxeとの親和性が向上していたり。

しかし、新参といってもなかなか侮れません。既にHashlinkで作られたゲームが幾つかリリースされています。

まず、お馴染みShiro GamesのNorthgard。すげー3D。かなり売れているようですね。
そしてDead Cells。ドットのハクスラですかね?こっちもなかなかの高評価。

ただね…情報が少なすぎる!!
日本語の情報がとかじゃなくて、英語の情報も超少ない。公式サイトとかGithub関連除いたら、ほぼ皆無と言って良いと思います。
Githubの方も、ドキュメントはたった数ページ。チュートリアルはありませんので、何を書けば良いのかわからない状態。

ドキュメントが充実していけば、かなり今後に期待できそうですね。


とまぁ色々と書いてきましたが、私自身もまだまだ勉強中です。
マクロとか、ほとんど理解してません。
結構厳格な言語ですので慣れるまで大変かもしれませんが、それを含めても素晴らしい言語ですよ。使おう!

そんな訳で、ざっくりとHaxeの紹介でした。


Haxeフレームワークメモ

(個人的)最強のWindows向け高音質音楽プレイヤー「Dopamine」【+日本語化パッチ配布】


ver 2.xのPreview版は、はじめから日本語に対応しています。
ただ、GitHubにプルリクを投げてから反映されるまでには時間がかかりますので、そういう場合はこのページで日本語化ファイルを公開します。


更新が途絶えてはや3かg…

さ、3ヶ月!? マジかよ、そんなに経ってたとは思わなかった。

えー、あのですね。私がブログをやっているのは、時々湧き上がってくる文章書きたい欲を解消する為なんです。
でも、とある超大型記事の準備やらSCP財団の執筆活動やらで、文章書く機会が最近多くてですね。私の中で、かなり満足してしまっていたんですよ。
それにしたって、そんなに放置してたとは…反省。

でも多分、今後もこんな感じだよ。許せ。

というわけでお茶を濁す為に、最近(今日)見つけたWindowsの音楽プレイヤーをご紹介します。
かなり良いソフトなんですけど、国内じゃあんまり知られていないようで。こうなったら布教するっきゃないって事です。


PCの音楽プレイヤーソフト。
かつて、私もいろいろと探してまいりました。

iPhoneの音楽プレイヤーアプリを探していた時期もありましたが、今の私のiPhoneは16GBしかないので曲など入れられる訳もなく。
ちなみに、私はRadsone使ってます。純正のミュージックアプリも悪くないのですが、謎に重いんですよねあれ。

私は、PCの音楽プレイヤーとして、結構長い期間iTunesを使っていました。
これが、わりかし使いやすかったんですよね。特にiPhoneユーザーだと。
勝手に変なジャケット拾ってきてふざけんなってなった事もあったりでちょいちょい不満は持っていたんですが、ビジュアライザが綺麗だったのであまり気になってませんでした。

んで、ある日音楽ファイルの整理をしていて、MPC-BEで再生したり色々していましたら。

あれ、iTunes音質悪くね?

って気づいた訳です(遅
MPC-BEはASIOに対応していて、それで聴いてみたら全然音が違ってビックリ。
しばらくの間使ってたせいで、iTunesの音質に毒されてしまっていたんですね。

そんなこんなで次に使い始めたのが、TuneBrowserです。
ASIO対応なので音質は申し分なかったですし、見た目も気に入っていました。
ただ、途轍もなく重かった。
使いながらネットサーフィンとかしてるとしょっちゅうノイズ入ったりするんです。何というか、うちのPCでは使い物にならんレベルだった。
それと、シェアウェアですし…いや、学生にとっては、決してはした金じゃありませんからね。
ちゃんとしたソフトウェアにはお金を払いたいですけれど、同じ事が無料でできるならそっちを使いたい派。中途半端かよ。まぁ、そんなもんですよね。

そんな経緯で、今回の本題。

Digimezzo様のフリーソフト(しかもOSS)「Dopamine」の紹介です。

029_dopamine_01

029_dopamine_02

まず、見ての通りインターフェースが綺麗です。
最近、ソニーが何やらハイレゾ対応の音楽プレイヤーソフトをリリースしていたようですが、やっぱりUIがものすごい時代遅れ感あるんです。すごく安っぽい。
一方こちらは、ここらで流行りのフラットデザイン。スッキリとしたインターフェースで、超クールです。
まぁ、まさにWPFアプリですよと言わんばかりのUIなんですけどね。だが、それがいい

029_dopamine_03

029_dopamine_04

このように、iTunes風のアートワークプレイヤー表示も可能。

さらにさらに、

029_dopamine_05

こういうマイクロプレイヤーの他、

029_dopamine_06

こんな小さなナノプレイヤーもあります。あまり画面を占有したくない時に便利ですね。

029_dopamine_07

なんと10バンドイコライザも内蔵。しゅごい。

029_dopamine_08

設定も、結構細かい所までできちゃいます。アートワークに応じてテーマカラーを変える機能とか、オシャレで良いじゃないですか。あまり精度は良くないみたいですが…

その他、オンラインで歌詞やアーティスト情報、アートワークを取得する事もできます。Last.fmとの連携も可能。

音質面で言うと、DopamineはWASAPI排他モードに対応しています。
WASAPIってのは、最近のWindows(確かVista以降)でのみ使えるオーディオドライバです。
これを排他モードで使用すると、他のアプリケーションの音が一切聴こえなくなる代わりにミキサーを通さなくなるので、音質が向上するのです。
そこらの音楽プレイヤーソフトよりは格段に高音質と言えるでしょう。


いやぁ、ちょっと駆け足になってしまいましたね。
今テスト期間中なんで、許しておくれ。

えー、さてここからが本題です(ぇ

このソフトウェアは、2018年06月06日現在、日本語に対応しておりません。

あれれ? ちょっと待ってよ!
このブログに載っている画像だと、確かにUIが日本語で書かれているよ! これは、何かがおかしいに違いない!



はい。
というわけで、日本語訳しましたこちらにver 1.xの日本語化ファイルを置いてあります。インストールフォルダのLanguageフォルダにぶち込んでください。


ただ、今はver 2.xのPreview版がリリースされています! そして、そちらは最初から日本語に対応しています
Preview 2は若干ゃ不安定だったのですが、最新のPreview 6はかなり安定しています。私もこちらを使っています。
最近、Previewのリリース頻度が早いですね。正式版リリースも近いかもしれません。

追記: おま環かもしれませんが、Preview 2~を使っていると、「プレイリストが勝手にソートされる」「一部の曲が再生できない」などの現象に遭遇しています…
今はPreview 1を使って安定しています。

2.xの日本語化データの更新をしているのは私ですので、もしかしたら… というか、多分、更新が遅れる事もあるかと思います。
そういうときは、気長に待ってやってください。なんなら、勝手に更新してくださって全然構いません(笑
GitHubにプルリクを送るだけの簡単なお仕事ですよ。

それじゃ、またいつか。


宣伝: このDopamineを含む.msi形式のインストーラをちょっぴり使いやすくするソフトを作ってみましたので、よろしければどうぞ

trackiss.hateblo.jp


追記:
篠DさんにMusicBeeについて教えて頂きました。

いや、もちろんMusicBeeの存在は知ってたんですよ?
かつてはWindowsの音楽プレイヤーと言えばコレ、みたいな立ち位置でしたからね。
ただ私の中で、そのMusicBeeは数年前で止まっていたのです。

今になって使ってみたら、かなりモダンな見た目に変わっていてビックリ。機能面にしても、ASIO対応してますし… 確かに、音が鮮明に聴こえてきます。

ただ、個人的にはやっぱりDopamineのデザインが好き。"The WPF"な感じのデザイン。良いと思いません?
あと、WASAPIの方が音に丸みがあって聴き疲れしなさそうなので、ガチで音楽鑑賞する時はMusicBee、そうじゃない時は… みたいな感じで、その辺は上手く使い分けていこうかと思います。