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をターン!
インストール進められるじゃないですか!
つまりこういうことですか?
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.c
にforcepae
オプションを見つけた。
同様に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)
はじめに
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
linuxBean をインストール
「初心者はとりあえずこいつを突っ込んでおけ!」というくらい簡単&軽量ディストリビューションのlinuxBeanをインストール
linuxBean (リナックスビーン) プロジェクト日本語トップページ - SourceForge.JP
non-PAEベースで構成されているので悩まなくて楽かも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
PAEフラグの適用状態を確認
$ cat /proc/cpuinfo | grep pae
何もヒットしないはず
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
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
OSのアップグレード
$ sudo apt-get clean
$ sudo do-release-upgrade
まぁ面倒。
あとlinuxBeanでやったところ、おかしな事になった。
linuxBean + fake-pae + xubuntu-desktop + OSアップグレードこいつはやべえぇえ!ので注意
その3~ minimal ubuntu + xubuntu-desktop
最小構成でインストールしたい人向け
もしかしたらPentium Mの場合だけかもしれない。
minimal ubuntuをインストールstep1
そのままインストールを進めてみる
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キーをターン!と押す
すると何やらコマンド打てるようになる
-- forcepae
(--とforcepaeの間は半角スペース)を入力しEnter
エラー起きずにインストールが続行できる
minimal ubuntuをインストールstep2
進んでいくとソフトウェア選択画面が出てくる
下の方にXubuntu Desktopがあるので、チェック入れて続行。
※デスクトップ系を何も入れないと後でCLIで頑張らないといけないイイヨイイヨー
途中ネットワーク設定云々が出てきたのだが、残念ながら無線LANでWPA2-PSK接続ができず、有線で接続。
(一応WEPならできたんだけどなぁ。。。)