読者です 読者をやめる 読者になる 読者になる

コケッココケッコ

コケコッコー

AOJ 0035 Is it Convex?

  • 問題

凹みの検知 | Aizu Online Judge

2次元座標上に四角形が与えられる。凹みがなければ YES、凹みがあれば NOと出力せよ

  • 解法

外積を取って符号を見る

vec(A, B), vec(A, C)の外積を取る→符号を覚えておく

vec(B, C), vec(B, D)の外積を取り、符号が変わっていたら凹みあり、符号が同じなら以下vec(D,A),vec(D,B)の外積を取るまで続ける。

符号が最後まで同じなら凹みなし。

  • プログラム
import java.io.IOException;
import java.util.*;

class Point {
    double x;
    double y;
    Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public void setX(double x) {
        this.x = x;
    }

    public double getY() {
        return y;
    }

    public void setY(double y) {
        this.y = y;
    }
}

class Vec {
    Point a;
    Point b;
    Vec(Point a, Point b) {
        this.a = a;
        this.b = b;
    }
}

class MathUtil {
    /**
    * 外積を求める。
    *     Q
    *   /
    *   /
    *  C -------- P
    *
    * @param p
    * @param c
    * @param q
    * @return >0: 左回り、 <0:右回り、 0:Q,C,Pは一直線上にある
     */
    public static double outProd(Point c, Point p, Point q) {
        return (p.getX() - c.getX()) * (q.getY() - c.getY()) - (p.getY() - c.getY()) * (q.getX() - c.getX());
    }

    public static boolean isZero(long EPS, double val) {
        return Math.abs(val) <= EPS;
    }
}

/**
 */
class Main {
    final static int N = 10;

    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String[] strArr = in.nextLine().split(",");
            double[] intArr = new double[strArr.length];
            for(int i=0;i<intArr.length;i++) {
                intArr[i] = Double.parseDouble(strArr[i]);
            }
            List<Point> points = new ArrayList<>();
            for(int i=0;i<intArr.length;i+=2) {
                double a = intArr[i];
                double b = intArr[i+1];
                points.add(new Point(a, b));
            }
            solve(points);
        }
    }

    public static void solve(List<Point> pts) {
        double prev = 0;
        int n =pts.size();
        for(int i=0;i<pts.size();i++) {
            double ret = MathUtil.outProd(pts.get(i%n), pts.get((i+1)%n), pts.get((i+2)%n));
            if(MathUtil.isZero((long)(1e-9), ret)) {
                continue;
            }
            if(ret * prev < 0) {
                System.out.println("NO");
                return;
            }
            prev = ret;
        }
        System.out.println("YES");
    }
}

3月の目標

概要

3月の目標を決めよう * 来週までにLPIC 304を取得する Xen,KVMを入れてみて触ってみる 黒本を5周する ** 金曜に304試験を受ける

これや!

9日間でLPIC Level.2を取得

概要

Linuxのよさに惚れ込み、LPICの勉強に専念している。今回はLPIC Level.2を9日間で取得したので概要を記す。

参考書籍

Linux教科書 LPIC レベル2 スピードマスター問題集 Version4.0対応

Linux教科書 LPIC レベル2 スピードマスター問題集 Version4.0対応

スピードマスター1つのみ

スケジュール

スケジュールは以下の通り。社会人ですので退社後に必死で勉強しました。退社後はスピードマスターに集中しました。

  • 月曜〜木曜:LPIC 201の勉強
  • 金曜:LPIC 201の2周目
  • 土曜〜月曜:お昼にLPIC 201を受験、LPIC 202の勉強
  • 火曜:LPIC 202の2周目、夕方にLPIC 202を受験

勉強時間

雑感

スピードマスター1冊を2周やればおそらく受かると思われる。ただし202については覚える範囲がとてつもなく広いので、実際にbind9やsquidサーバを構築し体で覚える必要があると思う。

点数

  • LPIC 201: 640 / 800点
  • LPIC 202: 540 / 880点

LPIC 202は3日程度しか勉強しなかったため点数が低い。あと1週間あれば700以上取れたと思う。

HDDのパフォーマンス測定

概要

I/Oがボトルネックになる場合、まっさきにHDDのパフォーマンスを測定したくなります。 本記事では、I/Oの計測方法をざっと記載します。

インストール

  • hdparmを入れてください. 例) sudo pacman -S hdparm

HDDの情報を表示

$ sudo hdparm -I /dev/sda
/dev/sda:

ATA device, with non-removable media
    Model Number:       ST2000DL003-9VT166                      
    Serial Number:      5YD54FVB
    Firmware Revision:  CC32    
    Transport:          Serial, SATA Rev 3.0
Standards:
    Used: unknown (minor revision code 0x0029) 
    Supported: 8 7 6 5 
    Likely used: 8
Configuration:
    Logical     max current
    cylinders   16383   16383
    heads       16  16
    sectors/track   63  63
    --
    CHS current addressable sectors:    16514064
    LBA    user addressable sectors:   268435455
    LBA48  user addressable sectors:  3907029168
    Logical/Physical Sector size:           512 bytes
    device size with M = 1024*1024:     1907729 MBytes
    device size with M = 1000*1000:     2000398 MBytes (2000 GB)
    cache/buffer size  = unknown
    Nominal Media Rotation Rate: 5900
Capabilities:
    LBA, IORDY(can be disabled)
    Queue depth: 32
    Standby timer values: spec'd by Standard, no device specific minimum
    R/W multiple sector transfer: Max = 16  Current = ?
    Recommended acoustic management value: 254, current value: 0
    DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
         Cycle time: min=120ns recommended=120ns
    PIO: pio0 pio1 pio2 pio3 pio4 
         Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
    Enabled Supported:
       *    SMART feature set
            Security Mode feature set
       *    Power Management feature set
       *    Write cache
       *    Look-ahead
       *    Host Protected Area feature set
       *    WRITE_BUFFER command
       *    READ_BUFFER command
       *    DOWNLOAD_MICROCODE
            SET_MAX security extension
            Automatic Acoustic Management feature set
       *    48-bit Address feature set
       *    Device Configuration Overlay feature set
       *    Mandatory FLUSH_CACHE
       *    FLUSH_CACHE_EXT
       *    SMART error logging
       *    SMART self-test
       *    General Purpose Logging feature set
       *    WRITE_{DMA|MULTIPLE}_FUA_EXT
       *    64-bit World wide name
            Write-Read-Verify feature set
       *    WRITE_UNCORRECTABLE_EXT command
       *    {READ,WRITE}_DMA_EXT_GPL commands
       *    Segmented DOWNLOAD_MICROCODE
       *    Gen1 signaling speed (1.5Gb/s)
       *    Gen2 signaling speed (3.0Gb/s)
       *    Gen3 signaling speed (6.0Gb/s)
       *    Native Command Queueing (NCQ)
       *    Phy event counters
       *    READ_LOG_DMA_EXT equivalent to READ_LOG_EXT
            Device-initiated interface power management
       *    Software settings preservation
       *    SMART Command Transport (SCT) feature set
       *    SCT Read/Write Long (AC1), obsolete
       *    SCT Write Same (AC2)
       *    SCT Features Control (AC4)
       *    SCT Data Tables (AC5)
            unknown 206[7]
            unknown 206[12] (vendor specific)
            unknown 206[13] (vendor specific)
Security: 
    Master password revision code = 65534
        supported
    not enabled
    not locked
    not frozen
    not expired: security count
        supported: enhanced erase
    330min for SECURITY ERASE UNIT. 330min for ENHANCED SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: 5000c5003e34779f
    NAA     : 5
    IEEE OUI    : 000c50
    Unique ID   : 03e34779f
Checksum: correct

パフォーマンス測定

$ sudo hdparm -d0 -t /dev/sda  (DMA無効)

/dev/sda:
 setting using_dma to 0 (off)
 HDIO_SET_DMA failed: Inappropriate ioctl for device
 HDIO_GET_DMA failed: Inappropriate ioctl for device
 Timing buffered disk reads: 374 MB in  3.01 seconds = 124.33 MB/sec
$ sudo hdparm -d1 -t /dev/sda (DMA有効)

/dev/sda:
 setting using_dma to 1 (on)
 HDIO_SET_DMA failed: Inappropriate ioctl for device
 HDIO_GET_DMA failed: Inappropriate ioctl for device
 Timing buffered disk reads: 388 MB in  3.00 seconds = 129.12 MB/sec

LPIC Level.1を10日で取得した

概要

Linuxプログラミングインタフェースを読むにつれて、資格を取得したい欲が出てきた。 某検索会社の友人がLPIC Level.1 を受験するとのことだったので私も取得することにした。

LPICは以下2つの試験に合格する必要がある

それぞれ受験料が15,000円ほどであり高額なため受験を躊躇していたが資格は自己研鑽のためにやむなしと判断し受けることにした。

受験料1000円引きのバウチャーを手に入れる

以下のping-tにてLPICのバウチャー(受験チケット)を割引価格で入手した。クレジットカードで決済すると即座にバウチャー番号がメールにて届くので、その番号をテストセンター予約の際に入力した。

ping-t.com

勉強期間

LPIC 101、LPIC 102それぞれ5日ほど勉強した。したがって、総勉強時間は10日である。

戦略

LPIC 101, LPIC 102は試験範囲がかぶらないため、別の日に受験した

  • LPIC 101 (3/6受験)
  • LPIC 102 (3/11受験)

教材

対策にあたっては、以下の教材を利用した

Linux教科書 LPICレベル1 スピードマスター問題集 Version4.0対応

Linux教科書 LPICレベル1 スピードマスター問題集 Version4.0対応

この1冊さえやれば対策は十分である。問題集は2周し、解説を熟読した。

結果

500点以上で合格

  • LPIC 101 (680/800点満点)
  • LPIC 102 (660/800点満点)

感想

700点は超えている手応えであったがまさかの600点台。LPIC2の対策本は月曜に届くのでそれまでは自宅サーバでBINDの設定などに取り組む

arch linux + LVM + UEFI + GPT なインストール手順

概要

仕事で用いている開発環境はLinuxオンリーであるが、自宅のデスクトップPCはwindowsを利用している。 TVチューナがwindowsのみしか対応していないなどでLinuxのインストールを躊躇していたが、やはり開発には不便なのでLinuxを入れることにした。

手順

GDISK

  • arch linuxインストーラをUSBから起動する
  • gdisk /dev/sda
  • Command (? for help):o
  • Command (? for help):n
  • Permission number: 1
  • First sector : 何も押さずエンター
  • Last sector : +512M
  • Hex code or GUID : EF00
  • Command (? for help):n
  • Permission number: 2
  • First sector : 何も押さずエンター
  • Last sector : ~100%
  • Hex code or GUID : 8200

これで、以下のパーティションが作成された。 * ESP (512MB) * 残り (LVMで使う)

LVM

  • ESPのフォーマット
  • mkfs.vfat -F32 /dev/sda1
  • LVM
  • pvcreate /dev/sda2
  • vgcreate main /dev/sda2
  • lvcreate -L 100G -n root main
  • lvcreate -L 70G -n usr main
  • lvcreate -L 30G -n tmp main
  • lvcreate -L 100G -n var main
  • lvcreate -L 100% -n home main

  • 色々フォーマットする。ファイルシステムはお好みで。私はXFSにしました。 

  • mkfs.xfs /dev/main/root
  • mkfs.xfs /dev/main/usr
  • mkfs.xfs /dev/main/var
  • mkfs.xfs /dev/main/home
  • mkfs.xfs /dev/main/tmp
  • mkswap /dev/main/swap
  • swapon /dev/main/swap

パーティションをマウントする

  • mount /dev/main/root /mnt
  • mount /dev/main/usr /mnt/usr
  • mount /dev/main/var /mnt/var
  • mount /dev/main/home /mnt/home
  • mount /dev/main/tmp /mnt/tmp
  • mkdir -p /mnt/boot/efi
  • mount /dev/sda1 /mnt/boot/efi

install

  • pacstrap -i /mnt base base-devel

fstab

  • genfstab -U -p /mnt >> /mnt/etc/fstab

chroot

各種設定

  • passwd (ルートのパスワードを変更)
  • ユーザを追加するなりしてください

grub

reboot

BIOSを起動する

  • 私のマザボASUSではDELキーを連打
  • Advanced Mode
  • UEFI shellを起動するボタンをクリック 
  • GRUBが起動するので、起動したいカーネルを選ぶ
  • efibootmgr -c -g -d /dev/sda -p 1 -w -L “Arch Linux(GRUB)” -l /EFI/arch/grubx64.efi
  • reboot

archを起動する

  • 再起動するまで待てば、GRUBが起動しArchが起動するはず。わーい 

次の記事では、ディスプレイマネージャやウィンドウマネージャを入れていきます。

参考

https://wiki.archlinux.org/index.php/installation_guide

http://note.kurodigi.com/archlinux-uefi-install/