主夫ときどきプログラマ

データベース、Webエンジニアリング、コミュニティ、etc

MacBookAir11 mid 2011にUbuntu18.04をいれてつかう

なんとなく自由に遊べるLinuxマシンがほしいなぁと思い、しばらく使っていなかったMacBookAirにUbuntu18.04をインストールしました。もうすぐ20.04がでるのでそれがでたらまた入れ直す予定。 同じようにUbuntu入れたっていうブログがいくつも見つかったし、けっこう簡単そうだったのでやってみました。

2G以上のUSBメモリを用意して起動メモリを作る

MacUbuntuイメージが入ったUSBメモリから起動するのが最初の一歩だった。さがしたら4Gのメモリが出てきたのでそれをつかった。 USBの起動メモリの作成方法も公式ページに書いてあるのでそれのとおりにすれば簡単にできた。

ubuntu.com

あまり気にしてなかったけど、日本語版のイメージをダウンロードしていたらしくあとから日本語環境で悩むことなくすんだので、これからデスクトップでUbuntuを使おうという場合には日本語版にしておいたほうが良いです。

https://jp.ubuntu.com/download

起動音のジャーンを消す

いろんなブログで言及されていたので事前にMacを起動して

sudo nvram SystemAudioVolume=%80

を実行してみたけど、反映されず。再起動してもジャーンがなるので、結果、Ubuntuに置き換わっても起動時のジャーンは鳴ったまま。 だがそれがいい

トライアルで起動してデバイスの認識を確認

f:id:masayuki14:20200219173607j:plain

出来上がった起動メモリをさして、電源を入れたあとoptionキーを押しながら待つ。すると起動ディスクを選択できるようになるので、EFI Boot を選択して起動する。するとUbuntuの起動Menuが表示されるので、インストールするか、USBブートするかを選択できる。
いきなりインストールするのも気が引けたので、まずはTry Ubuntu without installingを選んでデバイス周りがちゃんと動くかを確認した。

幸い、キーボードもトラックバックWifiも動いたし、問題なさそうだったのでそのままインストールメニューを選んでインストールした。

Ubuntuをインストールする

インストールもダイアログでぽちぽち設定を選んでいけばインストールできるので簡単である。 以下のように選択した。

  • 日本語
  • キーボードレイアウト:英語(US) 英語 (Macintosh)
    • US配列なので。日本語のMacintoshにするとJIS配列で認識されてしまう。
  • アップデート
    • 最小インストール
    • Ubuntuのインストール中にアップデートをダウンロードする、にしておく
  • インストールの種類
    • ディスクを削除してUbuntuをインストール
    • ディスク追加とかしないしLVMは選ばなかった

US配列なのでキーボードの選択は慎重に選んだけど、ほかは問題なさそうだった。 キーボードの選択もインストール後に設定できるので選択ミスっても大丈夫そう。 ディスクシステムでLVM使う、使わないはこの時点で設定しておかないとあとから面倒だと思ったけど、追加のSSDとか載せることもないのでLVMにしなくていいや、という感じ。

特に注意しないといけないポイント、というのは感じなかったかな。

f:id:masayuki14:20200219181502j:plain

これでインストールができるので、あとはちょこちょこっと設定してやれば問題なく使えるようになる。

つづき。

masayuki14.hatenablog.com

蟻本を買った

AtCoderの問題をちまちま解き始めて2週間ほど経ちました。

AtCoderにも慣れ、ABCコンテストにも2回参加しました。

わかったのはA、B、Cの問題は解けるけど、D問題はなかなか厳しいぞ。ということ。

このあたりから、探索やソート、数学のスキルが必要になってきますね。なので、ちゃんと勉強しようと思い蟻本を買いました。

これです。これで勉強していきます。

合わせて、同志を集めたいということで、勉強会を開催します。

hannari-python.connpass.com

よろしくおねがいします。

AtCoderのススメ方

今年はAtCoderやっていおうと決めたものの、いつやるのか問題がついてまわる。 最初は21時くらいからやってたのだけど、夕食やお風呂などで時間もずれるし、ビールとか飲んじゃうのであんまりちゃんと出来なかった。

そして「こんなこともわからんかったのか」という、プログラミング力低いなぁと思ってしまう出来事もあった。

朝やったほうがいい

人間の生産性は単純に朝のほうが高くて、太陽と共に落ちていくらしい。体感的にもほんとにそう。(これは何かの研究で結果がでてた。) なので朝やったほうが良いのは当然なので、最近は子供を保育園に連れて行ったあとの1時間ほどをRust+AtCoderに当てている。当然ちゃんとできている。

数値の各桁を足す方法がおもつかないの巻

いくつか簡単な問題を解いてて気付いたのが、そんなこともわからんのか、問題。 数値の桁数を足し合わせる、みたいなことをやる問題がいくつかあって解いてた。

始めはこの問題ABC 081 A - Placing Marblesで、各桁を文字列のまま足した。なんの工夫もない。

    let v: Vec<char> = input.chars().collect();
    let mut res = 0;
    if v[0] == '1' { res = res + 1 }
    if v[1] == '1' { res = res + 1 }
    if v[2] == '1' { res = res + 1 }

次にやったのはこの問題ABC 083 B - Some Sumsで、数値の各桁の和を求めないといけない。 そんでこうやって解いた。

fn digit_sum(x: i32) -> i32 {
    if x < 10 {
        x
    } else {
        digit_num(x) + digit_sum(x/10)
    }
}

fn digit_num(x: i32) -> i32 {
    x - (x / 10) * 10
}

再帰にしなくてもループでできるし、1桁目の数値を取るのに x - (x / 10) * 10 なんかせずに x % 10 で余りを取ればいいし、っていうなんだか冗長なコードになってしまった。modなんて使う場面が最近ないので全く思いつかなかった。プログラミング力低し。

Rust力低くてもなんとかやっていける

Rustはまだライフタイムまでしか読めてないし、所有権とか借用とかの概念も全然理解できてない。 当面の目標は標準出力のStringをいい感じで取得できるようにジェネリクスの関数に押し込めてしまうことだけど、これがうまく行かないのでまだまだ頑張らないといけない。 とはいえ頑張り過ぎてもしょうがないので、のんびりやっていこう。

Rubyのプログラミング教材をリリースしました

昨年の11月くらいから書き始めていたRubyのプログラミング教材がリリースされました。 わっしょーい。
TechPitという教材のマーケットプレイスに出品した形です。 誰でも自由に出品できるわけではなくて、担当の編集者さんやレビュアーさんと一緒に作ってきました。 なので、皆さんの協力のおかげでここまでたどり着けたことを嬉しく思います。ありがとう!

www.techpit.jp

簡単に内容を紹介。というか目次はこんな感じ。

0章 はじめに
0-1 教材の概要
0-2 開発環境のセットアップ
0-3 スクレイピングとは
0-4 (付録) Homebrewを使ったRubyのインストール
0-5 (付録) Cloud9を利用する手順
0-6 (付録) Visual Studio Codeの導入方法

1章 スクレイピングの準備
1-1 取得したい情報を整理する
1-2 HTMLの構造を読み解く
1-3 データ構造を設計する

2章 対象サイトのHTMLを取得する
2-1 net/http標準ライブラリを使う
2-2 取得したHTMLをファイルに保存する
2-3 リファクタリング

3章 スクレイピングする
3−1 RubyGemsの利用
3-2 Nokogiriのインストール
3-3 XPathを使ったスクレイピング
3-4 リファクタリング

4章 コマンドライン設計
4-1 オプションによる挙動の制御
4-2 optparse標準ライブラリを使う
4-3 オプションの実装

5章 リファクタリング
5-1 メソッドに分割する
5-2 機能ごとにクラスにまとめる
5-3 ソースファイルを分割する

6章 定期実行する
6-1 launchd を使う
6-2 Automator を使う

0-1 ニュース系サイトのスクレイピングコマンドを作ろう【Ruby】 | Techpit(テックピット)

しかし、実はまだ3章までしか完成しておりません。すみません。 扱っている題材が「スクレイピング」ということで、3章まで進めば「スクレイピング」はできるので、最低限の内容は執筆済という判断です。 当初は定額プラン(サブスクリプション)のユーザーさんだけが選べる教材として先行リリースの予定でしたが、通常の買い切りプランでもリリースしてしまいましょう、ということで今回リリースとなりました。

なので、浮かれていないで続きをどんどん書いて、順次リリースしていかないといけません。
今まで以上に頑張らないと!

もし、購入いただいた方がこのブログを見ているようでしたら、「早く続き書いてよ!」というようなメッセージをTwitterなどでお知らせください。がんばります。

ブログ書いてないで教材を書け、ということで現場からは以上です。

MySQL5.6の日本語ドキュメントに手を出した

先日ツイッタランドでこちらのスライドを拝見しまして。

speakerdeck.com

それでMySQL5.6の日本語ドキュメントを読もうかな、と、手を出しました。

とりあえずiPadにダウンロードして、読んでます。3648ページもあるので、1日10ページのペースで1年かけて読もうかな、と。 とはいえじっくり読んでたら途方も無い時間がかかるので、流し読みしつつ、気になったとこはじっくり読むスタイルで続けていこうと思う。 ペンシルを使えばPDFに書き込んだりできるし、ブックマークも併用していい感じに読めていて、今のところ楽しい。


そんななか、暗黙的に代入されるやつの動きについて、早速発見があった。

/* int型のカラムにstringいれても入るやつ*/
insert into sample_table set num_column = '12月';

/* ってやると `num_column` には 12 が入る、みたいなやつ */

それありきで使ってたけど、なぜそうなってるかの部分はいままで気にかけなかった。 けど、1章にそのあたりのことが書いてあって、なるほどと思った。 トランザクショナルじゃないテーブルにデータを入れるとき、途中で処理が止まってしまったらロールバック出来なくてこまるから、そのまま暗黙的な型変換をして代入しちゃうよ、っていう理由があった。 MyISAMの歴史ありきの考え方なんだろうなと思うし、そういう背景があっての挙動ということを理解すると、使う時の気をつけ方も変わるなぁ。

それでこの挙動も sql_mode で制御できるし、これまでしようと思ったことすらなかった。

そんな感じで発見もあるし、知識の確認にもなるし、もっと早くやっておけば良かったと思う。 とはいえ今から始めるのがこれからの自分にとっての最速のタイミングなので、気負わずのんびりやっていこう。