ステーキの戯れ言

私のブログです。アドベントカレンダーを埋めるために作りました。

ubuntuが無線LANを認識しないとき & 第9回 ICTSC予選 感想

adventar.org

 この記事は上のアドベントカレンダーの22日目です。

 

どうも、こんにちは。

お品書きです。

 

 

 私はこの前新しいノートPCを買いました。そして早速ubuntuを導入しましたが何故か無線LANが認識しませんでした。そのことを書いていきます。

ubuntu無線LANを認識しないとき 

 

自分の状況

まぁwindowsで認識してくれているおかげで、自分がうっかり無線LAN対応していないPCを買っちゃった可能性が消えてくれました。

 

 

やったこと

  • update & upgrade
  • /etc/network/interfacesの中身を変えてみる
  • 無線LANモジュール名で検索してドライバをダウンロード 

 update&upgradeは基本ですね。 /etc/network/interfacesはループバックに関することしか書かれていなかったのでネットで調べながら色々書いてみましたが駄目でした。そもそもループバックに関することしか書いてないのに有線は普通に接続できるので、今回の件ではあまり関係がなかったのかも。

 

 最終的な解決方法

  • ubuntu16.04を削除してubuntu17.04を再インストールする

 最初はubuntu16.04を再インストールしようとした時、ふと思った。「新しいノートPCなんだからできるだけ新しいバージョンのubuntuじゃないと認識できないんじゃね?」

 ubuntuはそのまま調べると16.04か17.10のどちらかがインストールできますが、「ubuntu17.04」と検索すればインストールできる所が見つかるはず。インストールしようとすると、もうインストール途中から認識してくれたよ...。

 

ここから学んだことは

 

新しいPCには新しいバージョンのOSを入れよう!

 ちなみにubuntuは17.10があるのに、なぜ17.04を入れたのかというと、某プロジェクトの◯橋が17.10を入れて苦悩したというLTを見たから。(その時はまだ10月以前だったけど)

 

 

 

 

 

 

ICTSC予選の感想

 

何か少ないな、もう少し何か書きたいけど書くことがない。

おや?先週ICTSCの予選があったではないか!

某プロジェクトでの結果は16位でしたが初出場校枠で予選通過できました!

ということで解いた問題の感想(write upではない)を書いていきます。後で分離しますね。

 

私は団体の中で問2と問7に挑戦しました。

 

問3  infrastructure Knowledge

 問3はネットワークの知識問題を4択から選んだり記述で解いたりしていました。内容としてはプロトコルの問題や光ファイバなどの問題が出ました。難易度としては工学院大学の講義内容の百万倍難しかったです。問題を一問一問載せていくのは果てしないので他の人のwrite upを探してください。お茶にも確認してもらってから出したはずですが得点は65/150点でした。全然解けていないですね。ごめんなさい。

問7    MySQL

 問7はMySQLを使ってデータベースの中から必要な情報を取り出します。これは書きやすいので詳細を書いていきます。

 

 会社の社内の統計データをまとめてほしいという問題。データベースには2つのテーブルがあり中身は

employee (社員の基礎情報)

  id int(11), name varchar(255), sex char(1), deleted_at datetime

ID(主キー) 名前 性別 退社日(現在勤めている人はnull)

 

monthly_salary (社員の月ごとの給料)

 id int(11), employee_id int(11) , amount int(11) ,month varchar(255)

 ID(主キー)  employeeのID もらった給料 月(3文字英字)

 

ちょっと時間がないので問題と答えを貼っていきます。

 

# 1. 現在の総社員数は何人ですか
クエリ(SQL):

SELECT
    COUNT(*) AS 総人数
FROM
    employee
WHERE
    deleted_at IS NULL;

f:id:uragou:20171222002514p:plain

 

# 2. ユニークな名前の一覧と、そのそれぞれの名前の人は何人いるでしょうか
クエリ(SQL):

SELECT NAME
    ,
    COUNT(NAME)
FROM
    employee
WHERE
    deleted_at IS NULL
GROUP BY NAME
    ;

 f:id:uragou:20171222002434p:plain

# 3. 男性の人数、女性の人数はそれぞれ何人ですか
クエリ(SQL):

SELECT
    sex,
    COUNT(sex)
FROM
    employee
WHERE
    deleted_at IS NULL
GROUP BY
    sex;

 

f:id:uragou:20171222002525p:plain

# 4. 月ごとにこの会社が支払った賃金の合計はいくらでしょうか。また、上から金額が高い順に並べてください
クエリ(SQL):

SELECT
    MONTH,
    SUM(amount) AS 支払金額
FROM
    monthly_salary
WHERE EXISTS
    (
    SELECT
        id
    FROM
        employee
    WHERE
        monthly_salary.employee_id = employee.id AND deleted_at IS NULL
)
GROUP BY
    MONTH
ORDER BY
    支払金額
DESC
    ;

 f:id:uragou:20171222002537p:plain

# 5. この会社の平均年収はいくらでしょうか
クエリ(SQL):

SELECT
    AVG(年収) AS 平均年収
FROM
    (
    SELECT
        employee_id,
        SUM(amount) AS 年収
    FROM
        monthly_salary
    WHERE EXISTS
        (
        SELECT
            id
        FROM
            employee
        WHERE
            monthly_salary.employee_id = employee.id AND deleted_at IS NULL
    )
GROUP BY
    employee_id
) AS nensyu;

 

f:id:uragou:20171222002619p:plain

 注意するべきはどの問題も退社した社員を除く必要があるところです。私はうっかりさんなので元のデータを残すのを忘れましたが、employeeテーブルには退社した社員が4人ほどいた気がする。そのためどの問題でも退社した社員を除くために「WHERE deleted_at IS NULL」を入れます。

 

問1は上の点だけ注意すれば後はやるだけ。

問2は名前でグループ化してカウントすれば目的のデータを集められます。

問3もそれの性別バージョン。

問4はmonthly_salaryから月ごとに支払った賃金の合計を算出しますが、退社した社員を除くがありますが、このテーブルには退社したかどうかのデータがないため、EXISTS(相関副問合せ)でemployeeテーブルから退社していない人を抽出しました。

このデータベースはmonthly_salaryのemployee_idとemployeeのidが対応しているので、employee内で退社した人のidを調べて退社していない人の中の給料を月ごとにグループ化してsumで合計を求めました。

 

問5は もっと面倒になってFROM内でEXISTSを使うというわけの分からないものになってしまいました。FROM内にあるのは、退職した人を除いた社員達の年収を表したものであり、その表から平均年収を出しています。

 

この問題は130/150点でした。20点減点の原因は、このブログでは分かりやすく改行しているクエリを一問一行で送り付けたことや、途中で面倒になってASによる分かりやすい名前への変更をしなかったこととか、あとはEXISTSを使ったことでしょうか。調べるとinner joinを使って表の結合する方が早いとかなんとからしいので、次こんな問題出たらjoin的なのを試してみたいです。