MacでBMSやってみた(beatoraja 0.7.2)

Macでも動くはずなのに、何故か動かないという話を色々聞いていたので興味本位でやってみた。

環境

目次

beatoraja(0.7.2)のダウンロード

ここからダウンロード

起動

beatoraja-config.commandを右クリックして開く。

  • 設定画面が立ち上がった人
    • おめでとう! この記事は参考になりません。
  • エラーが出た人
    • 私と一緒です。

エラー内容は以下の通り。

エラー: メイン・クラスbms.player.beatoraja.MainLoaderを検出およびロードできませんでした

このエラーって大体クラスパスとかJAVA_HOMEが設定されてない時に出るやつですね。

設定してない人は、調べてやってみてください(投げやり)

とりあえずJavaのバージョン確認

ターミナル開いてjava -version

MacBook-Air% java -version
java version "12.0.2" 2019-07-16
Java(TM) SE Runtime Environment (build 12.0.2+10)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.2+10, mixed mode, sharing)
  • バージョン8未満だった人
    • JDKをインストールしてください。特に気にしなければ8が良いと思います。
  • バージョン8~10だった人
    • それ動いてない?
  • バージョン11以上だった人
    • 私と一緒です。

Java11からはJavaFXが同梱されていないらしい。

別途インストールが必要。

JavaFXのインストール

下記を参考にインストール。

beatorajaのコマンドファイルを編集

beatoraja-config.commandの4行目を以下のように変更。

exec java --module-path $PATH_TO_FX --add-modules=javafx.controls,javafx.fxml -Xms1g -Xmx4g -cp beatoraja.jar:ir/* bms.player.beatoraja.MainLoader

改めて起動

beatoraja-config.commandを右クリックして開く。

多分これで開くと思います。

BMSファイルを開いてみる

カラフル・サウンズ・ポート先生のETERNAL DRAINを開いてみます。

f:id:Arihara:20190825141522g:plain

とりあえず動きました。スキンは気が向いたら入れようと思います。

おまけ

今日久しぶりにBMSをやったらDAOコンの皿の隙間に小指の爪が引っかかってしまった★3elegante。

f:id:Arihara:20190825153325p:plain

VB.NET基本メモ

昨日VBネタが出てきたので、いつの日か自分用に書いたメモを転記。

基本的には、Microsoft@ITから引用した内容だったと思います。

間違いあるかもしれません。

VBまとめ

命名規則

Microsoftから引用。

  • 名前の中の各単語を大文字で始める。

    • 例えば、FindLastRecodeRedrawMyFormのようにする。
  • 関数やメソッド名は動詞で始める。

    • 例えば、InitNameArrayCloseDialogのようにする。
  • クラス、構造体、モジュールやプロパティ名は名詞で始める。

    • 例えば、EmployeeNameCarAccessoryのようにする。
  • インターフェイス名はプレフィックス"I"を付けて始め、後に名詞、名詞句を続ける。

    • 例えば、IComponentなど。
    • インターフェイスの動作を説明する形容詞を続ける場合もあり。 例えば、IPersistableなど。

データ型

タイプ サイズ 格納できる値の範囲
数値型 整数型 SByte 1バイト -128~127(符号付き)
Byte 1バイト 0~255(符号なし)
Short 2バイト -32,768~32,767(符号付き)
UShort 2バイト 0 ~ 65,535 (符号なし)
Integer 4バイト -2,147,483,648 ~ 2,147,483,647 (符号付き)
UInteger 4バイト 0 ~ 4,294,967,295 (符号なし)
Long 8バイト -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (9.2...E+18 †) (符号付き)
ULong 8バイト 0 ~ 18,446,744,073,709,551,615 (1.8...E+19 †) (符号なし)
浮動小数点型 Single 4バイト ±3.40282347E+38~±1.40239846E-45
Double 8バイト ±1.79769313486231570E+308 ~ ±4.94065645841246544E-324
10進型 Decimal 16バイト 0 ~ +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) † (小数点なし)
0 ~ +/-7.9228162514264337593543950335 (小数点以下 28 桁)
0 以外の最小数は +/-0.0000000000000000000000000001 (+/-1E-28) †
論理型 Boolean ※1 true または false
日付型 Date 8バイト 0001 年 1 月 1 日 0:00:00 (午前 0 時) ~ 9999 年 12 月 31 日 11:59:59 PM
文字型 Char 2バイト 0~65535 (符号なし)
String ※1 0個~約20億個のUnicode文字
Object型 Object ※2 任意の型を格納可能

※1 実装するプラットフォームに依存。

※2 32ビットプラットフォームでは4バイト/64ビットプラットフォームでは8バイト。

コレクション

コレクションとは、同じ型のデータをまとめて管理するためのデータ構造を総称したもの。

Visual Basic 2005からは、System.Collections.Generic名前空間で、ジェネリックを使ったコレクションクラスが提供されている。

ジェネリック:クラスやメソッドのパラメータにおいて、処理対象とするデータ型を特定することなく汎用的な形で記述できるしくみ。

コレクションの種類
(アルゴリズムによる分類)
System.Collections System.Collections.Generic
リスト ArrayList List
双方向連結リスト LinkedList
ソート済みリスト SortedList SortedList
スタック Stack Stack
キュー Queue Queue
ハッシュテーブル Hashtable Dictionary
二分探索木 SortedDictionary

コレクションクラスの主要なプロパティとメソッド

コレクション名 プロパティ・メソッド 概要
List Count 実際に格納されている要素の数を返す
Add(item) 末尾にオブジェクトを追加する
Clear() すべての要素を削除する
Insert(index,item) 指定したインデックスの位置に要素を挿入する
Remove(item) 最初に見つかった特定のオブジェクトを削除する
Stack Count 格納されている要素の数を返す
Contains(item) ある要素がスタック内に存在するかを判断する
Peek() 先頭にあるオブジェクトを削除せずに返す
Pop() 先頭にあるオブジェクトを削除し、返す
Push(item) 先頭にオブジェクトを挿入する
Queue Count 格納されている要素の数を返す
Clear() すべてのオブジェクトを削除する
Dequeue() 先頭にあるオブジェクトを削除し、返す
Enqueue(item) 末尾にオブジェクトを追加する
Peek() 先頭にあるオブジェクトを削除せずに返す
Dictionary Add(key,value) 指定したキーと値を追加する
Clear() すべてのキーと値を削除する
TryGetValue(key, out value) 指定したキーに対応する値を取得する
ContainsKey(key) 指定したキーが存在するかどうかを判定する
ContainsValue(value) 指定した値が格納されているかどうかを判定する
Remove(key) 指定したキーを持つ要素を削除する

List

以下サンプルコード。

Class MainClass
  Public Shared Sub Main()

    'String型のListとしてインスタンス化
    Dim SampleList As New List(Of String)

    SampleList.Add("Hello")
    SampleList.Add("World")

    'インデックスによる参照(キャスト不要)
    Dim s As String = SampleList(1) ' 出力値:World
    Console.WriteLine(s)

  End Sub
End Class 

List(Of String)とすると、String型のListクラスになる。

型推論を利用すれば、以下のようにも書ける。

Dim SampleList = New List(Of String)

LinkedList

双方向リンクリストのクラス。

配列がベースのListクラスとは異なり、インデックスによるデータの参照はできない。

その代わり、リストの途中への要素の削除と挿入が高速にできるという特徴がある。

以下サンプルコード。

Class MainClass
  Public Shared Sub Main()

    ' LinkedListクラスの利用
    Dim SampleList = New LinkedList(Of String)

    ' 1つ目の要素を追加
    SampleList.AddFirst("First")

    ' 2つ目の要素を追加
    SampleList.AddFirst("Last")

    For i As Integer = 0 To 2
      ' 先頭の要素の後にiの値を文字列に変換したものを追加
      SampleList.AddAfter(SampleList.First, i.ToString())
    Next

    ' すべての要素を順番に表示
    For Each s In SampleList
      Console.WriteLine(s)
    Next

  End Sub
End Class 

実行結果

Last
2
1
0
First 

Listを全件ループで処理する場合は、注意が必要。(詳細)

値渡しと参照渡し

メソッドに引数を渡す方法は、「値渡し」と「参照渡し」がある。

値渡し

Public Shared Sub DoSomething(ByVal arg1 As Integer)
    'パラメータの値を変更する
    arg1 += 1
End Sub

'エントリポイント
Public Shared Sub Main()
    Dim val1 As Integer = 0

    'DoSomethingメソッドを呼び出す
    DoSomething(val1)

    '引数として渡した変数が変化したかを確認する
    Console.WriteLine(val1)
    '「0」と表示される

    Console.ReadLine()
End Sub

VB.NETではByValは省略できるが、できるだけ省略しないこと。

参照渡し

Public Shared Sub DoSomething(ByRef arg1 As Integer)
    'パラメータの値を変更する
    arg1 += 1
End Sub

'エントリポイント
Public Shared Sub Main()
    Dim val1 As Integer = 0

    'DoSomethingメソッドを呼び出す
    DoSomething(val1)

    '引数として渡した変数に変わりがないか確認する
    Console.WriteLine(val1)
    '「1」と表示される

    Console.ReadLine()
End Sub

ByValByRefに変わっただけ。

プロパティプロシージャ

Javaでいうところのゲッター・セッターはプロパティで定義するらしい。

ゲッターとセッターを定義する場合

Public Class SampleClass1
    Private _number1 As Integer = 0
    Public Property Number1() As Integer
        Get
            Return _number1
        End Get
        Set(ByVal value As Integer)
            _number1 = value
        End Set
    End Property
End Class

ゲッターのみ

Public Class SampleClass2
    Private _number2 As Integer = 0
    'Getしかない時はReadOnlyを付ける
    Public ReadOnly Property Number2() As Integer
        Get
            Return _number2
        End Get
    End Property
End Class

セッターのみ

Public Class SampleClass3
    Private _number3 As Integer = 0
    'Setしかない時はWriteOnlyを付ける
    Public WriteOnly Property Number3() As Integer
        Set(ByVal value As Integer)
            _number3 = value
        End Set
    End Property
End Class

オブジェクト指向

クラスの定義

Public Class Employee
    'フィールド
    Private employeeNameValue As String
    'プロパティ
    Public Property EmployeeName() As String
        Get
            Return employeeNameValue
        End Get
        Set(Value As String)
            If Value.Length <> 0 Then
                employeeNameValue = Value
            End If
        End Set
    End Property
    'コンストラクタ
    Public Sub New(employeename As String)
        employeeNameValue = employeename
    End Sub
    'メソッド
    Public Function ShowEmpName() As String
        Return employeeNameValue
    End Function
End Class

インスタンス化・プロパティ使用

'インスタンス生成
Dim emp As Employee
emp = New Employee("FLM01")

'プロパティを使用する(参照)
MassageBox.Show(emp.EmployeeName)

'プロパティを使用する(更新)
emp.EmployeeName = "FLM02"

'メソッドを呼び出す
Dim name = emp.ShowEmpName()
MessageBox.Show(name)

名前空間

名前の衝突を防ぐために必要なもの。

詳しくは、ここを読んでください。

'名前空間の定義
Namespace MySpace1
    '同じクラス名
    Public Class MyClass1
        Public Shared Sub MyMethod1()
            Trace.WriteLine("MySpace1.MyClass1.MyMethod1 called")
        End Sub
    End Class
End Namespace

'名前空間の定義
Namespace MySpace2
    '同じクラス名
    Public Class MyClass1
        Public Shared Sub MyMethod1()
            Trace.WriteLine("MySpace2.MyClass1.MyMethod1 called")
        End Sub
    End Class
End Namespace

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'メソッド呼び出し
        MySpace1.MyClass1.MyMethod1()
        MySpace2.MyClass1.MyMethod1()
    End Sub
End Class

LINQ

Language INtegrated Queryの略。直訳すると、「統合言語クエリ」。クエリは「問い合わせ」の意味。

以下公式(MSDN)から引用。

統合言語クエリ (LINQ: Language-Integrated Query) は、クエリ機能を C# 言語 (および Visual Basic や場合によってその他の .NET 言語) に直接統合する一連の技術の名前です。 LINQ を使用すると、クエリは、クラス、メソッド、イベントなどと同じように、高度な機能を備えた言語構成要素になります。 クエリを記述する開発者の場合、LINQ で最も違いを認識できる "統合言語" 部分はクエリ式です。 クエリ式は、C# 3.0 で導入された宣言クエリ構文で記述します。 クエリ構文を使用すると、データ ソースに対する複雑なフィルター処理、順序付け、およびグループ化の操作を最小限のコードで実行できます。 同じ基本的なクエリ式のパターンを使用して、SQL データベース、ADO.NET データセットXML ドキュメントとストリーム、および .NET コレクション内のデータを照会および変換します。

クエリ構文とメソッド構文

LINQ の書き方には「クエリ構文」と「メソッド構文」の 2 種類がある。

Dim list = New List(Of Integer)(New Integer() {1, 84, 95, 95, 40, 6})

'クエリ構文
Dim query = From x In list
            Where x Mod 2 = 0
            Order By x
            Select x * 3

'メソッド構文
Dim query = list _
            .Where(Function(x) x Mod 2 = 0) _
            .OrderBy(Function(x) x) _
            .Select(Function(x) x * 3)

たかが文字列連結で上司に指摘された話

会社の先輩にレビューで指摘を受けた話。

備忘録として残します。詳しい解説は他サイトに任せます。

VB.NETで文字列連結してみよう

余裕でしょ

業務で以下のようなコードを書いたところ、先輩から指摘を受けました。

Public Class Application
    Public Shared Sub Main()
        Dim person As String = "キャル"
        Dim word As String = "ヤバイわよ!"
        
        System.Console.Write(person + "「" + word + "」" + vbCrLf)    
    End Sub
End Class

vbCrLfは改行コードです。

実行結果

キャル「ヤバイわよ!」

何がヤバイのか

2つの点を指摘されました。

  • 文字列連結にはプラス(+)ではなくアンパサンド(&)を使うこと。
  • 連結が多くなる場合は、StringBuilderを用いること。

文字列連結は+を使うってペコリーヌも言ってたよ

私の尊敬する方の一人にペコリーヌさんという凄腕プログラマーがいます。

ペコリーヌさんは食わず嫌いなので、数多のプログラミング言語を触っています。

ペコリーヌさん曰く、

文字列連結は+を使う言語が多いですね!JavaPythonC++JavaScriptRuby、Go、Scala、F#、...

後半の方はよく知らない言語が多く、聞き流してしまいました。

とりあえず文字列連結はプラス(+)を使っておけばOKだと思っていました。

VB.NETプラス(+)とアンパサンド(&)どちらも文字列連結に使えるから、わざわざ慣れているプラスから変える必要は無いよね?

ヤバイ落とし穴があった

実際のプログラムを見てみましょう。

Public Class Application
    Public Shared Sub Main() 
        Dim a As Integer = 2
        Dim b As String = "4"
       
        System.Console.Write(a + b)
        System.Console.WriteLine("歳、学生です。")
    End Sub
End Class

何も考えず、数値型と文字列型を文字列連結したいことってありますよね?

データの型を意識するのが困難なケースもあると思うので、サクッと書ければ嬉しいものです。

このコードを実行してみると...

6歳、学生です。

...普通だな!

下手すると、この子は学生ではなく児童かもしれません。

なぜか期待した結果と違いますね。

よく見てみると、数値型と文字列型の足し算が行われているようです。

最初はただ文字列連結がしたいだけだったのに...(東京神話)

段々と脱線してきました。プラスからアンパサンドに変えてみましょう。

Public Class Application
    Public Shared Sub Main() 
        Dim a As Integer = 2
        Dim b As String = "4"
       
        System.Console.Write(a & b)
        System.Console.WriteLine("歳、学生です。")
    End Sub
End Class

実行結果

24歳、学生です。

やったぜ。

文字列連結はプラスでもアンパサンドでもどっちでもOKと言っておきながら、Microsoftアンパサンドを推奨しています。

+演算子を使用すると、加算または文字列の連結が行われるかどうかを判断できない場合があります。 &演算子を連結に使用して、あいまいさをなくし、自己記述型のコードを提供します。

+ 演算子 (Visual Basic) | Microsoft Docs

詳しくは上記のサイトでご確認ください。

そんなにヤバくは無い方

2つ目の指摘、StringBuilderは実行時間で優位になるものらしいです。

あとはプログラムの見やすさも向上しますね。

気になる方は、下記のサイトが分かりやすいので見てみてください。

文字列処理を高速に行う - .NET Tips (VB.NET,C#...)

まとめ

公式ドキュメントはちゃんと読もう。

たかが文字列連結。されど文字列連結。。。

あとGoogleで検索して一番上に出てくる、最終的にプログラミング教室に誘うサイトは過信してはいけない。

はてなブログと無限アラート

こんにちは。せいんと(@773_Arihara)です。

今回は、はてなブログについての子ネタです。

技術者しか興味が湧かなそう話題ですが、後半には皆さんに是非知って欲しい話題に触れます。

はてなブログは最高だぜ!

そんなに記事書いてないクセに何を言ってるんだという感じですが、この記事で最高な点を確認したいだけです。ごめんなさい。

シンタックスハイライトだと...!?

C

#include <stdio.h>
int main(void){
    char *str = "Hello, World!";
    //文字列表示
    printf("%s¥n", str); 
}

VB

Sub Main()
    Dim str As String = "Hello,World!"
    'ダイアログ表示
    MessegeBox.Show(str) 
End Sub

古臭い言語なのはさておき、コードに勝手に色が付きます。

アウトプットに結構便利そうですよね。

Markdown記法が使えるだと...!?

f:id:Arihara:20190820230649p:plain
VSCodeでのMarkdownの編集画面

実はこの記事はプログラムを書くのに使うVisual Studio Codeというソフトで書いていたりします。

それは、はてなブログMarkdownというマークアップ言語に対応しているからです。

見出しや字のスタイルの設定、表の作成なんかが楽に出来ます。

githubでアプリケーションをダウンロードする時に、readme.mdという形式のファイルを目にする事が多いと思いますが、アレもMarkdownで書かれたものです。

あと数式も入力できます。理系ホイホイですね。

元コード(TeX)

\boldsymbol{F}\_{ped\_i}=
\frac{Q\_{ped}}{\|\boldsymbol{f}\_{ped\_i}\|^2}\cdot
\frac{\boldsymbol{f}\_{ped\_i}}{ \| \boldsymbol{f}\_{ped\_i} \|} 
\cdot \cos \theta\_{ped\_i}

出力結果


\boldsymbol{F}_{ped_i}=
\frac{Q_{ped}}{|\boldsymbol{f}_{ped_i}|^2}\cdot
\frac{\boldsymbol{f}_{ped_i}}{ | \boldsymbol{f}_{ped_i} |}
\cdot \cos \theta_{ped_i}

上式は私の卒論で出てきた式です。

JavaScriptが貼れるだと...!?

これは割と貼れるサイトが多いかもしれませんが、気にしないでおきます。

ということで、ひとつスクリプトを貼ってみます。

無限アラート事件って知ってる?

無限アラート事件(むげんアラートじけん)は、電子掲示板に不正プログラムを書き込んだとして5人が摘発された事件である。

無限アラート事件 - Wikipedia

いたずらごころ掲示板にURLを貼ったJCが警察に捕まっちゃった事件ですね。

私も子供時代にこういうイタズラしてたような気もしますが...

アラートというのは、ブラウザで最前面に表示されるメッセージの事です。

例えば、何かしらのサイトの会員登録をする時に電話番号が未入力だったりすると、『必須項目が未入力です。』などのアラートが表示されるケースが挙げられます。

無限アラートというのは、閉じても閉じてもアラートが出てくる嫌がらせのようなもので、電子機器を破壊するような類いのプログラム(=ウイルス)ではありません

というのが個人的な見解。

一方検察側は、こう述べているそうです。

ウイルス罪を成立させる要件の1つ『人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録』の『意図に反する』の部分に抵触する。

どんなプログラムでも意図しない動作なんて幾らでもありますが...

プログラマーの間では、この件は結構物議を醸しています。

とりあえず利用者に意図させれば、無限アラートのプログラムを貼っても逮捕はされなさそうです(多分)。

実際のプログラムは?

こんな感じです。

    function onButtonClick() {
        for(;;){
            alert(" ∧_∧ ババババ\n( ・ω・)=つ≡つ\n(っ ≡つ=つ\n`/  )\n(ノΠU\n何回閉じても無駄ですよ~ww\nm9(^Д^)プギャー!!")
        }
    }

for文という繰り返しを制御する関数の中で、アラートを表示させるように書かれています。

本来for文はそのループを抜ける為の条件を指定するのですが、このプログラムでは省略されている為、無限にアラートが出る訳ですね。

この記事の最下部のボタンをクリックすると、この無限アラートのプログラムが実行されます

抜け出すには、タブを閉じればOKです。それでもダメならブラウザを落とす必要があります。

クリックして電子機器が壊れてしまった方は、せいんと(@773_Arihara)までご連絡ください。

そうなった場合は逮捕されちゃいますね...

Macの環境構築をしました

MacBook Airを購入して取り敢えずの環境構築をしたので、備忘録として残しておきます。

基本設定

ファイアウォール

トラックパッド

キーボード

  • システム環境設定>キーボード>キーボード
    • キーのリピートを最速に設定。デフォルトは遅すぎる。
    • F1,F2などのキーを標準のファンクションキーとして使用にチェック
      • デフォルトは音量調節などキーに印字された機能の制御
      • fnキーと同時押しで機能の切り替えが出来ます。
  • システム環境設定>キーボード>ユーザ辞書
    • 英字入力中にスペルを自動変換のチェックを外す
    • 文頭を自動的に大文字にするのチェックを外す
      • プログラム書く人なら言わずもがな。
      • ユーザ辞書が勝手にiPhoneと同期されてました。すごい。
  • システム環境設定>キーボード>入力ソース>日本語>候補表示
    • フォントをヒラギノ角ゴシックW3に変更。
      • デフォルトは明朝体でちょっとダサい。

インストールしたアプリ

いつもの

  • TweetDeck
    • TLがいっぱい見れるアプリ。裏垢だらけのJKも安心して使えます。
  • GoogleChrome
    • なんとなく。Macとの操作性の相性が悪く、通知受け取る専用になってます。
  • Chromeリモートデスクトップ
    • Windowsをリモートで動かしたい時が来るかもしれない。
    • かな変換キーの配置が違うので、色々設定しないと面倒
    • そもそもWindows側に英語キーボードとして認識されていて、キーが合わない
  • LINE
    • MacならiPhoneで見慣れた絵文字も入力出来るのでいい感じ🤔
  • Kindle
    • Amazonで買った電子書籍を読みたかったのですが、はっきり言って使い物になりません。操作性が悪すぎます。
    • 対してAppleBooksはいい感じです。
  • DMMGamePlayer

プログラミング系

  • Visual Studio Code
    • この記事書くのに絶賛使ってます。
  • JDK
  • XCode & CommandLineTool
  • Homebrew
  • zsh

    • bashの高機能版
    • はっきり言って全部を使いこなせないと思う
    • macもいずれデフォルトシェルがzshに変更されるらしい。
    • 便利機能として、タブを押すと下に候補一覧が出てきます。
      f:id:Arihara:20190821222648g:plain
      zshの補完機能
  • iTerm2

    • Terminal.Appの代替
    • ブラウザでコード見ながら写経が出来るので便利
    • commandキー2回叩くとターミナル画面を表示するように設定しています。
      f:id:Arihara:20190821230148g:plain
      iTerm2の画面上にターミナル画面を表示する機能

おわりに

環境は日々模索してます。

webブラウザですらどれを使おうか未だに悩んでいるくらいですから、いっぱい触って自分色に染めたいですね。

Macbook Air(2019)を買った話

こんにちは。せいんと(@773_Arihara)です。

アウトプットの場としてブログを始めます。よろしくお願いします。

Twitterでも呟きましたが、MacBook Airを購入したので、備忘録として残しておきます。

MacBook Air(2019)を買いました

2019年7月に発売された、Macbook Airの最新モデルを購入しました。

カラーはTweetの画像にもある通り、スペースグレイにしました。

MacBookといえばシルバーの印象が強いと思いますが、スペースグレイの格好良さに惹かれました。

ストレージは256GBを選択しています。

なんで買ったの?

衝動買いです。家電量販店に触りに行った次の日には札束スマホ握りしめて買いに行ってました。

後述しますが、今回は現金ではなくスマホ決済で購入しました。

購入の決め手となった大きな要因として挙げられるのが、トラックパッドの素晴らしさです。

Macユーザーでマウスを使っている人がほとんど居ない理由はコレです。

基本的にノートPCでは仮想デスクトップでの運用は必要不可欠だと思っていますが、Macではそのデスクトップの切り替えが3本指のスクロールでスムーズに行えます。

Windowsノートでも4本指のスクロールで切り替えられますが、指が窮屈だし、そもそも反応が悪いです。

後は細々とした理由を以下に挙げておきます。

  • 前のモデルより価格が下がった
2019 2018
128GB ¥119,800 ¥134,800
256GB ¥139,800 ¥156,800

上記は税抜価格です。

  • プログラミングのモチベーション向上に繋げたい
  • スタバでドヤりたい
    • Mac買ったらまずはコレ

PayPayで買ってみた

学生の頃に、iPad mini4の最上位である128GBモデルを購入した時は、銀行で下ろしたばかりの札束を握りしめてお店に行ったのに、今は良い時代になりましたね。

PayPayの還元率は、全盛期では20%という異常な数値でしたが、現在は3%に落ち着いています。

3%でも割とお得だと思うのですが、最近ではd払いがアツいので、下火になっている気がします。

今回はそのPayPayで支払った訳ですが、実質的な金額は以下のようになります。

¥150,973(定価) - ¥4,529(PayPay3%還元) - ¥7,548(コジマポイント5%)

=¥138,896(税込)

ちなみに価格.com最安値はこちら

¥129,307(税込)!?!?!?!?!?!?

負けました。

ただ、Amazonよりは安いようですね。

家電量販店は在庫さえあればすぐに手に入るので、オススメですよ。

実際使ってみてどうなの?

トラックパッドは評判通り良い

画面スクロールや拡大縮小はまるでスマートフォンのように操作できます。

また、やはり仮想デスクトップ機能はかなり良く使いますね。この記事の執筆中もストレスなく操作できて快適です。

フォントが綺麗

流石はAppleといった感じです。

ディスプレイの解像度も相まって最高ですね。

全体的に慣れが必要

Windowsとの大きな違いはキーボードです。

CtrlやAltの代わりにOptionCommandキーが採用されています。

また、日本語とアルファベットの切り替えのキーも異なります。

この辺りは慣れないうちはちょっと大変かなと思います。

たまに重い

MacBook AirのCPUはIntelCore i5を搭載していますが、極低消費電力ノート向けのプロセッサであるため、性能は良くないです。2コアだし。

元々はCore Mプロセッサと呼んでいた低消費電力CPUがCore iシリーズに仲間入りした訳ですね。わかりづらい。

話が脱線しましたが、性能が原因でたまに文字入力に時間がかかるなど、動作が重くなることがあります。

これは仮想デスクトップ機能が快適すぎて、無駄にアプリを開きすぎていることが原因な気がします。嬉しい悲鳴ですね。

通常に使う分にはさほど問題は無いと思います。

プリコネができない

Cygames様、DMM様、Macでもプリコネがやりたいのでどうか宜しくお願い致します。

まとめ

Macはいいぞ。

みんな買ってください。

次回は環境構築について書きたいと思います。

Mac先駆者さまには色々とオススメの環境を教えていただければ幸いです。