cout << "HelloWorld" << endl; // 意外と奥深い!?

cout << "HelloWorld" << endl;

2chで見つけたのだが、HelloWorldに関して挑戦者求む!【言語指定】Restricted Words by @cielavenir cielavenir│CodeIQで下記のような出題があったようだ。

標準出力に
Hello World
と出力するプログラムを作成して下さい。

ただし、数値、文字及び文字列リテラルを解答に含めることはできません。
Perlのqqやqw、Rubyの%Q、%q、%wなども避けたほうが評価が高くなります。
言語仕様をフル活用して下さい!

つまり"Hello World"'H'chr(72)int a = 1;などの文字列や数値を直接使わずHello Worldを出力するということだ。
シンプルな回答としては何とかして0とか1を取得し「インクリメントして数値を作り出し、char型に変換」をHelloWorld分繰り返す。

だが断る

何故なら面倒だから

ということで以下サンプル
# 厳密には"Hello World"ではなく"HelloWorld"のサンプル

マクロを使って

HelloWorld1.cpp

#include <iostream>

using namespace std;
int zero;

#define address2str(func) #func
void HelloWorld1() {
  // nil
}

int main() {
  cout << address2str(HelloWorld1) << endl;
  return zero;
}

実行結果

$ ./a.out 
HelloWorld1

デバッグマクロを使って

HelloWorld2.cpp

#include <iostream>

using namespace std;
int zero;

const char* HelloWorld2() {
  return __func__;
}

int main() {
  cout << HelloWorld2() << endl;
  return zero;
}

実行結果

$ ./a.out 
HelloWorld2

typeidを使って

HelloWorld3.cpp

#include <iostream>
#include <typeinfo>
#include <cxxabi.h>

using namespace std;
int zero;

class HelloWorld3 {
public:
  char* getHelloWorld() {
    int status;
    return abi::__cxa_demangle(typeid(*this).name(), (char*)zero, (size_t*)zero, &status);
  }
};

int main() {
  HelloWorld3 *hw3 = new HelloWorld3();
  cout << hw3->getHelloWorld() << endl;
  delete hw3;
  return zero;
}

実行結果

$ ./a.out 
HelloWorld3

なお普通じゃないHello World問題「Restricted Words」の解説記事 #伝説 #しえる|CodeIQ MAGAZINEには他の解法も少し紹介してあるので見てみると面白いかも

ただし、いずれも役に立たないw
役に立つとすればデバッグ時のログ出力くらいではないだろうか

Xubuntu14.04インストール(non-PAE/Pentium M)

ERROR: PAE is disabled on this Pentium M (PAE can potentially be enabled with kernel parameter "forcepae" - this is unsupported, may cause unknown problems, and will taint the kernel) This kernel requires the following features not present on the CPU: pae Unable to boot - please use a kernel appropriate for your CPU

最新Xubuntu14.04でインストールを試してみたところ、上記メッセージが表示された

あれ?まさかのアレ*1ですか?

再起動してもう一度インストールメニューを表示。

Tabキーをターン!&forcepae追加してEnterをターン!
f:id:izana1018:20140502203413j:plain

インストール進められるじゃないですか!
f:id:izana1018:20140506001639j:plain

つまりこういうことですか?

Xubuntuバージョン non-PAEインストール メモ
12.04 普通にインストールできる
12.10 × 試してないけど多分forcepae使えない
13.10 × forcepae使えない
14.04 forcepae使うとインストールできる

本当にそうなのか?

とりあえずThe Linux Kernel Archivesからlinux-3.15-rc3.tar.xzをダウンロードし展開。
grep -r forcepaeすると/arch/x86/boot/cpucheck.cforcepaeオプションを見つけた。

同様にlinux-3.10.38.tar.xzと少し前のソースもgrepしてみたら、
こちらはヒット無し。

でもいつのUbuntuから適用されているのかまでは探しきれなかった。
(そもそも探し方が合っているのかすら分からん)

i-FILTERが鬱陶しい

i-FILTER・・・・・オマエはダメだ!

いや、i-FILTERが悪い訳ではなく設定の問題なんだろうけど仕事中に調べ事するとブロックされまくり。

はてなブログも例外ではなく、最後は携帯で調べることもままある

そんなi-FILTER

100%ではないが閲覧だけなら回避方法がある。

Bingのキャッシュを使う

GoogleキャッシュのURLにはキャッシュ元URLがそのまま入っているため、ブロックされる。
しかし、Bingの場合はキャッシュ元URLがエスケープされているためi-FILTERに引っ掛からないw

IPアドレス直打ち

結局、Bingキャッシュと同じ考え方だが、要はURLにblogとかが入っているからダメなわけ。
izana1018.hateblo.jpも54.249.xx.xxのようにしてしまえば良いわけ

※全てアクセスログに残っているはずなので、自己責任で。

Oracle掲示板くらい見せろや!

xubuntuインストール(non-PAE/Pentium M)

f:id:izana1018:20140502062223j:plain

はじめに

Xubuntuの非PAE CPU対応について

Xubuntu 12.04 released « Xubuntu

Release notes

The i386 images use a non-PAE kernel. The non-PAE kernel will not be available in future Xubuntu releases.

/(^o^)\ナンテコッタイ

Xubuntu12.10以降は非PAE CPUは見放されたようです・・・まぁ気持ちは分からなくもない
それに見放されたと言っても公式な回避手段(EnablingPAE - Community Help Wiki)も用意されているから、まぁ問題はない。

しかし、日本語の情報が少なくLinux初心者にはハードル高め(というより意味不明)でインストール先延ばしにする人もいるであろう。

# 余談だけど12.04 LTSのサポート期間は1年切っている。
# WindowsXpと同じ過ちが繰り返されるのだろうか。。

さて

  • 俺のPCは非PAE CPU(Pentium M 725 / 1.60GHz)だ!
    ちなsony vaio VGN-Y70P
  • xubuntu(の見た目)が好き!
  • 最新xubuntuをインストールしたい!
  • 失敗してもいいさー!

とういう人への備忘。

その1~ linuxBean + xubuntu-desktop

  1. linuxBean をインストール

    「初心者はとりあえずこいつを突っ込んでおけ!」というくらい簡単&軽量ディストリビューションのlinuxBeanをインストール
    linuxBean (リナックスビーン) プロジェクト日本語トップページ - SourceForge.JP
    non-PAEベースで構成されているので悩まなくて楽かも

  2. xubuntu-desktopをインストール

    linuxBeanをインストール後、追加で xubuntu-desktopをインストール すればxubuntu化完了
    sudo apt-get install xubuntu-desktop

    xubuntu-desktopインストール中にDM(ディスプレイマネージャ)選択画面が表示される
    lightdm/lxdm/xdmなどが選択できるがlightdm以外はログイン画面以降進めなかったり、
    ログインできても「何かが違う」感じなる。

なお、linuxBeanはブラウザがなんか4つくらい入っていたり、Wineとか初心者いたせり尽くせりだけど、 不要ソフトのアンインストールが意外と面倒ではある。

その2~ xubuntu12.04 + fake-pae + OSアップグレード

既にxubuntu12.04をインストールしている人向け

# 先に書いておくがEnablingPAE - Community Help Wikiカーネル置き換え?の方が簡単ぽい。 # ただし、カーネル置き換えはやったこと無いのでよく分からん。

非PAE CPU搭載PCは冒頭のように12.10以降見放されており、普通はインストールできないがインストールできるようにする手段がfake-pae
PAE - Community Help Wiki

  1. PAEフラグの適用状態を確認

    $ cat /proc/cpuinfo | grep pae

    何もヒットしないはず

  2. fake-paeをインストール

    $ sudo apt-get install python-software-properties
    $ sudo apt-add-repository ppa:prof7bit/fake-pae
    $ sudo apt-get update
    $ sudo apt-get install fake-pae

  3. PAEフラグの適用状態を再度確認

    $ cat /proc/cpuinfo | grep pae
    多分ヒットするはず

     $ cat /proc/cpuinfo | grep pae
     flags        : fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss tm pbe bts est tm2

  4. OSのアップグレード

    $ sudo apt-get clean
    $ sudo do-release-upgrade

まぁ面倒。
あとlinuxBeanでやったところ、おかしな事になった。
linuxBean + fake-pae + xubuntu-desktop + OSアップグレードこいつはやべえぇえ!ので注意

その3~ minimal ubuntu + xubuntu-desktop

最小構成でインストールしたい人向け

もしかしたらPentium Mの場合だけかもしれない。

  1. minimal ubuntuをインストールstep1

    そのままインストールを進めてみる
    f:id:izana1018:20140502062222j:plain

    ERROR: PAE is disabled on this Pentium M
    (PAE can potentially be enabled with kernel parameter "forcepae" - this is unsupported, may cause unknown
    problems, and will taint the kernel)
    This kernel requires the following features not present on the CPU:
    pae
    Unable to boot - please use a kernel appropriate for your CPU

    何言ってんだこいつ?
    要はPAE!PAE!PAE!ってことだな。うん。

    ということでインストールはできない。
    もう一度インストール画面を表示させ、Tabキーをターン!と押す
    f:id:izana1018:20140502062224j:plain

    すると何やらコマンド打てるようになる
    f:id:izana1018:20140502062225j:plain

    -- forcepae(--とforcepaeの間は半角スペース)を入力しEnter
    f:id:izana1018:20140502062226j:plain

    エラー起きずにインストールが続行できる
    f:id:izana1018:20140502062227j:plain

  2. minimal ubuntuをインストールstep2

    進んでいくとソフトウェア選択画面が出てくる
    f:id:izana1018:20140502043830p:plain

    下の方にXubuntu Desktopがあるので、チェック入れて続行。
    ※デスクトップ系を何も入れないと後でCLIで頑張らないといけない

    イイヨイイヨー
    f:id:izana1018:20140502050532p:plain
    f:id:izana1018:20140502050453p:plain

途中ネットワーク設定云々が出てきたのだが、残念ながら無線LANでWPA2-PSK接続ができず、有線で接続。
(一応WEPならできたんだけどなぁ。。。)