平衡点


2008/09/07

_ 学会発表終了

疲れた.

VMware 上の Windows XP で PowerPoint を使ってみたのだけれど, 図が大くなると頻繁にスワップアウトして, 画像が出なくなる, という現象に遭遇.


2008/09/09

_ Rails で文献管理システムを作ってみるよ(2/n)

前回はこちら.

  • 本日のお品書き
    • test の作成, 修正, 追加
    • Article 作成時の修正
      • (start|end)_page は integer で渡す. model でそれをチェックする.
      • year は Date オブジェクトを渡す. 必要なのは year のみ.

の予定でしたが,方針を変えて, 勉強がてら RSpec on Rails を使用してみます.前回, 既に scaffold を使って model, view, controller を作成しているのですが, これを一度忘れてみましょう(なんてこった).

$ ruby script destroy scaffold Article

さよ〜なら〜

RSpec on Rails の導入

ついでに, Selenium on Rails も導入しておきます.

$ rake db:create
$ ruby script/plugin install http://rspec.rubyforge.org/svn/tags/CURRENT/rspec
$ ruby script/plugin install http://rspec.rubyforge.org/svn/tags/CURRENT/rspec_on_rails
$ ruby script/plugin install http://svn.coderepos.org/share/lang/ruby/selenium_rc_spec

RSpec の準備

$ ruby script/generate rspec

Article モデルの作成

まずは rspec_model を作成します.

$ ruby script/generate rspec_model Article \
  title:string \
  authors:string \
  year:datetime \
  journal:string \
  volume:integer \
  start_page:integer \
  end_page:integer
  ...
$ rake db:migrate
$ rake db:text:clone   # Spec 用データベースを生成

というわけで, 以後は

  1. Spec で振る舞いを記述
  2. テスト(赤)
  3. コードの実装
  4. テスト(緑)
  5. リファクタリング

の順に開発を行なっていきます.

振る舞いの記述

spec/model/article_spec.rb で Spec を記述します. 何も記述していないと,

require File.dirname(__FILE__) + '/../spec_helper'

describe Article do
  before(:each) do
    @article = Article.new
  end

  it "should be valid" do
    @article.should be_valid
  end
end

となっていると思いますので, これを修正します. 例えば「タイトルが空の場合は Article を記述できない」という Spec を記述するならば

require File.dirname(__FILE__) + '/../spec_helper'

describe Article," を生成するとき" do
  before(:each) do
    @title = 'タイトルの例'
    @authors = '著者の例'
    @year = '2004' # 年の例
    @journal = '雑誌の例'
    @volume = '雑誌の巻数の例'
    @start_page = '001' # start page の例
    @end_page = '020' # end page の例
  end

  it "は, title が空の場合 valid ではないこと" do
    @article = Article.new(
      :title => nil,
      :authors => @authors,
      :year=> @year,
      :journal => @journal,
      :volume => @volume,
      :start_page => @start_page,
      :end_page => @end_page)
    @article.should_not be_valid
  end
end

といった感じですかね. ちなみに, ファイルは UTF-8 で作成しておきます. あと, config/environment.rb の冒頭に $KCODE='u' を追加しておきます.

テスト(赤)

ここで spec でテストを行なうと,

$ rake spec
 ...
 1)
 'Article を生成するとき は, title が空の場合 valid ではないこと' FAILED
 expected valid? to return false, got true
 ./spec/models/article_spec.rb:23:

 Finished in 0.339274 seconds

 1 example, 1 failure
 rake aborted!

となって, app/model で実装していないので, テストは失敗します.

コードの実装

次に app/model/article.rb を実装します. 以下の様に.

class Article < ActiveRecord::Base

  validates_presence_of :title
end
テスト(緑)

そして spec を実行すると

$ rake spec
  ...
  .

  Finished in 0.339777 seconds

  1 example, 0 failures

となります. spec に記述した振舞い通りに model が動いていることが test された訳です.

最終的に

Article モデルはどうしたかったのか, と言えば,

  • title, authors, year は必須.
  • start_page と end_page は, start_page <= end_page とする.

でした.

そんな訳で, 書いた spec とモデルは以下の通り

require File.dirname(__FILE__) + '/../spec_helper'
require 'date'

describe Article," を生成するとき" do
  before(:each) do
    @title = 'タイトルの例'
    @authors = '著者の例'
    @year = Date.today
    @journal = '雑誌の例'
    @volume = '雑誌の巻数の例'
    @start_page = '001' # start page の例
    @end_page = '020' # end page の例
  end

  it "は, title が空の場合 valid ではないこと" do
    @article = Article.new(
      :title => nil,
      :authors => @authors,
      :year=> @year,
      :journal => @journal,
      :volume => @volume,
      :start_page => @start_page,
      :end_page => @end_page)
    @article.should_not be_valid
  end

  it "は, authors が空の場合 valid ではないこと" do
    @article = Article.new(
      :title => @title,
      :authors => nil,
      :year=> @year,
      :journal => @journal,
      :volume => @volume,
      :start_page => @start_page,
      :end_page => @end_page)
    @article.should_not be_valid
  end

  it "は, year が空の場合 valid ではないこと" do
    @article = Article.new(
      :title => @title,
      :authors => @authors,
      :year=> nil,
      :journal => @journal,
      :volume => @volume,
      :start_page => @start_page,
      :end_page => @end_page)
    @article.should_not be_valid
  end

  it "は, start_page < end_page でなければならないこと" do
    @article = Article.new(
      :title => @title,
      :authors => @authors,
      :year=> @year,
      :journal => @journal,
      :volume => @volume,
      :start_page => @end_page,
      :end_page => @start_page)
    @article.should_not be_valid
  end

end

で, これをテスト(緑)にしたモデルが

class Article < ActiveRecord::Base
  require 'date'

  validates_presence_of :title, :authors, :year

  protected
  def validate
    if start_page > end_page
      errors.add :start_page, "始めのページが最後のページより大きいよ?"
    end
  end
end

次は

  • fixtures を使って, spec をもっと簡潔に書く
  • controller, view も spec を使うよ

へ続きます. 多分.

_ HDD の I/O エラー

数日前にも書いたけれど, また出た. どうも同じ場所らしい.

$ cp /var/log/syslog* ~/tmp
$ cd ~/tmp
$ gzip -d syslog*.gz
$ grep sector syslog* | grep error

そうすると

hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, high=3, low=14982393, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, high=3, low=14982393, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, high=3, low=14982393, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, high=3, low=14982393, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, high=3, low=14982393, sector=65314034
end_request: I/O error, dev hda, sector 65314034
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=65314041, high=3, low=14982393, sector=65314034
end_request: I/O error, dev hda, sector 65314034

と全部同じ場所ですなぁ... ふーむ.

とりあえずバックアップとって, 明日 fsck.ext3 -c かけてみるかな.

_ kernel を 2.6.24 -> 2.6.26 へ

lenny に 2.6.26 が来た + VMware Workstation の 6.0.5 が出た(kernel 2.6.26 で問題無く build できる, らしい)ので, 使用している laptop の kernel を version up してみた.

先ず Debian パッケージで提供されている linux-image-2.6.26-1-686 を導入して, 使用できるかを試しておく. カスタムカーネルから boot できない時の保険のために, 公式パッケージのカーネルはいつでも install している. 無事 boot できて, 普通に動くようなら, そこから作業開始.

$ sudo apt-get install linux-tree-2.6.26
...
$ cd /usr/src
$ tar xf linux-source-2.6.26.tar.bz2
$ ln -s linux-source-2.6.26 linux
$ cd linux
$ patch -p1 < ../patches/tuxonice-3.0-rc7a-for-2.6.26.patch
$ patch -p1 < ../patches/pcc_acpi.patch_0.94
$ make oldconfig
...

横着に make oldconfig で Debian パッケージの config をコピーしている. 実際に config が欲しいだけなら, deb パッケージを適当に展開して, config-2.6.26-1-686 を取り出せば良い.

幾つか設定して, 設定後は以下.

/boot/config-2.6.26-1-686 2008-08-29 01:28:24.000000000 +0900
+++ /usr/src/linux/.config	2008-09-09 15:25:43.000000000 +0900
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.26
-# Thu Aug 28 10:32:31 2008
+# Linux kernel version: 2.6.26.deutzia
+# Tue Sep  9 15:25:43 2008
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -35,7 +35,7 @@
 # CONFIG_GENERIC_TIME_VSYSCALL is not set
 CONFIG_ARCH_HAS_CPU_RELAX=y
 CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
 # CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
 CONFIG_ARCH_HIBERNATION_POSSIBLE=y
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
@@ -46,12 +46,7 @@
 CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_32_SMP=y
-CONFIG_X86_HT=y
 CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
 CONFIG_KTIME_SCALAR=y
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"

@@ -59,7 +54,7 @@
 # General setup
 #
 CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
+CONFIG_BROKEN_ON_SMP=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 CONFIG_LOCALVERSION=""
 # CONFIG_LOCALVERSION_AUTO is not set
@@ -82,7 +77,6 @@
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_CGROUP_NS=y
 CONFIG_CGROUP_DEVICE=y
-CONFIG_CPUSETS=y
 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
 CONFIG_GROUP_SCHED=y
 CONFIG_FAIR_GROUP_SCHED=y
@@ -93,7 +87,6 @@
 # CONFIG_RESOURCE_COUNTERS is not set
 CONFIG_SYSFS_DEPRECATED=y
 CONFIG_SYSFS_DEPRECATED_V2=y
-CONFIG_PROC_PID_CPUSET=y
 CONFIG_RELAY=y
 CONFIG_NAMESPACES=y
 CONFIG_UTS_NS=y
@@ -149,7 +142,6 @@
 CONFIG_MODVERSIONS=y
 # CONFIG_MODULE_SRCVERSION_ALL is not set
 CONFIG_KMOD=y
-CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_LBD=y
 CONFIG_BLK_DEV_IO_TRACE=y
@@ -178,7 +170,7 @@
 CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=y
 CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_SMP=y
+# CONFIG_SMP is not set
 CONFIG_X86_PC=y
 # CONFIG_X86_ELAN is not set
 # CONFIG_X86_VOYAGER is not set
@@ -203,10 +195,10 @@
 # CONFIG_M586 is not set
 # CONFIG_M586TSC is not set
 # CONFIG_M586MMX is not set
-CONFIG_M686=y
+# CONFIG_M686 is not set
 # CONFIG_MPENTIUMII is not set
 # CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
+CONFIG_MPENTIUMM=y
 # CONFIG_MPENTIUM4 is not set
 # CONFIG_MK6 is not set
 # CONFIG_MK7 is not set
@@ -227,14 +219,14 @@
 # CONFIG_X86_GENERIC is not set
 CONFIG_X86_CPU=y
 CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=5
+CONFIG_X86_L1_CACHE_SHIFT=6
 CONFIG_X86_XADD=y
-CONFIG_X86_PPRO_FENCE=y
 CONFIG_X86_WP_WORKS_OK=y
 CONFIG_X86_INVLPG=y
 CONFIG_X86_BSWAP=y
 CONFIG_X86_POPAD_OK=y
 CONFIG_X86_GOOD_APIC=y
+CONFIG_X86_INTEL_USERCOPY=y
 CONFIG_X86_USE_PPRO_CHECKSUM=y
 CONFIG_X86_P6_NOP=y
 CONFIG_X86_TSC=y
@@ -245,12 +237,11 @@
 CONFIG_HPET_EMULATE_RTC=y
 CONFIG_DMI=y
 # CONFIG_IOMMU_HELPER is not set
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
 CONFIG_PREEMPT_NONE=y
 # CONFIG_PREEMPT_VOLUNTARY is not set
 # CONFIG_PREEMPT is not set
+CONFIG_X86_UP_APIC=y
+CONFIG_X86_UP_IOAPIC=y
 CONFIG_X86_LOCAL_APIC=y
 CONFIG_X86_IO_APIC=y
 CONFIG_X86_MCE=y
@@ -291,7 +282,6 @@
 CONFIG_MTRR=y
 # CONFIG_X86_PAT is not set
 CONFIG_EFI=y
-# CONFIG_IRQBALANCE is not set
 CONFIG_SECCOMP=y
 # CONFIG_HZ_100 is not set
 CONFIG_HZ_250=y
@@ -304,7 +294,6 @@
 CONFIG_PHYSICAL_START=0x100000
 # CONFIG_RELOCATABLE is not set
 CONFIG_PHYSICAL_ALIGN=0x100000
-CONFIG_HOTPLUG_CPU=y
 # CONFIG_COMPAT_VDSO is not set
 CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y

@@ -313,12 +302,34 @@
 #
 CONFIG_PM=y
 # CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP_SMP=y
 CONFIG_PM_SLEEP=y
 CONFIG_SUSPEND=y
 CONFIG_SUSPEND_FREEZER=y
 CONFIG_HIBERNATION=y
 CONFIG_PM_STD_PARTITION=""
+CONFIG_TOI_CORE=y
+
+#
+# Image Storage (you need at least one allocator)
+#
+CONFIG_TOI_FILE=y
+CONFIG_TOI_SWAP=y
+
+#
+# General Options
+#
+CONFIG_TOI_DEFAULT_PRE_HIBERNATE=""
+CONFIG_TOI_DEFAULT_POST_HIBERNATE=""
+CONFIG_TOI_CRYPTO=y
+CONFIG_TOI_USERUI=y
+CONFIG_TOI_USERUI_DEFAULT_PATH="/usr/lib/tuxonice-userui/tuxoniceui_text"
+# CONFIG_TOI_KEEP_IMAGE is not set
+CONFIG_TOI_REPLACE_SWSUSP=y
+CONFIG_TOI_CHECKSUM=y
+CONFIG_TOI_DEFAULT_WAIT=25
+CONFIG_TOI_DEFAULT_EXTRA_PAGES_ALLOWANCE=500
+# CONFIG_TOI_PAGEFLAGS_TEST is not set
+CONFIG_TOI=y
 CONFIG_ACPI=y
 CONFIG_ACPI_SLEEP=y
 CONFIG_ACPI_PROCFS=y
@@ -333,10 +344,10 @@
 CONFIG_ACPI_DOCK=m
 CONFIG_ACPI_BAY=m
 CONFIG_ACPI_PROCESSOR=m
-CONFIG_ACPI_HOTPLUG_CPU=y
 CONFIG_ACPI_THERMAL=m
 CONFIG_ACPI_WMI=m
 CONFIG_ACPI_ASUS=m
+CONFIG_ACPI_PANASONIC=m
 CONFIG_ACPI_TOSHIBA=m
 # CONFIG_ACPI_CUSTOM_DSDT is not set
 CONFIG_ACPI_BLACKLIST_YEAR=0
@@ -347,14 +358,7 @@
 CONFIG_X86_PM_TIMER=y
 CONFIG_ACPI_CONTAINER=m
 CONFIG_ACPI_SBS=m
-CONFIG_X86_APM_BOOT=y
-CONFIG_APM=m
-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
-# CONFIG_APM_DO_ENABLE is not set
-# CONFIG_APM_CPU_IDLE is not set
-# CONFIG_APM_DISPLAY_BLANK is not set
-# CONFIG_APM_ALLOW_INTS is not set
-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
+# CONFIG_APM is not set

 #
 # CPU Frequency scaling
@@ -898,6 +902,7 @@
 CONFIG_MKISS=m
 CONFIG_6PACK=m
 CONFIG_BPQETHER=m
+# CONFIG_DMASCC is not set
 CONFIG_SCC=m
 # CONFIG_SCC_DELAY is not set
 # CONFIG_SCC_TRXECHO is not set
@@ -1291,22 +1296,21 @@
 CONFIG_ENCLOSURE_SERVICES=m
 CONFIG_HP_ILO=m
 CONFIG_HAVE_IDE=y
-CONFIG_IDE=m
-CONFIG_BLK_DEV_IDE=m
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y

 #
 # Please see Documentation/ide/ide.txt for help/info on IDE drives
 #
 # CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_BLK_DEV_IDEDISK=y
 # CONFIG_IDEDISK_MULTI_MODE is not set
 CONFIG_BLK_DEV_IDECS=m
-CONFIG_BLK_DEV_DELKIN=m
-CONFIG_BLK_DEV_IDECD=m
-CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
-CONFIG_BLK_DEV_IDETAPE=m
-CONFIG_BLK_DEV_IDEFLOPPY=m
-# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_DELKIN is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
 # CONFIG_BLK_DEV_IDEACPI is not set
 # CONFIG_IDE_TASK_IOCTL is not set
 CONFIG_IDE_PROC_FS=y
@@ -1314,50 +1318,49 @@
 #
 # IDE chipset support/bugfixes
 #
-CONFIG_IDE_GENERIC=m
+# CONFIG_IDE_GENERIC is not set
 # CONFIG_BLK_DEV_PLATFORM is not set
-CONFIG_BLK_DEV_CMD640=m
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-CONFIG_BLK_DEV_IDEPNP=m
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
 CONFIG_BLK_DEV_IDEDMA_SFF=y

 #
 # PCI IDE chipsets support
 #
 CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_IDEPCI_PCIBUS_ORDER is not set
 # CONFIG_BLK_DEV_OFFBOARD is not set
 CONFIG_BLK_DEV_GENERIC=m
-CONFIG_BLK_DEV_OPTI621=m
-CONFIG_BLK_DEV_RZ1000=m
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
 CONFIG_BLK_DEV_IDEDMA_PCI=y
-CONFIG_BLK_DEV_AEC62XX=m
-CONFIG_BLK_DEV_ALI15X3=m
-CONFIG_BLK_DEV_AMD74XX=m
-CONFIG_BLK_DEV_ATIIXP=m
-CONFIG_BLK_DEV_CMD64X=m
-CONFIG_BLK_DEV_TRIFLEX=m
-CONFIG_BLK_DEV_CY82C693=m
-CONFIG_BLK_DEV_CS5520=m
-CONFIG_BLK_DEV_CS5530=m
-CONFIG_BLK_DEV_CS5535=m
-CONFIG_BLK_DEV_HPT34X=m
-# CONFIG_HPT34X_AUTODMA is not set
-CONFIG_BLK_DEV_HPT366=m
-CONFIG_BLK_DEV_JMICRON=m
-CONFIG_BLK_DEV_SC1200=m
-CONFIG_BLK_DEV_PIIX=m
-CONFIG_BLK_DEV_IT8213=m
-CONFIG_BLK_DEV_IT821X=m
-CONFIG_BLK_DEV_NS87415=m
-CONFIG_BLK_DEV_PDC202XX_OLD=m
-CONFIG_BLK_DEV_PDC202XX_NEW=m
-CONFIG_BLK_DEV_SVWKS=m
-CONFIG_BLK_DEV_SIIMAGE=m
-CONFIG_BLK_DEV_SIS5513=m
-CONFIG_BLK_DEV_SLC90E66=m
-CONFIG_BLK_DEV_TRM290=m
-CONFIG_BLK_DEV_VIA82CXXX=m
-CONFIG_BLK_DEV_TC86C001=m
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_ATIIXP is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_CS5535 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_JMICRON is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+CONFIG_BLK_DEV_PIIX=y
+# CONFIG_BLK_DEV_IT8213 is not set
+# CONFIG_BLK_DEV_IT821X is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+# CONFIG_BLK_DEV_TC86C001 is not set

 #
 # Other IDE chipsets support
@@ -1697,6 +1700,7 @@
 CONFIG_ENC28J60=m
 # CONFIG_ENC28J60_WRITEVERIFY is not set
 CONFIG_NET_VENDOR_RACAL=y
+# CONFIG_NI5010 is not set
 CONFIG_NI52=m
 CONFIG_NI65=m
 CONFIG_NET_TULIP=y
@@ -2080,6 +2084,7 @@
 #
 # ISDN feature submodules
 #
+# CONFIG_ISDN_DRV_LOOP is not set
 # CONFIG_ISDN_DIVERSION is not set

 #
@@ -2361,6 +2366,8 @@
 CONFIG_SX=m
 # CONFIG_RIO is not set
 CONFIG_STALDRV=y
+# CONFIG_STALLION is not set
+# CONFIG_ISTALLION is not set
 CONFIG_NOZOMI=m

 #
@@ -2456,6 +2463,7 @@
 CONFIG_I2C_AMD756=m
 CONFIG_I2C_AMD756_S4882=m
 CONFIG_I2C_AMD8111=m
+# CONFIG_I2C_ELEKTOR is not set
 CONFIG_I2C_I801=m
 CONFIG_I2C_I810=m
 CONFIG_I2C_PIIX4=m
@@ -3740,7 +3748,7 @@
 CONFIG_EXT2_FS_POSIX_ACL=y
 CONFIG_EXT2_FS_SECURITY=y
 # CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS=y
 CONFIG_EXT3_FS_XATTR=y
 CONFIG_EXT3_FS_POSIX_ACL=y
 CONFIG_EXT3_FS_SECURITY=y
@@ -3748,11 +3756,11 @@
 CONFIG_EXT4DEV_FS_XATTR=y
 CONFIG_EXT4DEV_FS_POSIX_ACL=y
 CONFIG_EXT4DEV_FS_SECURITY=y
-CONFIG_JBD=m
+CONFIG_JBD=y
 # CONFIG_JBD_DEBUG is not set
 CONFIG_JBD2=m
 # CONFIG_JBD2_DEBUG is not set
-CONFIG_FS_MBCACHE=m
+CONFIG_FS_MBCACHE=y
 CONFIG_REISERFS_FS=m
 # CONFIG_REISERFS_CHECK is not set
 # CONFIG_REISERFS_PROC_INFO is not set
@@ -4122,7 +4130,7 @@
 # Digest
 #
 CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD4=y
 CONFIG_CRYPTO_MD5=y
 CONFIG_CRYPTO_MICHAEL_MIC=m
 CONFIG_CRYPTO_SHA1=m
@@ -4159,6 +4167,7 @@
 #
 CONFIG_CRYPTO_DEFLATE=m
 CONFIG_CRYPTO_LZO=m
+CONFIG_CRYPTO_LZF=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_DEV_PADLOCK=m
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m

その後で

$ fakeroot make-kpkg --revision=`date '+%y%m%d'`+01 \
    --append-to-version=.`cat /etc/hostname` kernel-image

なんてして build 開始. さてどうなるでしょう.

... install して, update-initramfs & update-grub したのち再起動をかけたら幸せになりました. 良い感じですね. background でイロイロ走らせることが多いので, preempt はサーバーで良い, のかなぁ. Timer は 250 のままで良いんだろうか


2008/09/14

_ SD カードを swap にする.

VMware for linux を使用していると, メモリは足りているハズなのに swap を使い始めてしまい, Host 側の動作がどんどん遅くなってしまう. 本体(HDD) 側の swap を使わなければ良いだろう, なんて安易な発想と「そういえば Let's Note には SD カードスロットがあった」ということで, SD カードを swap 領域にしてみることにする.

ちなみに,

# hdparm -vtT /dev/mmcblk0
/dev/mmcblk0:
readonly      =  0 (off)
readahead     = 256 (on)
geometry      = 62032/4/16, sectors = 3970048, start = 0
Timing cached reads:   1158 MB in  2.00 seconds = 578.96 MB/sec
Timing buffered disk reads:   22 MB in  3.01 seconds =   7.32 MB/sec

ということで. Let's Note CF-R4 の SD カードスロットの I/O Speed は最大 8 MB/s ということなので, ハードウェアとしては期待された速度が出ていると思うけれど, HDD と比べるとやはりちょっと遅め. このことが VMware 実行時にどれだけ影響が出るかは, やってみないとわからないけれど.


2008/09/23

_ Bash クックブック

買ってませんが. ruby を覚えて以来, 簡単な on liner まで ruby で書く癖がついてしまって, メインフレームに行って偶に困ったりします(とは言いつつ, メインフレームで最初にやることは zsh と ruby の install だったりしてwww).

最近は bash_profile に

ZSH=`which zsh`
if [ -f ${ZSH} ]; then
    ${ZSH} -l
    exit 0
fi

なんて仕込んでますが.

bashクックブック
Carl Albing, オライリージャパン, ¥5,789

おひとつ如何? > みっちー


2008/09/24

_ まったりも〜ど

GFD セミナーで, ちょっと座興を行ないました. 写真集はそのうち某所にあがるでしょうが, なんとこんな写真が www

ナイスショット.

_ CUPS の設定

以前は VMware 上の Windows からの印刷は samba 経由で行なっていたのだけれど, 何故か印刷できなくなったので, ジタバタしていた. 結局 samba 経由を止めて, CUPS の IPP 受付で印刷することに.

CUPS 側の設定

VMware 上の Windows のネットワーク設定は VMware の NAT. 振っているアドレスは, ここでは 192.168.XXX.YYY としておく(ところで, どなたか NAT 使用時に DHCP 切る設定ご存知ありません?).

先ず /etc/cups/cupsd.conf の修正

...
# Only listen for connections from the local machine.
#Listen localhost:631                  <-- コメントアウト
#Listen /var/run/cups/cups.sock        <-- コメントアウト
Port 631                               <-- 追加
...
<Location />
  # Restrict access to the server...
  Order allow,deny
  #Order Deny,Allow
  #Deny From All
  Allow From 127.0.0.1                 
  Allow From 192.168.XXX.              <-- 追加
</Location>
...

次に, /etc/mime.convs, /etc/raw.convs の修正. /etc/mime.convs の末尾の

...
application/octet-stream        application/vnd.cups-raw        0    -
...

のコメントアウトを元に戻す. また, /etc/raw.convs の

...
application/octet-stream        application/vnd.cups-raw        0       -
...

のコメントアウトを元に戻す.

CUPS を再起動した後, raw プリンタを追加しておく. ここでは CUPS-raw としておく.

Windows 側の設定

普通にインターネットプリンタの設定で, CUPS-raw を追加する. プリンタのドライバは別途必要なので, 適宜入手, install しておく.

追加の際には http://(CUPS のサーバ)/printers/CUPS-raw を指定すれば良い.

感想.

楽で良いわ. そういえば以前はなんで samba 経由にしようとしていたんだっけ?

_ Emacs で rej ファイルを処理する人への 10 のステップ

φ(._. )メモ

VTK-Ruby の 5.0.4 向けの patch は CMakeLists の修正だけで済んだけれど, 5.2 向けの修正は大変なので, 役に立ちそうな tips ですな.

...現実逃避に, 始めてしまいそうな予感大. でも, lenny に入る VTK が 5.0.4 なので, 当分始めないと思いますが.

_ 既存の Rails アプリ用に rspec を書く場合.

既に Model とか Controller がある場合に spec を書くには, どうするのかな?

... と呟いてみる.

_ whizzytex

whizzytex なるものを始めて知った.

試しに install してみた.

うーん. 嵌りそうなので, とりあえず敬遠することに. 便利そうなんだけどなぁ...


2008/09/25

_ 某所に ffmpeg を install ちう.

root 権限が無いので, ビルドしまくり.コーデックが沢山あって面倒だにゃぁ. イロイロ試行錯誤していたら, こんなエントリが.

なるほどー.

というわけで, ちょっと弄って某所で仕込み. ほとんど全て --prefix=${HOME} みたいなのをつければ良いだけ, かと思いきや, CFLAGS で -L${HOME}/lib -I${HOME}/include みたいなが必要(あたりまえ).

#-------------------------------------------------------------
# config
#-------------------------------------------------------------
INSTALL_PREFIX=${HOME}
ADD_PATH=${INSTALL_PREFIX}/bin
#-------------------------------------------------------------
# Version
#-------------------------------------------------------------
A52_SRC=a52dec-0.7.4
DIRAC_SRC=dirac-0.10.0
FAAC_SRC=faac-1.26
FAAD_SRC=faad2-2.6.1
GSM_SRC=gsm-1.0.12
AMRNB_SRC=amrnb-7.0.0.2
AMRWB_SRC=amrwb-7.0.0.3
LAME_SRC=lame-3.97
YASM_SRC=yasm-0.7.1
OGG_SRC=libogg-1.1.3
VORVIS_SRC=libvorbis-1.2.0
XVID_SRC=xvidcore-1.1.3
#-------------------------------------------------------------
# main
#-------------------------------------------------------------
all: build-depend ffmpeg
build-depend: yasm a52 dirac faac faad gsm ogg amrnb amrwb mp3lame x264 nut theora vorbis xvid
clean: yasm-clean a52-clean dirac-clean faad-clean faac-clean gsm-clean ogg-clean amrnb-clean amrwb-clean mp3lame-clean x264-clean nut-clean theora-clean vorbis-clean xvid-clean
distclean: yasm-distclean a52-distclean dirac-distclean faac-distclean faad-distclean gsm-distclean ogg-distclean amrnb-distclean amrwb-distclean mp3lame-distclean x264-distclean nut-distclean theora-distclean vorbis-distclean xvid-distclean
#-------------------------------------------------------------
# ffmpeg
#-------------------------------------------------------------
ffmpeg: ffmpeg-build
ffmpeg-repos:
	@if [ ! -d $@ ]; then \
	  svn co svn://svn.mplayerhq.hu/ffmpeg/trunk $@ ;\
	fi ;\
	cd ffmpeg-repos && svn update
ffmpeg-build: ffmpeg-repos
	cd $< ;\
	export PATH=${PATH}:${ADD_PATH} ;\
	LDFLAGS="-L${INSTALL_PREFIX}/lib" \
	CFLAGS="-I${INSTALL_PREFIX}/include -L${INSTALL_PREFIX}/lib" \
	PKG_CONFIG_PATH=${INSTALL_PREFIX}/lib/pkgconfig \
	./configure --prefix=${INSTALL_PREFIX} \
	--enable-gpl \
	--enable-nonfree \
	--enable-postproc \
	--enable-avfilter \
	--enable-avfilter-lavf \
	--enable-liba52 \
	--enable-liba52bin \
	--enable-libamr-nb \
	--enable-libamr-wb \
	--enable-libdirac \
	--enable-libfaac \
	--enable-libfaad \
	--enable-libfaadbin \
	--enable-libgsm \
	--enable-libmp3lame \
	--enable-libnut \
	--enable-libtheora \
	--enable-libvorbis \
	--enable-libx264 \
	--enable-libxvid ;\
	make && make install
ffmpeg-clean:
	cd ffmpeg-repos ;\
	make clean
#-------------------------------------------------------------
# liba52
#-------------------------------------------------------------
a52: liba52.a
${A52_SRC}.tar.gz:
	@if [ ! -f $@ ]; then \
	  wget http://liba52.sourceforge.net/files/$@ ; \
	fi ;\
	tar xf $@
liba52.a: ${A52_SRC}.tar.gz
	cd ${A52_SRC} ;\
	./configure --prefix=${INSTALL_PREFIX} ;\
	make && make install
a52-clean:
	cd ${A52_SRC} && make distclean
a52-distclean:
	rm -rf ${A52_SRC}*
#-------------------------------------------------------------
# dirac
#-------------------------------------------------------------
dirac: libdirac_decoder.a
${DIRAC_SRC}.tar.gz:
	@if [ ! -f $@ ]; then \
	  wget http://downloads.sourceforge.net/dirac/$@ ;\
	fi ;\
	tar xf $@
libdirac_decoder.a: ${DIRAC_SRC}.tar.gz
	cd ${DIRAC_SRC} ;\
	./configure --prefix=${INSTALL_PREFIX} ;\
	make && make install
dirac-clean:
	cd ${DIRAC_SRC} && make clean
dirac-distclean:
	rm -rf ${DIRAC_SRC}*
#-------------------------------------------------------------
# faac
#-------------------------------------------------------------
faac: libfaac.a
${FAAC_SRC}.tar.gz:
	if [ ! -f $@ ]; then \
	  wget http://downloads.sourceforge.net/faac/$@ ; \
	fi ;\
	tar xf $@
libfaac.a: ${FAAC_SRC}.tar.gz
	cd faac &&./bootstrap ;\
	./configure --prefix=${INSTALL_PREFIX}  && make && make install
faac2-clean:
	cd faac && make clean
faac-distclean:
	rm -rf faac*
#-------------------------------------------------------------
# faad
#-------------------------------------------------------------
faad: libfaad.a
${FAAD_SRC}.tar.gz:
	if [ ! -f $@ ]; then \
	  wget http://downloads.sourceforge.net/faac/$@ ; \
	fi ;\
	tar xf $@
libfaad.a: ${FAAD_SRC}.tar.gz
	cd faad2 &&./bootstrap ;\
	./configure --prefix=${INSTALL_PREFIX}  && make && make install
faad-clean:
	cd faad2 && make clean
faad-distclean:
	rm -rf faad2*
#-------------------------------------------------------------
# gsm
#-------------------------------------------------------------
gsm: libgsm.a
${GSM_SRC}.tar.gz:
	if [ ! -f $@ ]; then \
	  wget http://kbs.cs.tu-berlin.de/~jutta/gsm/$@ ; \
	fi ;\
	tar xf $@
libgsm.a:  ${GSM_SRC}.tar.gz
	cd gsm-1.0-pl12 && make &&  \
	make install INSTALL_ROOT=${INSTALL_PREFIX} \
	GSM_INSTALL_LIB=${INSTALL_PREFIX}/lib \
	GSM_INSTALL_INC=${INSTALL_PREFIX}/include 
gsm-clean:
	cd gsm-1.0-pl12 && make clean
gsm-distclean:
	rm -rf gsm-1.0-pl12*
#-------------------------------------------------------------
# amrnb
#-------------------------------------------------------------
amrnb: libamrnb.a
${AMRNB_SRC}.tar.bz2:
	@if [ ! -f $@ ]; then \
	  wget http://ftp.penguin.cz/pub/users/utx/amr/$@ ;\
	fi ;\
	tar xf $@
libamrnb.a: ${AMRNB_SRC}.tar.bz2
	cd ${AMRNB_SRC} ;\
	./configure --prefix=${INSTALL_PREFIX}  && make && make install
amrnb-clean:
	cd ${AMRNB_SRC} && clean
amrnb-distclean:
	rm -rf ${AMRNB_SRC}*
#-------------------------------------------------------------
# abrwb
#-------------------------------------------------------------
amrwb: libamrwb.a
${AMRWB_SRC}.tar.bz2:
	@if [ ! -f $@ ]; then \
	  wget http://ftp.penguin.cz/pub/users/utx/amr/$@ ;\
	fi ;\
	tar xf $@
libamrwb.a:  ${AMRWB_SRC}.tar.bz2
	cd ${AMRWB_SRC} ;\
	./configure --prefix=${INSTALL_PREFIX}  && make && make install
amrwb-clean:
	cd ${AMRWB_SRC} && clean
amrwb-distclean:
	rm -rf ${AMRWB_SRC}*
#-------------------------------------------------------------
# mp3lame
#-------------------------------------------------------------
mp3lame: libmp3lame.a
${LAME_SRC}.tar.gz:
	@if [ ! -f $@ ]; then \
	  wget http://downloads.sourceforge.net/lame/$@ ;\
	fi ;\
	tar xf $@
libmp3lame.a: ${LAME_SRC}.tar.gz
	cd ${LAME_SRC} ;\
	./configure --prefix=${INSTALL_PREFIX}  && make && make install
mp3lame-clean:
	cd ${LAME_SRC} && make clean
mp3lame-distclean:
	rm -rf ${LAME_SRC}*
#-------------------------------------------------------------
# yasm
#-------------------------------------------------------------
yasm: ${YASM_SRC}
${YASM_SRC}.tar.gz:
	@if [ ! -f $@ ]; then \
	  wget http://www.tortall.net/projects/yasm/releases/$@ ; \
	fi ;
	tar xf $@
${YASM_SRC}: ${YASM_SRC}.tar.gz
	cd $@ ;\
	./configure --prefix=${INSTALL_PREFIX} && make && make install 
yasm-clean:
	cd ${YASM_SRC} && make clean
yasm-distclean:
	rm -rf ${YASM_SRC}*
#-------------------------------------------------------------
# x264
#-------------------------------------------------------------
x264: yasm libx264.a
x264-git:
	@if [ ! -d $@ ]; then \
	  git clone git://git.videolan.org/x264.git ; \
	  mv x264 $@ ; \
	fi ;\
	cd $@ && git pull
libx264.a: x264-git
	cd $< ;\
	export PATH=${PATH}:${ADD_PATH} ;\
	./configure --prefix=${INSTALL_PREFIX} \
	--enable-shared \
	--enable-pthread ;\
	make && make install
x264-clean:
	cd x264-git && make clean
x264-distclean:
	rm -rf x264-git
#-------------------------------------------------------------
# nut
#-------------------------------------------------------------
nut: libnut.a
libnut-svn:
	@if [ ! -d $@ ]; then \
	svn co svn://svn.mplayerhq.hu/nut/src/trunk $@ ;\
	fi ;\
	cd $@ && svn up
libnut.a: libnut-svn
	cd $< && make && make install PREFIX=${INSTALL_PREFIX}
nut-clean:
	cd libnut-svn && make clean
nut-distclean:
	rm -rf libnut-svn*
#-------------------------------------------------------------
# ogg
#-------------------------------------------------------------
ogg: libogg.a
${OGG_SRC}.tar.gz:
	@if [ ! -f $@ ]; then \
	  wget http://downloads.xiph.org/releases/ogg/$@ ;\
	fi ;\
	tar xvf $@

libogg.a: ${OGG_SRC}.tar.gz
	cd ${OGG_SRC} ;\
	./configure --prefix=${INSTALL_PREFIX}  && make && make install
ogg-clean:
	cd ${OGG_SRC} && make clean
ogg-distclean:
	rm -rf ${OGG_SRC}*
#-------------------------------------------------------------
# theora
#-------------------------------------------------------------
theora: ogg libtheora.a
theora-svn:
	@if [ ! -d $@ ]; then \
	  svn co http://svn.xiph.org/trunk/theora $@ ;\
	fi ;\
	cd $@ && svn up
libtheora.a: theora-svn
	cd $< ;\
	./autogen.sh ;\
	./configure \
	--prefix=${INSTALL_PREFIX} \
	--with-ogg=${INSTALL_PREFIX} ;\
	make && make install
theora-clean:
	cd theora-svn && make clean
theora-distclean:
	rm -rf theora-svn*
#-------------------------------------------------------------
# vorbis
#-------------------------------------------------------------
vorbis: libvorbis.a
${VORVIS_SRC}.tar.gz:
	@if [ ! -f $@ ]; then \
	  wget http://downloads.xiph.org/releases/vorbis/$@ ; \
	fi ;\
	tar xf $@
libvorbis.a: ${VORVIS_SRC}.tar.gz
	cd ${VORVIS_SRC} ;\
	./configure --prefix=${INSTALL_PREFIX} && make && make install
vorbis-clean:
	cd ${VORVIS_SRC} && make clean
vorbis-distclean:
	rm -rf ${VORVIS_SRC}*
#-------------------------------------------------------------
# xvid
#-------------------------------------------------------------
xvid: yasm libxvidcore.4.a
${XVID_SRC}.tar.gz:
	@if [ ! -f $@ ]; then \
	  wget http://downloads.xvid.org/downloads/$@ ;\
	fi ;\
	tar xf $@
libxvidcore.4.a: ${XVID_SRC}.tar.gz
	cd ${XVID_SRC}/build/generic ;\
	./bootstrap.sh ;\
	export PATH=${PATH}:${ADD_PATH} ;\
	./configure --prefix=${INSTALL_PREFIX} ;\
	make && make install
xvid-clean:
	cd ${XVID_SRC}/build/generic && make clean
xvid-distclean:
	rm -rf ${XVID_SRC}*

やっつけだけど, とりあえず動いたから正義. 書いてから思ったけれど, distclean は結構危険ですな. typo していなくて良かった.

... icc でコンパイルすると高速になったりするんだろうか?


2008/09/28

_ 食わず嫌い

いくない.

初体験は某コードのスパゲッティ特盛, だったので, 最近読んでる別の某ライブラリの C++ コードが, とてもうまく感じてしまう.

まあ, 大人になってわかる味, なんだろうかねぇ.


2008/09/29

_ 関西 Debian 勉強会

09/27 に <URL:http://wiki.debian.org/KansaiDebianMeeting20080927:title> へ.

絶望した. 起きたら 13:30 で絶望した

倉敷さんの 「Debian Mentors の紹介」聞きたかったよ(´・ω・`) そんな訳で, 尊也さんの 「Debian Live に Ubiquity を移植できるか?」 の途中から参加に.

Ubuntu って数ヶ月前の sid でしょ?

というつっこみが印象的. 荊の道を進んでいる感が. 楽しそうだ(違).

木下さんの 「10分でわかる DFSG」. なんと携帯電話でプレゼンしてました. 画面出力のある携帯電話じゃないと無理なんだろうけれど,

テキスト ->(OpenOffice Impress)-> PDF 作成-> 携帯電話の TV 出力

らしい. そんな事もできるのかと結構感動. プレゼン画面にアンテナとバッテリがあるのは御愛嬌, ですね.

時間が余ったらしいので, このあいだの VTK-Ruby の話とか, ちょっと画面に出して時間稼ぎ. あんまり Debian じゃないけれど.

懇親会で, 大浦さんと木下さんに key sign をお願いする. またもや手書きで fingerprint を写す(名刺作った方が良い, と痛感). 携帯ブラウザで<URL:http://www.gfd-dennou.org/arch/uwabami/:title> の fingerprint を表示させて写す. 途中で「0 と O の区別がががが〜」と呟いたら, 名村さんに「16 進数ですから」と指摘される. そりゃそうか.

などなど.

来月は CDBS について喋ります(と宣言することで, プレッシャーを自分に与えておく).

_ 札幌にて

先日, GFD セミナーで札幌に行ったとき, 久々にけんちゃんと呑んだ.

「センセー田酒です. 田酒!」 「それはスバラシィ. ぜひ行きましょう」

という流れで行く店が決まりました.


大きな地図で見る

  • 御通しでトマトが出ました.
    • ケンタロス(´・ω・`)
  • ビールはサッポロ!!
    • 黒ラベル, エビス, ギネス
    • クラシックだったらもっと良いのになぁ...(贅沢?)
  • 日本酒は久保田が全銘柄(?), 田酒がががが
    • 品揃え, という点では, 他にも良い店はあるけれど, 田酒だけで個人的にポイント高し.
  • 肴もおいしい. 値段も手頃
    • ただし, 久々の北海道で, 舌に補正がかかっているかもしれないけれど.

結局二人で 1 万 2 千円ぐらい(…だった筈). 堪能しました.


連絡先など
最近の日記
  • 2024/10/09
    • 1. Mastodon でのメール通知, というか Exim4 と Apparmor
  • 2024/06/19
    • 1. WSL2 での gpg-agent, ssh-agent
  • 2024/06/18
    • 1. WSL で Windows 側のフォントを利用する
  • 2024/06/17
    • 1. WSLとWindowsの時刻同期
  • 2024/06/12
    • 1. wsl2 で systemd
    • 2. wslg の設定
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|04|05|06|10|
Back to Top ▲