-->

2022-05-08

TS-130 ( NAS ) について

概要

  • Samba・AFPなどが繋がらなくても、
  • Linuxなどのbashのコンソールに慣れている場合、
  • 新しいNAS ( TS-130 ) でSSHサーバ起動して、
  • 古いNAS ( ReadyNAS Duo V2 ) でRsyncコマンドを使うと、
  • 古いNASのデータはコピーできることを確認した。
    • 古いNASがSSHサーバを有効にできる場合に限る。
  • 便利なWEBインターフェース付きのLinuxサーバという印象を受けた。


2022-05-7 に購入した商品が届く


  • NAS 1ベイ ディスクレスモデル ベイビーブルー メモリー1GB TS-130 (QNAP)
  • WD Blue シリーズ 3.5インチ 内蔵HDD 8TB SATA3(6Gb/s) 5640rpm 128MB 2年保証 WD80EAZZ 0718037-894157 (WESTERN DIGITAL)
  • 「HDD-UT8K [テレビ録画&パソコン両対応 外付けHDD 8TB 黒]」


TS-130でできたこと


  • ReadyNAS Duo V2(古いNAS)のSamba・AFPは接続できない。
    • HybridMount(QNAP Store)が古いNASのLinuxの場合に未対応?
  • 古いNASのAFPはMac Bookからは接続できる。
  • 古いNASのSambaはMac Bookから接続できない。
  • 古いNASのFTPは接続できる。
    • QuFTP Service(QNAP Store)でFTPクライアントでmount及びサーバ起動。
    • FTP接続をMacBookから実行する。
    • cyber duckなどでFTP接続。
  • Rsyncサーバに古いNASのSSH接続のRsyncコマンドでアップできる。
    • HBS 3 Hybrid Backup Sync(QNAP Store) からRsyncサーバ起動。
  • TS−130自体のControlpanelのネットワークとファイルサービスのtelnet /SSHでSSHサーバ起動して、
    • 古い NASのSSH接続からのRsyncコマンドがベター。
  • 外付けUSBハードディスクに定期的にバックアップを取れることを確認した。
    • HBS 3 => JOB にて設定。

コマンドの例


root@nas-BE-8F-86:~# rsync -avz /home/ftp/ usui@192.168.0.102:/share/Qnap/ReadyNAS_Duo_v2-2022-05/
usui@192.168.0.102's password: 
sending incremental file list
./
USB_HDD_2/
backup/
backup/.DS_Store 
・・・SNIP・・・ 

  • 上記はSSHの場合。
  • "-n ( --dry-run )" は念入りに。SRCの末尾の"/"の有無でフォルダ階層変わる、などなど。
    • /home/ftp => ftpフォルダあり。
    • /home/ftp/ => 無し、など。
  • Rsyncプロトコルだと、DSTにrsync://ありで/share/無し。
    • portが22から873になっている。別の何かでport制限している場合注意。
    • man rsync or rsync --help 参照のこと。



2022-04-17

Nexus 7 2013 LTE(deb) 32GB にLineageOS 19.1 を入れる


https://developer.android.com/studio/releases/platform-tools?hl=ja


https://drive.google.com/drive/folders/18JCSbs0IglAWR2YnV5lI2Eni_ZQ6AyPl


https://forum.xda-developers.com/t/tool-unofficial-port-repit-for-nexus-7-2013-deb-flo.4237183/


https://drive.google.com/drive/u/0/folders/1KoZsiQkiV4oSaKbPc5OhoIsYxLgdASHl


https://forum.xda-developers.com/t/rom-flo-deb-unofficial-lineageos-19-1-2022-04-08.3569067/page-190


https://drive.google.com/drive/folders/0By6p5AdQfavBUlhsLWFHZThGTnM?resourcekey=0-0BunAmDBWluYPghT0Fs6CA


https://drive.google.com/drive/folders/107MwnOSPS96wZGSU9fyc7zrV5pkDFTsu


https://noitalog.tokyo/nexus7-2013-lineageos-19-0/


https://blog.c6h12o6.org/post/nexus7-2013-android-oreo/


DialerFramework

GearheadStub


I'm on 1380MB-20MB partition and got OpenGapps Pico installed using .gapps-config

Attachments

gapps-config.zip

289 bytes · Views: 55


Direct Download from MediaFire:

lanchon-repit-20210221-system=max-cache=16M+wipe-deb.zip MediaFire - Download


Pls check REPIT script from @ipdev .. to get 1480MB system partition .. to be able to install opengapps !

https://forum.xda-developers.com/t/tool-unofficial-port-repit-for-nexus-7-2013-deb-flo.4237183/


  • ### adbコマンドコマンド
    • platform-tools_r33.0.1-darwin.zip
    • OSに合わせたファイルがダウンロードされる。

  • ### twrpツール
    • twrp-3.6.1_9-1-deb_followmsi.img 

  • ### パーテーションを増加する
    • lanchon-repit-20210221-system=max-cache=16M+wipe-deb.zip
    • sysrepart_1380_20.zip だとgappsをCoreだけにすると入りますが、アプリをダウンロードができません。

  • ### OS
    • lineage-19.1-20220408-UNOFFICIAL-deb.zip

  • ### GAPPS
    • open_gapps-arm-12L-pico-20220311-UNOFFICIAL_MOD.zip


 Nexus7用のLineage−19.1の配布サイトで1480MBにシステムを拡張する、とあるので、指示に従い操作したところ、成功しました。


そのちょっと前に、1380_20のパーテーションのままでも、不要ファイルを消せばインストールできる、というコメントもありました。

gapps-config.txt の配布もしていました。


パーテーション変更ツールのサイトでは、とにかくバックアップする、とあるので、覚悟するかバックアップするとベターです。


19.0と19.1で、opengapps が12 => 12L になるらしいので、ちょっと入れるファイルが変化する。


セルラー( LTE, deb )と、Wifi ( flo ) で、opengapps 以外は使うファイルが変化することに注意する。



 


2015-04-07

php fileinfo error

http://lists.freebsd.org/pipermail/freebsd-ports-bugs/2014-December/297112.html
> On amd64 version, when using php56-fileinfo extension, and apache have both
> mod_dav_svn and mod_php5 modules loaded, it crashes with Segmentation fault
> (11).

*** Error in `/usr/sbin/apache2': free(): invalid next size (fast): 0x00007f8c5edc9d70 ***
...
======= Backtrace: =========
...
======= Memory map: ========
...
[Tue Apr 07 01:42:32 2015] [notice] child pid 28389 exit signal Aborted (6)

<?php
var_dump(array(
    mime_content_type(__FILE__),
    mime_content_type("xxx.jpg"),
));

2015-02-15

vmware-tools

http://webos-goodies.jp/archives/51069748.html
http://www.shocksolution.com/2011/10/linux-kernel-3-1-config-for-gentoo-guest-on-vmware-fusion/
http://shocksolution.com/wordpress/wp-content/uploads/2011/11/gentoo_kernel31_config.txt
http://www.shocksolution.com/files/26Sept2009_Vmware_Gentoo_amd64.config

touch /etc/init.d/network
mkdir /etc/init.d/rc{0,1,2,3,4,5,6}.d
...
$ sudo genkernel --kernel-config=/etc/kernels/kernel-config-x86_64-3.17.8-gentoo-r1 --menuconfig all
...
menuconfigで"/"(search)で"VMWARE"で全部[M]にする。

/sbin/runscriptで起動スクリプトを書き直す、もしくは起動後に再起動する。
$ cat /etc/local.d/local.start
/etc/init.d/vmware-tools restart
app-emulation/open-vm-toolsがきっと参考になる。
参考サイトにあった。

$ grep depend -A2 /usr/portage/app-emulation/open-vm-tools/files/open-vm-tools.initd
depend() {
        before checkfs fsck net X
}

$ cat /etc/init.d/vmware
#!/sbin/runscript
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

depend() {
        before checkfs fsck net X
}

start() {
        ebegin "Starting VMware Subsystem"
        /etc/init.d/vmware-tools start
        eend $?
}

stop() {
        ebegin "Stopping VMware Subsystem"
        /etc/init.d/vmware-tools stop
        eend $?
}

$ rc-update show |grep -i vmware
               vmware |      default

$ uname -a
Linux vmware-gentoo1 3.17.8-gentoo-r1 #1 SMP Sun Feb 15 18:50:03 JST 2015 x86_64 Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz GenuineIntel GNU/Linux

$ grep -i vmware /etc/kernels/kernel-config-x86_64-3.17.8-gentoo-r1
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMWARE_BALLOON=m
CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_PVSCSI=m

もし参考サイトの.configを指定してkernel作成した場合、多分emerge worldで全部再インストールすれば、いくつかのソフトウェアでCONFIG_XXXをONにして下さい、みたいなのが表示される場合があるので、それに従う。

psvn.el

http://www.eaflux.com/index.html.ja
http://mail-archives.apache.org/mod_mbox//subversion-dev/201208.mbox/%3C503B958F.6010906@schickhardt.org%3E
http://www.eaflux.com/psvn/psvn.el.new
http://www.eaflux.com/psvn/psvn.el.diff
http://www.xsteve.at/prg/emacs/psvn.el

$ patch -ub psvn.el < psvn.el.diff

2015-02-14

sdic-mode

http://aikotobaha.blogspot.jp/2011/10/emacs-sdic-sary.html

$ sudo emerge -avt app-text/sary

$ find . -type f -mmin -100
./gene.sdic.utf8
./gene.sdic.utf8.ary
./jedict.sdic.utf8
./jedict.sdic.utf8.ary

$ diff -u /tmp/tmp.txt ../emacs.mode.sdic-mode.el
--- /tmp/tmp.txt        2015-02-14 23:44:09.339754011 +0900
+++ ../emacs.mode.sdic-mode.el  2015-02-14 23:46:00.324702577 +0900
@@ -1,3 +1,4 @@
+(setq load-path (cons "~/site-lisp/sdic" load-path))
 ;; ---------------------------------------------------
 ;; sdic
 ;; ---------------------------------------------------
@@ -10,9 +11,9 @@
   '(progn
      (setq sdicf-array-command "/usr/bin/sary") ; コマンドパス
      (setq sdic-eiwa-dictionary-list
-           '((sdicf-client "~/.emacs.d/dict/eijirou.sdic.utf8" (strategy array)))
+           '((sdicf-client "~/site-lisp/files/gene.sdic.utf8" (strategy array)))
            sdic-waei-dictionary-list
-           '((sdicf-client "~/.emacs.d/dict/waeijirou.sdic.utf8" (strategy array))))
+           '((sdicf-client "~/site-lisp/files/jedict.sdic.utf8" (strategy array))))

      ;; saryを直接使用できるように sdicf.el 内に定義されているarrayコマンド用関数を強制的に置換
      (fset 'sdicf-array-init 'sdicf-common-init)

2014-05-22

wall util-linux gentoo

https://groups.google.com/forum/#!topic/linux.gentoo.user/qhqA_RRCxz8

wallコマンドが無い場合、package.useにsys-apps/util-linux tty-helpersを追加する。



以下は詳細です。
$ wall test
bash: wall: コマンドが見つかりません

$ which wall
which: no wall in ...

$ e-file wall
...
[I] sys-apps/util-linux
Available Versions:     2.23 2.24.1-r3 2.24.1-r2 2.24.1-r1 2.24.1 2.24 2.23.2-r2 2.23.2-r1 2.23.2 2.23.1
Last Installed Ver:     2.24.1-r2(2014年05月17日 02時17分01秒)
Matched Files:          /usr/share/bash-completion/completions/wall; /usr/share/bash-completion/wall; /usr/bin/wall;
...

$ grep tty-helper /etc/portage/package.use/x86_64-pc-linux-gnu
sys-apps/util-linux             tty-helpers

$ sudo emerge --oneshot -avt sys-apps/util-linux
...

$ which wall
/usr/bin/wall

$ wall aaa

Broadcast message from ...

aaa

2013-10-15

memo: audit

$ sudo emerge --oneshot -avt sys-process/audit

$ sudo auditctl -l
Error - audit support not in kernel
Cannot open netlink audit socket

$ diff /etc/kernels/kernel-config-x86_64-3.4.6{3,6}-gentoo
3c3
< # Linux/x86 3.4.63-gentoo Kernel Configuration
---
> # Linux/x86 3.4.66-gentoo Kernel Configuration
95c95,99
< # CONFIG_AUDIT is not set
---
> CONFIG_AUDIT=y
> CONFIG_AUDITSYSCALL=y
> CONFIG_AUDIT_WATCH=y
> CONFIG_AUDIT_TREE=y
> CONFIG_AUDIT_LOGINUID_IMMUTABLE=y

$ sudo auditctl -l
No rules

$ sudo auditctl -w /mnt/hgfs/share/

$ cd /mnt/hgfs/share/

$ sudo tail -n0 -f /var/log/audit/audit.log

$ ll 1.txt

$ sudo tail -n0 -f /var/log/audit/audit.log
type=SYSCALL msg=audit(1381841035.653:30): arch=c000003e syscall=191 success=no exit=-95 a0=7fffff313e35 a1=7f585a90627f a2=0 a3=0 items=1 ppid=10513 pid=10662 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=5 comm="ls" exe="/bin/ls" key=(null)
type=CWD msg=audit(1381841035.653:30):  cwd="/mnt/hgfs/share"
type=PATH msg=audit(1381841035.653:30): item=0 name="1.txt" inode=30962247438286374 dev=00:15 mode=0100777 ouid=1000 ogid=1000 rdev=00:00

2013-09-19

memo: K760E, LBT-UAN04C2BK

K760E, LBT-UAN04C2BK

windows7でも使用可能らしいので買った。

コントロール パネル\すべてのコントロール パネル項目\デバイスとプリンター
ではペアリングできなかった。

コンピューター\マイBluetoothデバイス
でできた。(Bluetooth USBアダプタのCD付属)

「F10」が「fn-F10」で反応がある。
「ctl-alt-delete」が「fn-ctl-alt-delete」で反応がある。(印字はdeleteで機能はbackspaceでdeleteにする場合が「fn+delete」)
google画像検索、検索ツール、大きいサイズでも見た目は見れる。


http://masaru.org/diary/20110412.html

http://qa.green-house.co.jp/faq_detail.html?id=1117

LBT-UAN04C2BKのCDのソフトウェアを入れた。
csr harmony wireless software stack

ディスカバリーモード : ディスカバリーOFF
SCMT-T               : 有効
デバイスの種類       : PC/デスクトップPC

キーボードが109っぽいが印字と違うのでusにしたいが「地域と言語」から設定するUSだと日本語変換ができない。
参考サイトを元に値を変更した。
HKEY_LOCALMACHINE\SYSTEM\CurrentControlSet\Enum\HID
↓
HID\CSRHIDDevice????????&?????
↓
xxx&0xxx
    KeyboardTypeOverride
xxx&1xxx
    KeyboardTypeOverride
xxx&2xxx
    KeyboardTypeOverride
複数ある場合は番号が多い方のようです。

何回も再インストールしたら増えたので復元で戻したら戻った。
ちょうどいいタイミングのログがあったので。2日前の。
その間に入れたソフトウェアはおかしくなったので入れなおした。

無事「shift-2」で「@」が出たので成功した。

http://www.logicool.co.jp/ja-jp/product/wireless-solar-keyboard-k760-for-mac
仕様
型番 K760E
キーレイアウト : 78キー英語レイアウト

コントロール パネル\すべてのコントロール パネル項目
に表示方法:小さいアイコンで
Bluetooth Devices
Bluetooth 設定
という表示が出て「Bluetooth 設定」のほうは押しても反応がない。
なにか間違ったかと思って再インストールして消えたかと思ったが再起動後に出るので、そのままにした。
「表示方法:カテゴリ」の場合はそうでもない。

F1~F12を多用する場合はやめたほうが良さそう。
しかし太陽電池は良さそう。壊れなければ。

2013-09-16

memo: VMware Player, Microsoft Loopback Adapter

http://www.anseilen.org/puki/index.php?%CC%B5%C0%FELAN%A1%DCVPN%B4%C4%B6%AD%A4%C7%A1%A2%B2%BE%C1%DBPC%A4%F2%BB%C8%A4%A6

http://blogs.yahoo.co.jp/akio_myau/39554285.html

http://d.hatena.ne.jp/uesama99/20070211/1171159451

https://twitter.com/yyamasak/statuses/289623414795296768

http://d.hatena.ne.jp/kakenman/20110314/1300084623

http://trendy.nikkeibp.co.jp/article/tec/bb/20020826/101625/


これはNAT接続がうまくいかないがブリッジ接続でIPアドレスを割り当てたくない場合に試すかもしれないので確認した作業の例です。

スタート、コンピューター、右クリック、管理、
コンピューターの管理、デバイスマネージャ、ネットワークアダプタ、
操作(A)、レガシーハードウェアの追加(L)、
...

コントロール パネル\すべてのコントロール パネル項目\ネットワーク接続

ローカルエリア接続2
認識されていないネットワーク
Microsoft Loopback Adapter

右クリック、プロパティ、インターネットプロトコルバージョン4(TCP/IPv4)、
プロパティ、次のIPアドレスを使う、

IPアドレス(I):       192.168.137.1
サブネットマスク(U): 255.255.255.0

OK、ローカルエリア接続、右クリック、プロパティ、共有、

インターネット接続の共有
[v]ネットワークのほかのユーザーに、このコンピュータのインターネット接続を通しての接続を許可する(N)
ホームネットワーク接続(H):
[ローカルエリア接続2]
[ ]ネットワークのほかのユーザーに、共有インターネット接続の制御や無効化を許可する(O)

OK、

VmwarePlayer
仮想マシン設定の編集(D)
ネットワークアダプタ ブリッジ(自動)
(●)ブリッジ: 物理ネットワークに直接接続(B)
    [ ]物理ネットワーク接続の状態を複製(P)
                           アダプタの設定(F)

ブリッジの自動設定
自動的にブリッジするホストネットワークアダプタを選択してください:
[v] Microsot Loopback Adapter
[ ] Realtek RTL8168D/8111D...

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep -v ^# | grep -v ^$
DEVICE="eth0"
BOOTPROTO="static"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR="192.168.137.220"
GATEWAY=192.168.137.1
NETMASK="255.255.255.0"
DNS1="192.168.0.1"

元々動いていた他のvmwareplayerのブリッジ接続のSSH接続が切れた。
アダプタの設定(F)
で、Microsot Loopback Adapterを外せばOK.
共存させる意味はないが。物理的な環境によって使い分け的な何かがあるかもしれない。
今度はMicrosot Loopback Adapterのほうが接続切れたので共存できないようだ。
ローカルエリア接続2を使うほうのVmwareの設定が変わっていた。
[ ] Microsot Loopback Adapter
[v] Realtek RTL8168D/8111D...
何か設定が衝突したので片方を衝突しないようにした的な何かがあったかもしれない。
ローカルエリア接続 → ローカルエリア接続2
ローカルエリア接続 → VMware Virtual Ethernet Adapter for VMnet1
が両方は無理なのかもしれない。

他も192.168.137.xxxにすれば普通に共存はできる。
普通のブリッジのように192.168.137.xxxに192.168.0.xxx(ホストOS以外)からはアクセスできない。
192.168.137.xxx → ssh 192.168.0.xxx(ホストOS以外) → ssh 192.168.137.xxx できないのでOK.

NAT接続で大丈夫か、普通のブリッジ接続でIPアドレスを複数使ってよいなどであれば必要ない。
多分、
[ ]物理ネットワーク接続の状態を複製(P)
を、ONにしてゲストをDHCPにすれば、IPアドレスも被らない、といいな、と思う。
これはVPNのCLIENTで接続するとVmwarePlayerのNAT接続にアクセスできない場合などで試してみる場合の参考です。
そもそも本当に問題が解決するかどうかは不明です。

ローカルエリア接続2を使う場合。両方ONだとvmwareplayerが2個以上で両方にブリッジ接続すると何かがまずい。
普通はしないので1個だけにする。"Vmware Bridge Protocol"ONを。別に物理的に複数ある場合は関係ない。
ローカルエリア接続2 → [v] Vmware Bridge Protocol
ローカルエリア接続  → [ ] Vmware Bridge Protocol

ローカルエリア接続、プロパティ、共有、設定にIPフォワーディングの設定のようなものがあるが、この例では変更していない。

2013-09-14

memo: arglist-cont-nonempty

他に影響がある。
;; spl_autoload_register(call_user_func(function() { の次の行を4。他で影響あれば無し。
;; ((arglist-cont-nonempty 1 22) (arglist-cont-nonempty 1 37) (statement-block-intro 1)) で statement-block-intro で4.
(c-set-offset 'arglist-cont-nonempty' 0)

2013-09-08

spl_autoload_registerの例

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
http://qiita.com/Hiraku/items/72251c709503e554c280

クラス名 => ファイルパスで1:1で対応していないと非常にわかりにくいので下記の例は非推薦な例です。








spl_autoload_register(function($className)
{
    static $includePathList;
    if (!is_array($includePathList)) {
        $includePathList = explode(PATH_SEPARATOR, get_include_path());
    }
    $includedFileList = get_included_files();
    $successFlag = false;
    do {
        $classNameList = array();
        $errorFlag = false;
        preg_replace_callback(
            "/(" .
            "(?:[A-Z])" .
            "(?:" .
            "(?:[0-9]{0,15})" .
            "(?:[a-z])" .
            "(?:[0-9]{0,15})" .
            "){1,15}" .
            ")|(.)/", function($matches) use(&$classNameList, &$errorFlag) {
                if (!$errorFlag) {
                    switch (true) {
                    case (is_string($matches[1]) && $matches[1] !== ""):
                        $classNameList[] = $matches[1];
                        break;
                    case (is_string($matches[2])):
                        switch (true) {
                        case (in_array($matches[2], array("\\", "_"), true)):
                            break;
                        default:
                            $errorFlag = true;
                        }
                        break;
                    default:
                        trigger_error("\$className parse error.", E_USER_ERROR);
                    }
                }
            }, $className);
        if ($errorFlag) {
            break;
        }
        foreach ($includePathList as $includeDir) {
            $currentDir1 = $includeDir;
            $classNameListTmp = $classNameList;
            foreach ($classNameList as $val1) {
                if (count($classNameListTmp) <= 1) {
                    break;
                }
                $currentDir1 .= DIRECTORY_SEPARATOR . $val1;
                if (!is_dir($currentDir1)) {
                    break;
                }
                array_shift($classNameListTmp);
                $currentDir2 = "";
                foreach ($classNameListTmp as $val2) {
                    $file = $currentDir1 . DIRECTORY_SEPARATOR . $currentDir2 . $val2 . ".php";
                    if (!in_array($file, $includedFileList, true) && is_file($file)) {
                        require($file);
                        if (class_exists($className)) {
                            $successFlag = true;
                            break 3;
                        }
                    }
                    $currentDir2 .= $val2;
                }
            }
        }
    } while (false);
});

問題点。

後でset_include_path(...)が行われても考慮しない。

全部同じディレクトリやファイルの走査になる。
$class = new Foo_Bar_Baz;
$class = new FooBarBaz;
$class = new \Foo\Bar\Baz;

大文字の英字{1} + 小文字の英字{1,15}(半角数字が間にあるのはOK)で"\"と"_"は区切り。
foo_bar_baz は無理。
F111_B222_B333 は無理。
Foo1_Bar2_Baz3 はOK.

"$class = new FooBar;" => "./Foo/Bar.php" のように、"ディレクトリ/ファイル名.php"で最低2つ。

$class = new FooBarBaz;
./Foo/Bar/Baz.phpで定義されている場合、定義されていないが候補に上がるファイルを全部requireする。

./Foo/Bar.php <= 読む。無い。
./Foo/BarBaz.php <= 読む。無い。
./Foo/Bar/Baz.php <= 読む。あった。終わり。

include_path = "1:2:3:4:5:6:7:8:9:." の場合で
./1/Foo/Bar.php などが全部ある場合、30ファイル目をrequireしたところで終了する。
その無駄な29ファイルはrequireしただけでは何も実行部分が無い定義だけのファイルであること、を期待している。

$class = new \Foo\Bar_Baz; のように1つ目がnamespaceであることを期待しているような気もするが強制していない。
多分\Foo\であれば"use xxx as xxx"できっと名前の競合をきっと防げる、のではないか?と思うので。

多分スラッシュとバックスラッシュが見分けにくいフォントがお気に入りの場合、つらい。
ドット、カンマ、コロン、セミコロンが見分けにくいフォントがあるのと、あんまり変わらない問題のようにも感じる。
さすがにスラッシュとバックスラッシュは無いか?見分けにくいフォントを使うのは?色んな場面でかなり不便のはずだし。

(1 + (15 + 1 + 15) * 15) = 466 <= こんな長いクラス名の一部があるかどうかは別にしてマッチする可能性はある。
こういう部分で正規表現を使うのはマナー違反的な何かがある。でかい文字に正規表現処理したらセグメンテーション違反とかね。



探す順番を制御できないがinclude_onceのほうがシンプル。
<?php
spl_autoload_register(function($className)
{
    $successFlag = false;
    do {
        $classNameList = array();
        $errorFlag = false;
        preg_replace_callback(
            "/([A-Z][a-z0-9]{0,9}[a-z][a-z0-9]{0,9})|(.)/",
            function($matches) use(&$classNameList, &$errorFlag) {
                if (!$errorFlag) {
                    switch (true) {
                    case (is_string($matches[1]) && $matches[1] !== ""):
                        $classNameList[] = $matches[1];
                        break;
                    case (is_string($matches[2])):
                        switch (true) {
                        case (in_array($matches[2], array("\\", "_"), true)):
                            break;
                        default:
                            $errorFlag = true;
                        }
                        break;
                    default:
                        trigger_error("\$className parse error.", E_USER_ERROR);
                    }
                }
            }, $className);
        if ($errorFlag) {
            break;
        }
        $currentDir1 = "";
        $classNameListTmp = $classNameList;
        foreach ($classNameList as $val1) {
            $currentDir2 = "";
            foreach ($classNameListTmp as $val2) {
                $file = $currentDir1 . $currentDir2 . $val2 . ".php";
                @include_once($file);
                if (class_exists($className)) {
                    $successFlag = true;
                    break 2;
                }
                $currentDir2 .= $val2;
            }
            $currentDir1 .= $val1 .DIRECTORY_SEPARATOR;
            array_shift($classNameListTmp);
        }
    } while (false);
});

/*
set_include_path("001:002:003");
$class = new \Foo\Bar\Baz;

001/Foo/Bar/Baz.php
001/Foo/BarBaz.php
001/Foo/Bar.php
001/FooBarBaz.php
001/FooBar.php
001/Foo.php
002/Foo/Bar/Baz.php
002/Foo/BarBaz.php
002/Foo/Bar.php
002/FooBarBaz.php
002/FooBar.php
002/Foo.php
003/Foo/Bar/Baz.php
003/Foo/BarBaz.php
003/Foo/Bar.php
003/FooBarBaz.php
003/FooBar.php
003/Foo.php
*/
spl_autoload_register(function($className)
{
    static $includePathList;
    if (!is_array($includePathList)) {
        $includePathList = explode(PATH_SEPARATOR, get_include_path());
        foreach ($includePathList as $key => $dir) {
            if (!is_dir($dir) || !is_readable($dir)) {
                unset($includePathList[$key]);
            }
        }
        $includePathList = array_reverse($includePathList);
    }
    do {
        $classNameList = array();
        $errorFlag = false;
        preg_replace_callback(
            "/([A-Z][a-z0-9]{0,9}[a-z][a-z0-9]{0,9})|(.)/",
            function($matches) use(&$classNameList, &$errorFlag) {
                if (!$errorFlag) {
                    switch (true) {
                    case (is_string($matches[1]) && $matches[1] !== ""):
                        $classNameList[] = $matches[1];
                        break;
                    case (is_string($matches[2])):
                        switch (true) {
                        case (in_array($matches[2], array("\\", "_"), true)):
                            break;
                        default:
                            $errorFlag = true;
                        }
                        break;
                    default:
                        trigger_error("\$className parse error.", E_USER_ERROR);
                    }
                }
            }, $className);
        if ($errorFlag) {
            break;
        }
        $fileList = array();
        foreach ($includePathList as $includeDir) {
            $currentDir1 = $includeDir . DIRECTORY_SEPARATOR;
            $classNameListTmp = $classNameList;
            foreach ($classNameList as $val1) {
                $currentDir2 = "";
                foreach ($classNameListTmp as $val2) {
                    $file = $currentDir1 . $currentDir2 . $val2 . ".php";
                    if (is_file($file)) {
                        $fileList[] = $file;
                    }
                    $currentDir2 .= $val2;
                }
                if (count($classNameListTmp) <= 1) {
                    break;
                }
                $currentDir1 .= $val1 . DIRECTORY_SEPARATOR;
                if (!is_dir($currentDir1)) {
                    break;
                }
                array_shift($classNameListTmp);
            }
        }
        for ($i = count($fileList) - 1; $i >= 0; --$i) {
            @include_once($fileList[$i]);
            if (class_exists($className)) {
                break;
            }
        }
    } while (false);
});

2013-09-03

memo: vmware player, VirtualBox

VMnet8が192.168.129.1の場合でNATの場合 gateway 192.168.129.2, ipaddress 192.168.129.3-127 かもしれない。
仮想ネットワークエディタの使用はポートフォワーディングが必要な場合などのみ、かもしれない。
VirtualBoxを入れると休止状態から復帰した場合にvmware-playerのブリッジ接続ができなくなる場合がある。

以下は詳細です。

参考URL.
http://thatsdone-j.blogspot.jp/2013/01/vmware-player.html
http://blog.kondoyoshiyuki.com/2012/08/18/fix-ip-address-on-vmware-player/
http://prog.hateblo.jp/entry/2012/04/03/105927
http://qiita.com/nojima/items/4ee930105f947fc2e818
http://www.kuron-zero.com/port/windows7a.php

http://qiita.com/nojima/items/4ee930105f947fc2e818
管理者権限でコマンドプロンプトを開く。
    cd "C:\Program Files (x86)\VMware\VMware Player"
    rundll32 vmnetui.dll,VMNetUI_ShowStandalone

仮想ネットワークエディタ
↓
VMnet8  NAT  NAT  接続済み  有効  129.168.129.0  (最初からこうだった)
↓
選択してNAT設定
↓
ネットワーク     : vmnet8
...
ゲートウェイIP(G): 192.168.129.2 (最初からこうだった?触っていないはずだが微妙な値が入っている気持ちになる。)
...
ポート転送(F)
22  TCP  192.168.129.20:22 (これ追加のみ。これは入れた。)
...
OK押して適用が押せる状態になっているはずなので押す。

仮想ネットワークエディタのDHCPの設定の範囲外(192.168.129.128~254以外。255と1と2以外。)にした。
$ rcsdiff /etc/config-archive/etc/sysconfig/network-scripts/ifcfg-eth0,v /etc/sysconfig/network-scripts/ifcfg-eth0
===================================================================
RCS file: /etc/config-archive/etc/sysconfig/network-scripts/ifcfg-eth0,v
retrieving revision 1.1
diff -r1.1 /etc/sysconfig/network-scripts/ifcfg-eth0
8c8
< IPADDR="192.168.0.220"
---
> IPADDR="192.168.129.20"
10a11,13
> GATEWAY=192.168.129.2
> NETMASK=255.255.255.0
> BROADCAST=192.168.129.255

他のブリッジ接続のほうからは無理だった。
(windows,putty => ブリッジ接続のlinux => ssh 192.168.129.20 x)
windowsから直接sshしたところ、つながった。
(windows,putty => ssh 192.168.129.20 o)

いじっていないはず。過去にいじったかどうかは不明。
ネットワーク接続
VMware Network Adapter VMnet8のプロパティ
インターネットプロトコルバージョン4(tcp/ipv4)のプロパティは無変更
IPアドレス      : 192.168.129.1
サブネットマスク: 255.255.255.0
他は記入なし。

見た感じ GATEWAY=192.168.129.1 じゃダメなのか?のテスト。
仮想ネットワークエディタのNATの設定
ゲートウェイIP(G): 192.168.129.1 に変更。

centosのほうの設定変更
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.129.0   0.0.0.0         255.255.255.0   U     1      0        0 eth0
0.0.0.0         192.168.129.1   0.0.0.0         UG    0      0        0 eth0

$ ifconfig |grep 192.168.129
          inet addr:192.168.129.20  Bcast:192.168.129.255  Mask:255.255.255.0

ダメだった。多分最初からNAT設定のGATEWAYは末尾2だった。

DNSは下記。これは実際のgateway=dnsの状態で。
$ cat /etc/resolv.conf 
# Generated by NetworkManager
search localnet
nameserver 192.168.0.1

ping test.
NATのOS => GATEWAY, DNS, 外, 多分OK
NATのOS => windows, ブリッジの他のos => 無理

$ ping -c1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=128 time=1.11 ms

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 1ms
rtt min/avg/max/mdev = 1.111/1.111/1.111/0.000 ms

$ ping -c1 www.google.co.jp
PING www.google.co.jp (173.194.72.94) 56(84) bytes of data.
64 bytes from tf-in-f94.1e100.net (173.194.72.94): icmp_seq=1 ttl=128 time=35.4 ms

--- www.google.co.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 43ms
rtt min/avg/max/mdev = 35.498/35.498/35.498/0.000 ms

$ ping -c1 129.168.0.80
PING 129.168.0.80 (129.168.0.80) 56(84) bytes of data.

--- 129.168.0.80 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 10000ms

$ ping -c1 129.168.0.110
PING 129.168.0.110 (129.168.0.110) 56(84) bytes of data.

--- 129.168.0.110 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 10000ms

ブリッジのOS => NATのOS 無理。
ブリッジのOS => 192.168.129.1 x
ブリッジのOS => 192.168.129.2 x
ブリッジのOS => 192.168.129.20 x

windows7 => 192.168.129.1 o
windows7 => 192.168.129.2 x
windows7 => 192.168.129.20 o

ssh test.
windows7 => 192.168.129.20 o

natのosが外を見れる。
windowsからsshできる。
よくわからないが目的を達成したので成功。



同じネットワークであればpingは通るっぽい。
$ rcsdiff /etc/config-archive/etc/conf.d/net,v /etc/conf.d/net
===================================================================
RCS file: /etc/config-archive/etc/conf.d/net,v
retrieving revision 1.1
diff -r1.1 /etc/conf.d/net
9,10c9,10
< config_eth0="192.168.0.110 netmask 255.255.255.0 brd 192.168.0.255"
< routes_eth0="default via 192.168.0.1"
---
> config_eth0="192.168.129.21 netmask 255.255.255.0 brd 192.168.129.255"
> routes_eth0="default via 192.168.129.2"
12a13
> txqueuelen_eth0="65535"

$ ping -c3 192.168.129.20
PING 192.168.129.20 (192.168.129.20) 56(84) bytes of data.
64 bytes from 192.168.129.20: icmp_seq=1 ttl=64 time=0.680 ms
64 bytes from 192.168.129.20: icmp_seq=2 ttl=64 time=0.451 ms
64 bytes from 192.168.129.20: icmp_seq=3 ttl=64 time=0.431 ms

--- 192.168.129.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.431/0.520/0.680/0.115 ms

自分のPCでlinux上のemacsなどのエディタが使いたいだけであれば、ポートフォワーディングはいらない。

ポート転送(F), 22  TCP  192.168.129.20:22
実際のwindowsのループバックの22。
ssh 127.0.0.1:22
他の実際のOSから見たwindowsのIPアドレスのport22で。
ssh 192.168.0.80:22

ポート転送(F), 22  TCP  192.168.129.21:10022
実際のwindowsのループバックの10022。
ssh 127.0.0.1:10022
他の実際のOSから見たwindowsのIPアドレスのport10022で。
ssh 192.168.0.80:10022

他の実際のパソコンから見るためにはファイアウォールに設定する。
http://www.kuron-zero.com/port/windows7a.php
tcp 22, 10022 開ける。

vmware立ち上げたところのwindowsからだけであればいらない。
ssh 192.168.129.20:22
ssh 192.168.129.21:22

vmware playerが無理だったらssh接続であればVirtualBoxもあり。
仮想マシン
設定
ネットワーク
割り当てNAT
ポートフォワーディング
Rule1  TCP  127.0.0.1  22  10.0.2.15  22

windowsから 127.0.0.1:22 でOK.
# /etc/sysconfig/network-scripts/ifcfg-eth0 変更していないが ifconfig, route 変化あり。
# 10.0.2.15 を固定できるか知らないが多分出来る気がする。

確認。
ポートフォワーディング
Rule1  TCP  127.0.0.1  22  10.0.2.115  22
に変更。

ifcfg-eth1を作成

$ cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="static"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
IPADDR="10.0.2.115"
NETMASK="255.255.255.0"
DNS1="192.168.0.1"
GATEWAY=10.0.2.2
NETMASK=255.255.255.0
BROADCAST=10.0.2.255

2013-08-30

PORTDIR_OVERLAYの追加 part4

参考URL.
https://devmanual.gentoo.org/general-concepts/dependencies/index.html

http://www.gentoo.org/doc/ja/policy.xml

http://www.atzm.org/gentoo/ebuilds2.html

http://insnvlovn.blogspot.jp/2013/08/memo-hhvm.html

hhvmの依存パッケージをemerge --depcleanで消したくない。
# /var/lib/portage/world(emerge --oneshot => emerge --noreplace)登録では
# 後で何でインストールした?となることがある。
# 全部libevent-1.4.14b-stableみたいにソースから入れれば良かったのでは?
$ /usr/local/hhvm/2013-08-11/hiphop-php/hphp/hhvm/hhvm --version
HipHop VM v2.1.0-dev (rel)
Compiler: heads/master-0-g67ec381c907f1cb0c20fd7ae39bac594cce5260f
Repo schema: c1d8348ed4576c1d8bea8d67f007c715860f7c6d

そんな時はvirtualパッケージを登録する。
# もっと楽にできたような気がする。コマンド的な何かで一発登録。
$ grep /usr/local/portage/test /etc/portage/make.conf
PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/portage/test"

mkdir -p /usr/local/portage/test/virtual/hhvm
cd /usr/local/portage/test/virtual/hhvm
cp -i /usr/portage/virtual/acl/acl-0-r1.ebuild hhvm-2.1.0.ebuild

RDEPENDだけ修正する。
# ={$packagename}-{$version} でバージョン固定で依存("="のかわりに"~"で-r1とかOK.)
# {$packagename}[useflag1,useflag2] で依存パッケージにuseflagを要求。
# もっと細かく指定可能なのでマニュアルを閲覧する。
# 個人の用途であれば説明とか修正しなくても動く。
# たまたま元から入っていた依存パッケージもあるので、それも書かないと後で動作しなくなる。
# バージョン書いてないのにもバージョン指定があったような気がした。インストール時のエラーメッセージで。
$ cat hhvm-2.1.0.ebuild
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/virtual/acl/acl-0-r1.ebuild,v 1.3 2013/03/22 16:03:21 jer Exp $

EAPI="3"

DESCRIPTION="Virtual for acl support (sys/acl.h)"
HOMEPAGE=""
SRC_URI=""

LICENSE=""
SLOT="0"
KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~ia64-linux ~x86-linux"
IUSE=""

DEPEND=""
RDEPEND="
dev-libs/boost
dev-cpp/glog[unwind]
=dev-libs/libmemcached-0.39
media-libs/gd[jpeg,png]
dev-cpp/tbb
net-nds/openldap
=dev-libs/libdwarf-20120410
net-libs/c-client
"

インストールする。
ebuild hhvm-2.1.0.ebuild manifest
sudo emerge -avt hhvm

確認する。
$ grep hhvm /var/lib/portage/world
virtual/hhvm

チェックする。
逆にuseflagがあってはいけない、と変更する。
...
dev-cpp/glog[-unwind]
...

インストールはしないが、どうなるか確認する。
$ ebuild hhvm-2.1.0.ebuild manifest
$ sudo emerge -avtp hhvm

The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by virtual/hhvm-2.1.0::x-test
# required by hhvm (argument)
>=dev-cpp/glog-0.3.3 -unwind

These are the packages that would be merged, in reverse order:

Calculating dependencies  ... done!
[ebuild   R    ] virtual/hhvm-2.1.0::x-test  0 kB
[ebuild   R    ]  dev-cpp/glog-0.3.3  USE="-gflags -static-libs {-test} -unwind*" 0 kB

Total: 2 packages (2 reinstalls), Size of downloads: 0 kB

戻す。
$ grep unwind hhvm-2.1.0.ebuild
dev-cpp/glog[unwind]
$ ebuild hhvm-2.1.0.ebuild manifest

$ sudo emerge -avtp hhvm

These are the packages that would be merged, in reverse order:

Calculating dependencies  .... done!
[ebuild   R    ] virtual/hhvm-2.1.0::x-test  0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

2013-08-29

memo

http://news.mynavi.jp/articles/2009/01/27/perftools/003.html

http://goog-perftools.sourceforge.net/doc/tcmalloc.html

http://www.ibm.com/developerworks/jp/opensource/library/os-php-v521/

http://www.checksite.jp/jmxterm-command-line-tool/

$ rcsdiff -r1.1 /etc/config-archive/etc/tomcat-7-7.0.42-main/server.xml,v /etc/tomcat-7-7.0.42-main/server.xml
===================================================================
RCS file: /etc/config-archive/etc/tomcat-7-7.0.42-main/server.xml,v
retrieving revision 1.1
diff -r1.1 /etc/tomcat-7-7.0.42-main/server.xml
27c27
<   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
---
>   <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
71a72,74
>                acceptCount="65536"
>                maxConnections="-1"
>                maxThreads="2000"
91c94
<     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
---
>     <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

2013-08-28

memo: DBCP

http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html#Database_Connection_Pool_%28DBCP%29_Configurations

http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html#Database_Connection_Pool_%28DBCP%29_Configurations

http://www.atmarkit.co.jp/ait/articles/1111/07/news212.html

警告: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]

$ tar xvzf /usr/portage/distfiles/commons-dbcp-1.4-src.tar.gz
$ cd commons-dbcp-1.4-src/
$ grep -nri BasicDataSourceFactory .
...
$ grep -nriP "org\..*\.BasicDataSourceFactory" .
./xdocs/release-notes-1.2.1.xml:42:     at org.apache.commons.dbcp.BasicDataSourceFactory.createDataSource(BasicDataSourceFactory.java:162)
./xdocs/release-notes-1.2.1.xml:43:     at org.apache.commons.dbcp.BasicDataSourceFactory.getObjectInstance(BasicDataSourceFactory.java:144)
./xdocs/guide/jndi-howto.xml:57:    "org.apache.commons.dbcp.BasicDataSourceFactory", null);

$ grep -A24 "jdbc/TestDB" ./conf/Catalina/localhost/test001.xml > tmp1.txt
$ grep -A24 "jdbc/DbcpTestDB" ./conf/Catalina/localhost/test001.xml > tmp2.txt
$ diff tmp{1,2}.txt
1c1
<   <Resource name="jdbc/TestDB"
---
>   <Resource name="jdbc/DbcpTestDB"
4c4
<             factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
---
>             factory="org.apache.commons.dbcp.BasicDataSourceFactory"

$ rcsdiff /etc/config-archive/etc/conf.d/tomcat-7-7.0.42-main,v /etc/conf.d/tomcat-7-7.0.42-main
===================================================================
RCS file: /etc/config-archive/etc/conf.d/tomcat-7-7.0.42-main,v
retrieving revision 1.2
diff -r1.2 /etc/conf.d/tomcat-7-7.0.42-main
19c19
< TOMCAT_EXTRA_JARS="jdbc-mysql"
---
> TOMCAT_EXTRA_JARS="jdbc-mysql,commons-pool,commons-collections,commons-dbcp"