顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - dark

頁: [1] 2 3 ... 8
1
程式討論版 / 請問 "例如權限" 程式的計算
« 於: 2017-05-02 12:47 »
像 linux 檔案權限 777 , 755 ...
是將三種狀態 (rwx) 互相搭配的聰明表示法

以此觀念 , 小弟把 5 種資料欄位是否有值 , 以一個數字代表
那就是
資料a = 1 = 2^0
資料b = 2 = 2^1
資料c = 4 = 2^2
資料d = 8 = 2^3
資料e = 16 = 2^4

若值為 13 => 1+4+8 => a , c , d 有資料

0~31 種搭配 , 可能看久了像檔案權限一樣 , 一眼就有答案
今天想程式化
想半天卻想不出 程式 / 數學 上 , 怎麼判斷 13 包含 4

不知哪位能提供一下答案 , 謝謝!!

2
很久沒用 iproute2 了
但印象中 , 不是每個版本 OS 中 "ip rule add" 都會實際生效

小弟剛來此論壇時 , redhat7.3 可以 (作成精簡 image 一直使用中)
而小弟的多數 OS => centos4.4  centos 5.5 都不行

不知有使用 route 分流的各位
使用 OS 都是哪些版本 ?


這能省去抓光碟+測試時間
謝謝!!

3
Linux 討論版 / 分享 watch script
« 於: 2017-03-10 23:55 »
常用 watch 指令
偏偏 watch 不能顯示中文
剛剛終於決定狠心寫一個 script

想想對 watch 的不滿 , 還有 ..
1. clear 完 , 資訊總在螢幕最上方 => 所以改最下方且不 clear
2. 過多資訊總是 head 前幾行 -> 塞指令為什麼不加 tail => 不管 ... 加個 tail
3. 因為要捕捉 ctrl-c , 第?次再看很難的 trap 指令 , 這次只瞄幾秒 , 突然覺得好簡單

這決心是聯想到上此討論 head 與 tail 中斷是誰決定
所以 script 中那行
while true ;do echo ;done | head -$maxn
算是起點吧 ...

代碼: [選擇]
#!/bin/bash
# 中文

hhelp(){
echo $(basename $0)'
-n 幾秒循環
-head 超過螢幕用 head 取樣
-tail 超過螢幕用 tail 取樣

-h|-help|--help
'
exit
}

HT=/usr/bin/head
sec=1
while [ "$1" != "" ] ; do
case $1 in
-n)
sec=$2
shift 2
;;
-head)
HT=/usr/bin/head
shift
;;
-tail)
HT=/usr/bin/tail
shift
;;
-h|-help|--help)
hhelp
;;
*)
cmd=$cmd' '$1
shift
;;
esac
done

trap 'tput cup $(tput lines) 0;echo exit;exit' 1 2 3 15

echo '-------------------------------------------------------------'
echo '執行 '$cmd' / 每 '$sec' 秒'
echo '-------------------------------------------------------------'

maxn=0
while true;do
monitor=$(tput lines)
l=$(($monitor-3))
ans=$(eval "$cmd" | $HT -$l)
n=$(echo "$ans" | wc -l)
if [ $n -ge $maxn ] ; then maxn=$n ; fi

mysc=$(($monitor-$maxn-1))

while true ;do echo ;done | head -$maxn
tput cup $mysc 0
for((i=$mysc;i<$monitor;i++));do
tput cup $i 0
tput el
done

tput cup $mysc 0
echo "$ans"
tput cup $monitor $(tput cols)
sleep $sec
tput cup $mysc 0
done


4
database 討論版 / 請問 sqlite ROWID 問題
« 於: 2017-03-03 09:40 »
因為常用 VACUUM
使得刪除行後 , 所有資料都往前靠齊

若想某筆資料插入到某一行位置
不知該麼做 ?

謝謝!!

目前重寫新 table 解決

5
Linux 討論版 / 時間_絕對秒數_心得
« 於: 2016-10-17 22:48 »
發問過兩篇有關時間的問題
http://phorum.study-area.org/index.php/topic,71853.msg343960/topicseen.html#msg343960
http://phorum.study-area.org/index.php/topic,69998.msg340076.html#msg340076

以下整理兩篇文章的心得
將一些之前錯誤的觀念更正

若觀念中 , 還有錯誤 , 還請多多指教


一、先來結論跟文獻觀念:

GMT=Greenwich Mean Time=格林威治標準時間
太陽(天文)測量計算(倫敦)

UTC=Coordinated Universal Time=國際協調時間
原子共振頻率 (兩千年誤差一秒鐘) , 1980 起
以上兩縮寫是 "方法"

時區代號(其餘)
CST=Central Standard Time=中原標準時間
CST=GMT+8=UTC+8

PST=Pacific Standard Time=太平洋標準時間
PST=GMT-8=UTC-8


1. linux 下 : /etc/sysconfig/clock
ZONE="Asia/Taipei"
UTC=true
其中 ZONE 參數只是給人看的 。 UTC , GMT 即在此定義
而 date 參考的 "資料庫" 則是 /etc/localtime
範本在 /usr/share/zoneinfo/ (注1)

2. 絕對秒數又常被稱 unix time
=> linux 下其實不是 年-月-日 時:分:秒 在記錄 , 而是只有這個絕對秒數在跑
=> 任何時區下 date +%s 的值 , 都是相同值 => 寫資料時直接取絕對秒數即可 , 不需考慮時區

3. 台灣 = UTC+8
所以 , 台灣時間-8小時 = 地球(格林威治地點)的時間



二、 linux 指令 /bin/date
1. -u = utc (此參數很多餘) help 中是指使用 UTC , 實際作用翻譯成 "瞬間移動到倫敦"
=> date +%F_%T => 請問系統 , 現在日期時間 ?
=> date -u +%F_%T => "瞬間移動到倫敦" , 再 .. 請問系統 , 現在日期時間 ?
=> date --date="2016-10-17 21:00:00 10 min ago" +%F_%T  => 請問這時間是?
=> date -u --date="2016-10-17 21:00:00 10 min ago" +%F_%T  => "瞬間移動到倫敦" , 再請問這時間是?

2. --date (info 中提到 ago 用於計算過去時間)
=> 若只單純 -2 day 或只有 -2 hour , 這時負號不至於出錯
但在 --date="2016-10-17 10:00 -2 hour" 有指定時間時 , 使用負號會出錯


三、日光節約 , 注1 , 舊版 date , 實驗


舊版指的是 , 舊系統中找到的 : date 2.0.11 (附件) , date 4.5.3


日光節約
1945-05-01 1946-05-01 1947-05-01 1948-05-01 1949-05-01 1950-05-01 1951-05-01
1952-03-01 1953-04-01 1954-04-01 1955-04-01 1956-04-01 1957-04-01 1958-04-01
1959-04-01 1960-06-01 1961-06-01 1974-04-01 1975-04-01 1979-06-30
這些日期會出錯 :
[root@newsys]# date --date="1979-06-30" +%F
date: invalid date ‘1979-06-30’
加上 -u 則不會 (因為瞬間移動到倫敦了)
[root@newsys]# date -u --date="1979-06-30" +%F
1979-06-30

這是因為 :
[root@newsys]# for i in {1..4} ; do date --date="1979-06-29 23:59:57 $i sec" +%F_%T_%s; done
1979-06-29_23:59:58_299519998
1979-06-29_23:59:59_299519999
1979-06-30_01:00:00_299520000
1979-06-30_01:00:01_299520001
=> 1979-06-30 這天小時沒有0 , 而 --date="1979-06-30" 其實是 --date="1979-06-30 0:0:0"
=> -u 瞬間移動到倫敦才問 , 那時區的資料庫中 , 是節約其他小時的

到舊版系統中 :
[root@oldsys]# for((i=1;i<5;i++));do date --date="1980-06-29 23:59:57 $i sec" +%F_%T_%s; done
1980-06-29_23:59:58_331142398
1980-06-29_23:59:59_331142399
1980-06-30_01:00:00_331142400
1980-06-30_01:00:01_331142401
=> 修正秒數在一年後
=> 同樣是 Asia/Taipei 的資料庫 , 但 10 年前的系統 , 卻是在 "滿現象一年" 做修正
=> 此萬年曆 , 並非 "方程式" , 所以將來也會依宇宙的改變而改變


證明:
1. 將舊版 date , 複製到新版系統使用
[root@newsys]# for i in {1..4} ; do date_2.0.11/bin/date --date="1979-06-29 23:59:57 $i sec" +%F_%T_%s; done
1979-06-29_23:59:58_299519998
1979-06-29_23:59:59_299519999
1979-06-30_01:00:00_299520000
1979-06-30_01:00:01_299520001
=>相同資料庫 , 節約的小時相同

2. 在新系統中 , 改變時區資料庫
[root@newsys]# cp /usr/share/zoneinfo/America/Chicago /etc/localtime
[root@newsys]# date --date="1979-06-30" +%F_%T_%s
[root@newsys]# 1979-06-30_00:00:00_299566800

3. 舊版防呆 , 體貼設計 :
將時區還原台北
[root@newsys]# date_2.0.11/bin/date --date="1979-06-30" +%F_%T_%s
1979-06-30_01:00:00_299520000
此為 version 2.0.11 的防呆設計 , 直接跳到沒刪除節約的時間

[root@newsys]# date_2.0.11/bin/date --date="1979-06-$((30+90))" +%F_%T_%s
1979-09-28_00:00:00_307292400
舊版自動運算的體貼設計



特地找到舊版 , 因為自動運算消失後 , 曾適應一段時間 (懷念)

而小弟之前那兩篇 , 正因不了解 -u 與絕對秒數
一些主機會登入下指令的 , 就被我偷換 /bin/date 成 -u

不過舊版 date 日光節約的防呆也真的很實用

請問 :
如附件壓縮檔 , 是 32bit 系統程式 , cp 到 64 bit 可用 , /lib/ 下也沒有那兩個 lib 衝突 , 是否真不會影響原 64bit 其他程式 ?

是否有發現哪個 unix-like 64 bit 的 date 有此防呆設計 , 或有 source code 可用 ?


(附件超過 512 k , 分兩檔)
bin/date

lib/libc.so.6
lib/ld-linux.so.2

6
雜七雜八 / 請問絕對秒數 unix time
« 於: 2016-10-11 01:41 »
小弟有些資料會多加 unix time 欄位
雖一直沒用到 , 但今天發現
這些欄位有些 +8 hour , 也些沒有 -> 即 +0 hour

思考了很久 , 到底是該不該 +8 小時了 ?


只知
絕對秒數是從 1970-01-01 00:00:00 算起
有分時區嗎 ?

謝謝 !!



睏了 ... 差點貼錯版 ...  :P

7
如下 bash , 連續寫入約 10 秒

w10s.sh
代碼: [選擇]
#!/bin/bash

rm -f tmp.db3

sqlite3 tmp.db3 'create table tmptb(f01, f02, f03)'

for i in {1..999} ; do
    sqlite3 tmp.db3 "insert into tmptb values($(date +%s),$(date +%N),'xx')"
done

sqlite3 tmp.db3 "select f01 from tmptb" | wc -l

r10.sh
代碼: [選擇]
#!/bin/bash
sleep 3
for i in {1..10};do
    sqlite3 tmp.db3 "select f01 from tmptb limit 1" > /dev/null
done
echo $0 end



將 w10s.sh 丟背景執行 , 並執行 r10.sh
代碼: [選擇]
# sh w10s & sh r10.sh
[1] 6342
Error: database is locked
Error: database is locked
Error: database is locked
r10.sh end
# 997
[1]+  Done                    sh w10s.sh

由上可知 , 就算只有讀取 , 仍會 lock
造成寫入少了 3 行

請問 sqlite3 若只有讀取 , 該如何不 lock 呢 ?


8
雜七雜八 / 又來發牢騷了
« 於: 2016-05-27 07:58 »
這幾天很有衝動想買隻滑鼠
但就不知該怎麼買

其實觀察市面上滑鼠已經超過三個月了
(忍受三個多月來滑鼠突然沒回應要重開)
其實滑鼠壽命很長 , 手上的滑鼠都超過 5 年

滑鼠很難選 ...

1. 滾輪要光柵 .. 但就買過一隻微軟竟然是機械
聽說現在羅技也有一些使用機械滾輪 ... 但不拆怎知阿

2. 四項滾輪 .. 小弟習慣右邊 shift 左邊 enter
無論羅技或微軟 , 都是常駐程式擷取這兩鍵動作
基於兩家都只吃自己的產品 ...
... 是的 , 思考不同廠牌中 , 但常駐程式用那麼多很煩

3. 其實小弟手很小 , 市面上常見較小 9.5 cm 都略嫌大一點
而羅技與微軟大小樣式一直都沒亮眼的 ...
小弟手上問題羅技 , 買來可是拔軟膠 , 銼刀砂紙磨小 , 再噴紫色漆

4. 3 號電池 , 因為小弟電池都小改造過
但內部空間要改變不容易

另外 , 看對岸的滑鼠都好亮眼 ... 還有鋼琴鏡面烤漆 (目標)
但亮眼歸亮眼 , 不是光柵滾輪的機率更高

滑鼠的好壞 , 使用上心情真的差很多 ...
滑鼠可是跟狗一樣忠誠的好朋友阿 ..... 雖然我不喜歡狗

真悶 ...

9
雜七雜八 / 網路品質又下降了
« 於: 2016-05-15 17:36 »
記得多年前也曾經明顯感覺到

尤其各大入口網站(除了 google)
額外的連結一跑
到全部結束至少要花 10 秒以上

不過凌晨 4 ~ 6 點就超快

推想 ...
1. 手機的網路使用量耗費太多 internet 頻寬
2. 各網站外部連結太多 , 又疏於管理
(如 pagead2.googlesyndication.com 已被我加入 hosts 中)


前幾天想線上改個圖
還要檢視 dom 中刪除廣告元件 , 來讓頁面可視空間變大

在想 ...
不知有什麼技術 , 可以在前端就檢視網頁原始碼
把不想要的區塊直接刪掉

不知道有沒有智能型的 proxy


10
Linux 討論版 / 請問 utf8 的 "有" 字
« 於: 2016-05-08 15:45 »
使用 putty
當進入 "有" 字的資料夾 (如 "有事" , "沒有" ...)
就會在行首跳一個亂碼
每按一下 enter 就噹一聲  >:(

這個 "有" 字是哪裡不同 ?
還有哪些字也有這問題嗎 ?

謝謝!!


11
Linux 討論版 / linux 系統的文字編碼問題
« 於: 2016-04-26 01:59 »
掛硬碟的系統
LANG="zh_TW.Big5"
samba
dos charset = CP950
unix charset = BIG5

請問 1. samba 看得懂 cp950=big5 嗎 ? 或是一個已經失效 ?
請問 2. 少了 display charset , 那這值這時是什麼 ?



周圍 linux 都是 LANG="zh_TW.utf8"
而且文字檔內容一定是 linux 的 utf8 格式
如 linux_client01 有個 script
#!/bin/bash
cat /allmnt/日期檔

請問 3. 很奇怪 , 執行結果都沒錯
但這時周圍 linux 的 "日期檔" 在 utf8 文件中應該是 9 字元 , 而掛過來的應該只有 6 字元吧?
所有電腦都是掛載網路磁碟 , 在執行 /allmnt/自己IP/go
當初編寫一段執行一段的 , 當然會跑的程式就會跑 ... 只是很奇怪

而所有 xp , linux , win7 都掛網路磁碟存到這
請問 4. 很想 convmv 一口氣全換成 utf8 檔名
不知道哪些機器可能會出錯 ?


謝謝 !!





12
Linux 討論版 / 請問音軌聲道 + 求檔
« 於: 2016-04-20 15:38 »
據 google 資料知 , 儘管多 4, 5.1聲道 , 也存在同一 wav 檔中
使用 ffmpeg

# ffmpeg -i wav.wav
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, wav, from 'wav.wav':
  Duration: 00:52:54.55, bitrate: 2116 kb/s
    Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s32, 2116 kb/s
At least one output file must be specified

find 找到的都是顯示 stereo

請問如何辨識多聲道檔案呢 ? 能用 ffmpeg 嗎 ?

哪裡有 5.1 wav 提供一個小檔案測試看看




13
Linux 討論版 / sort 指令奇怪的問題
« 於: 2016-04-10 10:59 »
原以為中文字 , utf8 之類問題 , 但這些欄位都刪了
看來是遇到欄位使用逗號分隔的 bug 吧

編輯一個文字檔 mm
代碼: [選擇]
0,0,0,0,10,0,0,0,0,0,0,
0,0,0,0,0,0,383,0,0,0,0,
14,17,1,2,25009,2,11307,2,2,17,1,
520,520,520,520,1,486,61,286,865,545,520,
0,0,0,0,0,585,0,386,1070,0,0,
0,0,0,0,0,685,0,66,1170,0,0,
0,0,0,0,0,785,0,76,1270,0,0,
想以數字排列第 7 欄 (直接管線交 cut 檢察排對了沒)

代碼: [選擇]
# sort  -t ',' -k 7 -n mm | cut -d ',' -f7
0
383
0
0
0
11307
61
錯誤
代碼: [選擇]
#sed 's/,/a/g' mm | sort  -t 'a' -k 7 -n | cut -d 'a' -f7
0
0
0
0
61
383
11307
正確
代碼: [選擇]
# cut -d ',' -f 1-8 mm | sort  -t ',' -k 7 -n | cut -d ',' -f7

0
383
0
0
0
11307
61
錯誤

代碼: [選擇]
# cut -d ',' -f 1-7 mm | sort  -t ',' -k 7 -n | cut -d ',' -f7
0
0
0
0
61
383
11307
正確


代碼: [選擇]
# rpm -qf /bin/sort
coreutils-8.4-16.el6.x86_64

# sort --version
sort (GNU coreutils) 8.4
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

由 Mike Haertel 和 Paul Eggert 編寫。

14
雜七雜八 / 海量資料的疑問
« 於: 2015-12-09 18:34 »
小弟猜想 ..
目前網路上的空間 (如百度等)
所存放的檔案依據 MD5 編碼做為索引
抓 BT 或別人檔案就只是加入 link

應該是如此吧 ?

那是否有不同檔案類型的分類呢 ?
(如文件放在文件主機/壓縮磁區 .. 如此猜測不知對否 ?)


若以上猜測正確 ...
那 MD5 雖不可逆 , 但卻可能發生碰撞
目前全球的資料量 , 理當超過 16^43 了吧 ?

就算加上檔案標頭辨識 ... 光只純文字檔 , 有天也會達標吧 ?


有點杞人憂天 ... 但 , 冥王星近照不也花九年  ;)

15
雜七雜八 / 各位認為幾T的硬碟最合適呢 ?
« 於: 2015-10-05 21:41 »
小弟目前認為是 4 T 硬碟較佳
因為 5 6 T 單碟都是 1T 硬塞 , 且氦氣技術不知跑空氣進去會不會掛

而 8 T 以上多冷儲存技術 , 以範圍磁區為單位進行寫入
似乎有點浪費空間且效能未必好的感覺(反正還很貴)


因為剛剛一顆 wd 4T 綠標突然就消失了
奇怪的是 umount 說 device busy , 但 fdisk -l 卻沒出現這顆
因為尚有 guest os 須工作到凌晨 , 所以不能重開機
但半小時候 , 突然又出現了 ... 真奇妙

所以不禁思考 , 選 4 T 對嗎 ?  是否該再買一顆 ?
裡面雖然是布袋戲 , 七龍珠 , 海賊王 ...
理當歸類成 "重要文件" , 但備份似乎 ...  :-\

16
請問
代碼: [選擇]
a(){
while true ;do 想事先多做些事 ;done
}

a &

while true;do
 做事1 &
 做事2 &
...

 wait
done

如上架構
若多出 a() 想執行 , 此時 wait 會因為 a() 而一直等

是否有辦法讓 a() 變為不是此 script 的子程序呢 ?

謝謝!!

17
Linux 討論版 / 秒數數字判斷錯誤
« 於: 2015-07-10 10:38 »
請問以下問題 , 小弟想不出為何 08 09 錯誤 ...
代碼: [選擇]
for i in {0..60} ; do
  date +%S
  if [ $(($(date +%S)%10)) -eq 0 ] ;then
    echo ya
  fi
  sleep 1
done
if [ 08 -eq 8 ] ;then echo ya ; fi
08 09 秒時會出現錯誤而中止
-bash: 08: value too great for base (error token is "08")
-bash: 09: value too great for base (error token is "09")

其餘秒數皆不會
為什麼只有 08 09 秒有錯 ?


18
代碼: [選擇]
<script src="jquery-1.7.1.min.js"></script>
<script>

aaa="a,x={'b1':'b1v'},c";

data=aaa.split(",");
data[1]=eval(data[1]+";");


var output='data:<br>';
$.each(data, function( key, value ) {
output+=key+"="+value+"<br>";
});
document.write(output);

var output='<br><br><br>data[1]:<br>';
$.each(data[1], function( key, value ) {
output+=key+"="+value+"<br>";
});
document.write(output);
</script>

執行結果
代碼: [選擇]
data:
0=a
1=[object Object]
2=c



data[1]:
b1=b1v

如上:
請問 x 去哪了 ?


謝謝!!

19
Computer 討論版 / 請問 GPU 跟顯示卡的關係
« 於: 2015-06-04 00:48 »
小弟只知目前顯示卡內是 GPU 不依靠 CPU 的獨立運算
但上網看顯示卡 , 都只說是 GPU , 但沒說這 GPU 有幾顆

又聽說有跑運算程式 , 可以交由 GPU 來運算
是怎樣丟給顯示卡跑的呢 ?
不知又會達到什麼程度呢 ?

謝謝!!

20
程式討論版 / 請問排序的相反
« 於: 2015-05-23 07:51 »
大家早 ...
先分享一下 : 根據研究 , 睡夢中的思考能力比醒著時快
小弟是深信不疑 ... 只可惜一覺醒來 , 還是想不出好辦法
(不知道是不是英國研究的 ... 小弟個人是滿喜歡英國研究的報導)

 :P

一物件中許多雜湊 , 依 t=絕對時間 排序著:
t=1,資料=...
t=1,資料=...
t=2,資料=...
t=3,資料=...
.....

若希望順序是上下的 t 值不相等 , 即
t=1,...
t=2,...
t=1,...
t=3,...
(許多種答案之一種即可)

若某值如 t=2 超過半數時 , 寧可塞 t=null,null,null...(有 1970 年以前的資料)
例如

t=1,...
t=2,...
t=2,...
t=2,...
t=2,...
t=3,...
變成
t=2,...
t=1,...
t=2,...
t=3,...
t=2,...
t=null,null,...
t=2,...

1.
不能一開始就塞 t=0
這樣雜湊長度就變太長了

2.
處理速度是首選 , 目前也還不知什麼方法最快
另外也一邊思考著會不會太耗記憶體 (純程序邏輯)
或需不需要暫存檔 (借由 linux 的 join paste 或不同程式語言)


思考
代碼: [選擇]
while (count(old_array)>0){
    list (old_array){
        if (t不同) 移動到 tmp_array
        else 移動到底部
    }
}

但資料多時 , 這樣的純程序
恐怕不比 linux 指令 split 切一半 , 兩檔合併 (又有過半數問題)

目前想到這裡 ... 所以上來請教
不知有沒有 unsort 這類指令或函數 ?
或有比較有效率的邏輯 ?


謝謝!!

21
前天資料整理一半就熱當 ...昨天把 NB 風扇清一清
早上起來我的筆電 z360 還活著 ...
... 沒辦法 ... 我更怕熱 ... 要吹冷氣

但只要室溫超過 25 度 , 即使有散熱墊
背面蓋上使用半小時一樣會到 七八十度

不知道大家有沒有散熱好方法呢 ?
... 最好有 "懶人不清風扇法"

思考了一天 , 真該抱怨一下 .. 筆電散熱機制怎這麼差
... 不過實際原因恐怕不知哪些原件老化 , 阻抗變大 , 更易發熱

... 廢話太多

想問一下 ..
1. 有電烙鐵溫度高於 1000 度的嗎 ? (鋁的熔點 900 多 , 有人自製過散熱片嗎 ?)

2. 如筆電風扇 , 風向由正上方(垂直面)吹向側面
有側面吹向側面的風扇嗎 ? (想把傳導機制改為對流)


22
網頁技術 / 分享給還在用舊版千千靜聽
« 於: 2015-04-21 18:38 »
天阿 ... 50 行不到 ... 花了我 4 小時


應該去年千千靜聽 (我用 5.7 版) 抓歌詞就漸漸錯誤了
可能是大陸越來越不注意台灣流行音樂
所以較新的歌都沒歌詞 , 甚至抓到歌名相近卻不同首的大陸流行樂

小弟就把自動下載歌詞關掉
手動編輯 lrc 檔

先給建議 ..
1. 至少把 "下載後自動覆蓋" 關閉 , 小弟沒把握抓到是正確
使用手動搜尋歌詞 , 若舊檔存在 , 就另外命名檔案
再使用 "歌詞關聯" 決定留不留

2.
findlrc01 使用 google 搜尋歌手+歌曲 , 從 mojin (魔鏡歌詞網) 抓
原本想先代替去把 (hosts 位置) 站裡的資料 file 回來確認 ...
寫到最後 , 乾脆 google + 完直接貼 bash (吃飯時間近了)
可增加其他方法 findlrc02 ... findlrc03



以下解法 .. (須有自己的 web server)
1.
將聽歌的桌機 hosts 檔增加
代碼: [選擇]
192.168.8.80 ccnc.qianqian.com
192.168.8.80 cct2.qianqian.com
192.168.8.80 ttlrccnc.qianqian.com
192.168.8.80 ttlrcct.qianqian.com

2.
php.conf 增加 php 副檔名 dll (我是 8.80 web server 那台)
代碼: [選擇]
AddHandler php5-script .php .dll
AddType text/html .php .dll

3. 將底下 php 檔存成 /var/www/html/dll/lyricsvr.dll
代碼: [選擇]
<?php
session_id
("lrcdirtmp");
session_start();


function 
unicode_decode($strs){
$restr='';
for($i=0;$i<strlen($strs);$i+=4){
$tmpstr=substr($strs,$i,4);
$tmpstr=chr(base_convert(substr($tmpstr,0,2),16,10)).chr(base_convert(substr($tmpstr,2,2),16,10));
$tmpstr=iconv('UCS-2''UTF-8'$tmpstr);
$restr.=$tmpstr;
}
return $restr;
}

function 
findlrc01($name,$song){
// 魔鏡歌詞網
$tmpstr='LANG=zh_TW.UTF-8;lynx --dump "$(lynx '."--dump 'http://www.google.com.tw/search?q=$name+$song+歌詞&gws_rd=ssl' | grep mojim | ".'head -1 | awk "{print \$1}")" | sed "s/^[ \t]*//g" | grep -E "^\\[ti:|^\\[ar:|^\\[al:|[00-59]:[00-59]" ';
system($tmpstr);
}

if(@
$_GET['dl?Id']!=""){
findlrc01($_SESSION['a'][$_GET['dl?Id']]['歌手'],$_SESSION['a'][$_GET['dl?Id']]['歌名']);
}else{
$tmpstr=time();

$_SESSION['a'][$tmpstr]['歌手']=iconv("BIG5","UTF-8",iconv("gb2312","BIG5",iconv("UTF-8","gb2312",unicode_decode($_GET['Title']))));
$_SESSION['a'][$tmpstr]['歌名']=iconv("BIG5","UTF-8",iconv("gb2312","BIG5",iconv("UTF-8","gb2312",unicode_decode($_GET['sh?Artist']))));

echo '<?xml version="1.0" encoding="UTF-8" ?>
'."\n";
echo '<result>'."\n";
echo ' <lrc id="'.$tmpstr.'" artist='.$_SESSION['a'][$tmpstr]['歌手'].' title="'.$_SESSION['a'][$tmpstr]['歌名'].'"></lrc>'."\n";
echo '</result>'."\n";

}



$oldist=array_keys($_SESSION['a']);
$nowtimeu=time();
for($i=0;$i<count($oldist);$i++){
if($nowtimeu-$oldist[$i]>600){
unset($_SESSION['a'][$oldist[$i]]);
}
}


?>




ps ..
千千靜聽發出查詢
http://ttlrccnc.qianqian.com/dll/lyricsvr.dll?sh?Artist=E180875B015A&Title=3172315C2F66&Flags=0&ci=6111756532545c3a5316101c0219106c5622292758564444141c464808425c5353011d01
千千靜聽發出要檔
http://ttlrccnc.qianqian.com/dll/lyricsvr.dll?dl?Id=783662&Code=163128925&ci=6111756532545c3a5316101c0219106c5622292758564444141c464808425c5353011d01


剛發現一個問題
當抓下來的魔鏡網頁中 , 同時有兩首以上歌詞
全抓存檔 , 但千千靜聽視 "第一首歌歌詞=[時間值]" + "最後一首歌標題=[標籤值]" 有效


23
代碼: [選擇]
#!/bin/bash

hhelp(){
echo '標準差
'$(basename $0)' 數列
echo 數列 | '$(basename $0)
exit
}
if [ "$(echo "$1 " | grep -Ei '\--help|-h ')" != "" ] ; then hhelp ; fi

##### 問題在這裡 : -t 秒數
nums=($(while read -t 1 x;do
echo $x | sed 's/ /\n/g'
done | grep -Ev '^$|[^0-9\.]'))

if [ "$nums" = "" ] ; then nums=($(echo $@ | sed 's/ /\n/g' | grep -Ev '^$|[^0-9\.]')) ;fi


#echo ${nums[*]}

#  ____________________________
# √ [(N1-MA)²+(N2-MA)²+...] /n         (兩個迴圈)
#echo ${nums[*]} | awk 'BEGIN{ma=0;total=0}{for(i=1;i<=NF;i++){ma=ma+$i}ma=ma/NF;for(i=1;i<=NF;i++){total=total+($i-ma)*($i-ma)};printf "%.2f", sqrt(total/NF)}'

#  _________________________
# √ (N1²+N2²+...)/n  -  MA²              (一個迴圈)
echo ${nums[*]} | awk 'BEGIN{ma=0;total=0}{for(i=1;i<=NF;i++){ma=ma+$i;total=total+$i*$i}ma=ma/NF;printf "%.2f\n",sqrt((total/NF)-(ma*ma))}'


數列 nums 的取值方式如上
while read 比 預設變數 $@ 優先

執行方式可以
[root@MDS77 tmp]# mymath_sd 1 2 3 4 5
1.41
[root@MDS77 tmp]# echo 1 2 3 4 5 | mymath_sd
1.41

while read -t 1 x , 等待秒數是為了讓使用預設變數輸入時可用 (原本 -t 0)

------------------------------------------------
但多次引用 mymath_sd 時 , 例如
[root@MDS77 tmp]# while true;do
> mymath_sd $(for i in {1..10};do echo {1..10}$RANDOM | mymath_sd ; done)
> done
39204.39
43584.46
awk: (FILENAME=- FNR=1) fatal: division by zero attempted
31496.08
awk: (FILENAME=- FNR=1) fatal: division by zero attempted
34499.85

找到原因是 while read -t 時間太短 , 子程序來不及讀
測試不同台 linux , cpu 慢的好像還比較不會錯 =.=


不知除了 read , 是否有其他指令能從管線 pipe 取得資料呢 ?
謝謝!!


24
雜七雜八 / /bin/date 處理 79-06-30
« 於: 2014-08-11 08:28 »
剛剛從 log 看到
代碼: [選擇]
date: invalid date ‘79-06-30 +11 year’
date: invalid date ‘81-02-29 +11 year’
date: invalid date ‘85-02-29 +11 year’

這應該是民國轉西元的動作
date --date="85-02-29 +11 year" +%F
85-02-29 不存在 ... 那 79-06-30 呢 ?

手動打了
date --date="79-06-30" +%F
結果
date: invalid date ‘79-06-30 ’



25
PHP程式設計討論區 / php session 行為變了嗎?
« 於: 2014-05-22 23:11 »
<?php //a1.php
session_start();
$_SESSION['a']="aa";
?>
<a href="b2.php">b2</a>

<?php //a2.php
echo $_SESSION['a'];
?>

第一個視窗開 a1.php , 再進入 a2.php 會出現 echo
再另外新開第二個視窗 , 直接連 a2.php 理當不會出現 echo
理當這才是 session 觀念吧 ...

但今天怎麼試 , 第二新開視窗都像繼承了第一個視窗一樣
查詢 cookies 中的 PHPSESSID 也都沒變
(當然不同瀏覽器正常)


是 session 行為變了 , 還是 browser 行為變了 ?
(ps: 以前使用 session 的確第二視窗會不同 session id 阿)


另外 ..
以前沒使用 cookies 習慣
而以前的印象 , 一個網站可以用 5 個 cookies ?
但剛剛稍微 google 了一下 , 有人說 n 個的 ... 就是沒看到 5 個的
但也還沒找到第二個 cookies 怎麼用 ?

1.
而目前小弟想試試一個 a.php -> b.php 的變數傳遞有哪些方法
不知這樣能不能兩個以上 cookies 同時使用

2.
單就 a -> b  , 能使用兩個 session (在 server 端)
... 理當換一下 session_id() 就好吧 ?

以上 "用途" , "可行性" , "做法" 都還在思考中

不知各位是否有利用 session 或 cookies 做過特別手法的傳遞數值 ?
還請多多指教 , 謝謝!!

26
不少程式編輯軟體都有個功能
function abc(){
......
}

在這兩行前就有 + - 符號
可以縮起來隱藏

if , 迴圈 ... 等都有


假設程式碼 30 ~ 50 行 , 想要視為一區段
有能讓這範圍 "縮起來" 的辦法嗎 ?


以往都是在前後行 /* # 顯眼的標示 # */
但若遇到千行程式 , 滑鼠滾輪都抗議了 ...

因此挑選上了 Aptana 作為編輯器 (正在熟悉中)
且正在思考是否有 "什麼記號或功能"
能將自訂範圍縮起來

不知各位如何處理此類困擾呢 ?

謝謝!!

27
在 linux 指令列目前只知道 ldapsearch 列出使用者資訊

有指令能達到如 php
ldap_bind($ldapconn,"uid=".$帳號.",ou=users,dc=dark,dc=lab",$密碼)
輸入帳號密碼 , 得知此密碼正確的指令嗎 ?



另外 acl 預設中
"database config" , "database monitor"
搜尋到的文件中似乎都沒用到 , 這兩行是必要嗎 ?
代碼: [選擇]
database config
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
        by * none

database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=Manager,dc=my-domain,dc=com" read
        by * none

28
Linux 討論版 / 臨時寫的 chroot 方便 script
« 於: 2014-01-04 00:04 »
今天跟同事說明 chroot
臨時寫了一隻方便用的 script
寫完講完滿開心的 ... 因為竟然都沒出錯

但直覺應該有例外 ... 哪有 check lib 就全過的
一定是今天拿來舉例的指令都太幸運了


1. 建立 script 在想 chroot 的目錄下
2. # sh thissh (第一次不代參數,會建立資料夾跟 bash )
3. # sh thissh 指令 (建立想支援的指令與所需 lib)
代碼: [選擇]
#!/bin/bash

[ ! -d "bin" ] && {
        mkdir bin lib
        ln -s lib lib64
}
export thisdir=$PWD

supcmd(){
        errmsg=$(echo $1 | chroot $thisdir 2>/dev/stdout)
        if [ "$(echo "$errmsg"|grep -i error)" = "" ] ; then
                return 0
        else
                cp $(whereis $(echo "$errmsg" | awk 'BEGIN{FS=": "}{for(i=1;i<NF;i++)print $i}' | grep -vE ' |/') | sed 's/ /\n/g' | grep '^/lib') lib
                supcmd $1
        fi
}

if [ "$1" = "" ] ; then
        scmd=bash
        if [ ! -f "bin/bash" -o "$(ls lib)" = "" ] ; then
                cp /bin/bash bin
                cp $(find /lib* | grep ld-linux) lib
        fi
else
        scmd=$(basename $1)
fi

if [ ! -f "bin/$scmd" ] ; then
        cp $(whereis $scmd | sed 's/ /\n/g' | grep bin | head -1) bin
fi
supcmd "$scmd"
echo 'it is support '$scmd' in # chroot '$PWD

29
client :
eth0 : 10.1.1.2
eth1 : 100.1.1.2

server :
eth0 : 10.1.1.1
eth1 : 100.1.1.1


兩個 interface 對接
並使用 hosts 定義
10.1.1.1    t1.test
100.1.1.1  t2.test


server 的 /etc/postfix/main.cf 設定
myhostname = t1.test  給 (dark@t1.test)
myhostname = t2.test  給 (dark@t2.test)

如此定義兩行
一個星期前兩個都會動作 , 並走不同介面
(湊巧達成嗎 ? myhostname 不能多個嗎 ? )

今天想再用這 lab , 卻只第二行生效 (有覆蓋作用)
不知想在兩台設備間
達到經由不同介面到達同一用戶信箱
大家有哪些想法呢 ?

ps: 也不知哪個版本開始不能 dark@10.1.1.1 用 IP 方式 ?

謝謝!!

30
Linux 討論版 / ip alias 與 routing table
« 於: 2013-05-14 12:04 »
搞了一早上 ... 分享一下幾個重點

ifconfig eth0 1.1.1.1 netmask 255.255.255.0
ifconfig eth0:0 1.1.1.2 netmask 255.255.255.0
ifconfig eth0:1 1.1.1.3 netmask 255.255.255.0
再由 iptables 決定使用的 IP

想看看多 port 傳輸現象 , 故排除使用 iptables
且當再下
ifconfig eth0 1.1.1.4 netmask 255.255.255.0
1.2 與 1.3 就消失了

原因是
# ip r l table all | grep eth0 | grep 1.1.1
1.1.1.0/24 dev eth0  proto kernel  scope link  src 1.1.1.1
broadcast 1.1.1.255 dev eth0  table local  proto kernel  scope link  src 1.1.1.1
local 1.1.1.2 dev eth0  table local  proto kernel  scope host  src 1.1.1.1
local 1.1.1.3 dev eth0  table local  proto kernel  scope host  src 1.1.1.1
broadcast 1.1.1.0 dev eth0  table local  proto kernel  scope link  src 1.1.1.1
local 1.1.1.1 dev eth0  table local  proto kernel  scope host  src 1.1.1.1

重點在最後的 src , 該網段介面先下先贏 ..
eth0 先下 , 所以若有變動 eth0 , 1.1.1.0/24 也受牽連

ifconfig eth0 1.1.1.1 netmask 255.255.255.255
ifconfig eth0:0 1.1.1.2 netmask 255.255.255.0
ifconfig eth0:1 1.1.1.3 netmask 255.255.255.0

這樣 1.1.1.0/24 的主角就是 eth0:0 了

了解上述後便從 routing table 下手
上面那行指令 , 把 ip 換掉給 eval

eval "$(ip r l table all | grep eth0 | grep 1.1.1 | sed 's/^/ip route change /;s/src 1.1.1.1$/src 1.1.1.x/')"

跨網段
ip r change default .... ( src 也支援 )


頁: [1] 2 3 ... 8