原本的資料列表使用ScrollView,用addview的方式一個個加入每筆資料
資料較少時沒有什麼問題,但是當資料量增加後,前置Loading時間將近10秒之久
且沒有辦法把在資料同步的非同步處理程序(async)顯示Loading ,是UI Thread卡住的問題
解法:
步驟稍微繁瑣,僅敘述流程:
1.將scrollview改為ListView顯示,可以解決第一次進入時Loading的問題
2.ListView滑動會有Lag問題(使用SimpleAdapter),改用BaseAdapter
3.BaseAdapter結合ViewHolder,並把setText一類負擔較重的程式碼加入在
if(convertView == null) 的判斷示裡面
4.在getView裡面把原本該做的畫面調整事項都加進來,字型修正請改為
tf = Typeface.createFromAsset(context.getAssets(), "fonts/example.ttf");
並放置於
public MyBaseAdapter(Context context, ArrayList<RecordListData> myList){
tf = Typeface.createFromAsset(context.getAssets(), "fonts/example.ttf");
}
2014年12月18日 星期四
2014年12月3日 星期三
awk 分析 log 語法
為了分析mail當中擷取一些特定ip的內容出來 並想做統計
順便學一下awk基本的技巧
這篇大陸人寫的教學非常清楚,也是本篇主要文獻
在命令列直接下
# awk '{ print }' /etc/passwd
可以直接印出passwd的內容
# awk '{ print "hiya" }' /etc/passwd
每一行印出一個hiya
# awk -F":" '{ print $1 }' /etc/passwd
以冒號":" 為區隔 印出第一個區隔內的變數
外部腳本:
# awk -f myscript.awk /var/log/maillog
調用外部腳本myscript.awk , 分析maillog
腳本內容:
______________________________________________________
順便學一下awk基本的技巧
這篇大陸人寫的教學非常清楚,也是本篇主要文獻
在命令列直接下
# awk '{ print }' /etc/passwd
可以直接印出passwd的內容
# awk '{ print "hiya" }' /etc/passwd
每一行印出一個hiya
# awk -F":" '{ print $1 }' /etc/passwd
以冒號":" 為區隔 印出第一個區隔內的變數
外部腳本:
# awk -f myscript.awk /var/log/maillog
調用外部腳本myscript.awk , 分析maillog
腳本內容:
______________________________________________________
BEGIN {
FS=" "
}
FS=" "
}
{ print $1 }
begin是起始執行區段,可以放一些初始設定值
FS就是區隔變數,這邊我用空白
所以這個腳本可以印出每一行的第一個空白區分出的變數
______________________________________________________
BEGIN {
FS=" "
}
$7 == "Login:" { print $8 }
每一行用空白區隔的第七筆資料是"Login:"時,印出第八筆資料
awk 提供了完整的比較運算符集合,包括 "=="、"<"、">"、"<="、">=" 和 "!="。另外,awk 還提供了 "~" 和 "!~" 運算符,它們分別表示「匹配」和「不匹配」。
______________________________________________________
{
if($7 == "Login:")
{
print $8
}
}
用if 寫,功能與上一段程式相同
______________________________________________________
{
if($7 == "Login:")
{
if($10 != "rip=60.248.95.230,")
{
print $8 " " $10
}
}
}
if($7 == "Login:")
{
if($10 != "rip=60.248.95.230,")
{
print $8 " " $10
}
}
}
當第七變數是"Login:" 且第10變數不等於"rip=60.248.95.230,"
就印出來
2014年11月25日 星期二
linux 備份
備份linux帳號資訊
一、 有影響到的目錄 /etc/passwd /etc/shadow /etc/group /etc/gshadow /var/spool/mail /home
二、 在舊機器備份目錄
1.mkdir /root/move
2.export UGIDLIMIT=500 只移轉uid500以上的使用者帳號
3.awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > /root/move/passwd.mig 複製使用者帳號
4.awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > /root/move/group.mig 複製群組帳號
5.awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > /root/move/shadow.mig 複製/etc/shadow
6.cp /etc/gshadow /root/move/gshadow.mig 複製/etc/gshadow ,這裡備份了全部
7.tar -zcvpf /root/move/home.tar.gz /home 備份/home
8.tar -zcvpf /root/move/mail.tar.gz /var/spool/mail 備份/var/spool/mail
三、在新機上作使用者帳號群組的備份
1.mkdir /root/oldusers.bak
2. cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/oldusers.bak 將新機使用者及群組帳號檔備份
3. 將舊帳號加入新機帳號檔
# cat passwd.mig >> /etc/passwd
# cat group.mig >> /etc/group
# cat shadow.mig >> /etc/shadow
# /bin/cp gshadow.mig /etc/gshadow
# cat group.mig >> /etc/group
# cat shadow.mig >> /etc/shadow
# /bin/cp gshadow.mig /etc/gshadow
四、將 home.tar.gz複製及解壓縮至新機/home
# cd /
# tar -zxvf /path/to/location/home.tar.gz
# tar -zxvf /path/to/location/home.tar.gz
五、將mail.tar.gz 複製及解壓縮至新機/var/spool/mail
# cd /
# tar -zxvf /path/to/location/mail.tar.gz
# cd /
# tar -zxvf /path/to/location/mail.tar.gz
六、重新開機
2014年10月21日 星期二
Android EditText New line Detect 行數限制功能
上面是在stackoverflow找到的功能,讓EditText可以限制輸入在幾行以內
但是有一些Bug
1.假設設定為最多5行,則當使用者在第五行文字中間輸入Enter(換行)時,將會把游標以後的資料刪除,因為他只是尋找最後一個換行符號(\n)並把之後的資料刪除而已。
2.連續輸入enter鍵沒有辦法偵測到,推測是java把結尾的\n自動略過了。
3.只有在輸入enter鍵時才會啟動,而且文章過長自動換行不會被偵測到。
修改了一個新版的換行限制:
直接偵測edittext裡面目前行數,每次更新時游標自動處於最後一行的位置,較符合使用者習慣。一併也解決上面程式碼的bug了
但是有一些Bug
1.假設設定為最多5行,則當使用者在第五行文字中間輸入Enter(換行)時,將會把游標以後的資料刪除,因為他只是尋找最後一個換行符號(\n)並把之後的資料刪除而已。
2.連續輸入enter鍵沒有辦法偵測到,推測是java把結尾的\n自動略過了。
3.只有在輸入enter鍵時才會啟動,而且文章過長自動換行不會被偵測到。
修改了一個新版的換行限制:
直接偵測edittext裡面目前行數,每次更新時游標自動處於最後一行的位置,較符合使用者習慣。一併也解決上面程式碼的bug了
2014年8月14日 星期四
在android上實作FTP連線功能
首先需要將兩個libs匯入,分別是commons-io-x.x與commons-net-x.x
在程式碼內
import org.apache.commons.net.ftp.FTPClient;
首先先設定
FTPClient ftpclient;
boolean connectSuccess = false;
boolean skipAnim = false;
ArrayList<String> images;
String ftpAddress = "192.168.0.1";
String userName = "ftp_id";
String passWord = "ftp_password";
String retrieveFromFTPFolder = "/your_folder/";
int port = 21;
FTPService ftpServer;
設定完後即可在需要呼叫的地方呼叫:
ftpServer = new FTPService(userName, passWord, ftpAddress, port,
retrieveFromFTPFolder);
即可連線
FTPservice服務不要忘記一起放進專案
在程式碼內
import org.apache.commons.net.ftp.FTPClient;
首先先設定
FTPClient ftpclient;
boolean connectSuccess = false;
boolean skipAnim = false;
ArrayList<String> images;
String ftpAddress = "192.168.0.1";
String userName = "ftp_id";
String passWord = "ftp_password";
String retrieveFromFTPFolder = "/your_folder/";
int port = 21;
FTPService ftpServer;
設定完後即可在需要呼叫的地方呼叫:
ftpServer = new FTPService(userName, passWord, ftpAddress, port,
retrieveFromFTPFolder);
即可連線
FTPservice服務不要忘記一起放進專案
2014年8月6日 星期三
install dovecot sendmail using webmin 收信錯誤問題
環境介紹:fedora 20 +webmin +dovecot+sendmail
主要是dovecot的部分,當用webmin安裝完dovecot跟sendmail後
開啟firewall的port讓服務啟動,用微軟live mail連接時
卻產生了0x800CCC90 0x800CCC92的錯誤碼
從伺服器的log來看 似乎是mail儲存位置沒設定
Aug 06 16:49:30 POP3(UserA): Error: user UserA Initialization failed: Namespace '': Mail storage autodetection failed with home=/home/UserA
在webmin裡面設定也無效
最後還是進入主機 設定mail儲存位置
首先
vi /etc/dovecot/conf.d/10-mail.conf
在30行左右的地方,解除標記並加上
mail_location = maildir:~/Maildir
mail_location = maildir:~/Maildir
service dovecot restart
這樣就ok了!!
2014年8月5日 星期二
VirtualBOx Appliance-19 Error Message 更新錯誤
Error relaunching VirtualBox VM process:5
Command line: '81954AF5-4D2F-31EB-A142-B7AF187A1C41-SUPLIB-2NDCHILD
--comment "CS50 Appliance 19_1" --startvm
e1971bc0-0443-4b19-98a1-50e50083167e --no-startvm-errormsgbox'
(rc=-104)
The way resolve it is downgrade from virtualbox 4.3.14 to 4.3.12
在Virtualbox裡面開啟時出現這個錯誤,問題是在virtual本身,更新到版本4.3.14 會有此問題
另外下載4.3.12降轉,也就是重新安裝即可...
訂閱:
文章 (Atom)