發表文章

Matlab從指定檔案讀取URL並下載

Activity啟動模式(Launch Mode)

從 這篇 的簡短解說可以快速了解啟動模式 Activity有四種啟動模式,它們是: standard 標準模式,每次都新建一個實例對象 singleTop 如果在任務棧頂發現了相同的實例則重用,否則新建並壓入棧頂 singleTask 如果在任務棧中發現了相同的實例,將其上面的任務終止並移除,重用該實例。否則新建實例併入棧 singleInstance 允許不同應用,進程線程等共用一個實例,無論從何應用調用該實例都重用 只要在AndroidManifest.xml對activity 增加android:launchMode屬性即可指定 android:launchMode="singleInstance" Android Developer文件也有解說 https://developer.android.com/guide/components/tasks-and-back-stack?hl=zh-tw 要觀察Task可以在adb shell輸入下面的指令 dumpsys activity activities launchMode寫在Manifest裡面是指若呼叫者沒有加FLAG時的預設行為, 要改變這個預設結果只要在intent中setFlag就可以改變了 FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_SINGLE_TOP 這裡看到一個有趣的參數FLAG_ACTIVITY_NO_ANIMATION, 可以免除切換APP的動畫 如果發現intent都是null, 可能是onNewIntent需要Override一下 @Override protected void onNewIntent(Intent intent) {     super.onNewIntent(intent);     setIntent(intent); } http://stackoverflow.com/questions/6352281/getintent-extras-always-null http://fanli7.net/a/bianchengyuyan/C__/20130619/37...

python轉換IP/Port成Inet和mac數值轉換

判斷 endian https://stackoverflow.com/questions/1346034/ import sys sys.byteorder 'little' IP/Port和INET之間的轉換 http://blog.csdn.net/fan_hai_ping/article/details/8435140  socket.inet_aton("192.168.1.1") '\xc0\xa8\x01\x01'  addr = socket.inet_aton("192.168.1.1")  type(addr) import socket  addr = socket.inet_aton('127.0.0.1')  addr '\x7f\x00\x00\x01' >>> socket.inet_ntoa(addr) '127.0.0.1' 轉換port socket.htons(0x1234) 13330 socket.ntohs(0x1234) 13330  socket.ntohs(1234) 53764  socket.htons(1234) 53764 取得目前host ip https://www.pythonsheets.com/notes/python-socket.html  import socket  socket.gethostname() 'MacBookPro-4380.local'  hostname = socket.gethostname()  socket.gethostbyname(hostname) '172.20.10.4'  socket.gethostbyname('localhost') '127.0.0.1' MAC數值轉換 import binascii  mac = '00:11:32:3c:c3:0b'  byte = binascii.unhexlify(mac.rep...

Android ndc cmd note

ndc是android的NativeDaemonConnector提供framework與底層溝通, 在每一個版本中支援的指令不近相同, 像是 這裡 有彙整ndc resolver的指令, 另外在 這篇 有畫大致的架構圖 舉例來說ConnectivityManager在設定網路的時候會呼叫NetworkManagementService https://android.googlesource.com/platform/frameworks/base.git/+/android-4.2.2_r1/services/java/com/android/server/ConnectivityService.java public ConnectivityService(Context context, INetworkManagementService netManager ,   mNetd = checkNotNull( netManager , "missing INetworkManagementService");         if (changed) {             try {                 mNetd .setDnsServersForInterface(iface, NetworkUtils.makeStrings(dnses));                 mNetd .setDefaultInterfaceForDns(iface);             } catch (Exception e) {                 if (DBG) loge("exception setting default dns interface: " + e);   ...

Windows 10指定使用IGMPv2

微軟windows 10文件指出 https://docs.microsoft.com/en-us/powershell/module/nettcpip/set-netipv4protocol?view=win10-ps 使用PowerShell的Set-NetIPv4Protocol指令就可以改變IGMP版本 使用系統管理員啟動PowerShell 不會啟動Powershell可以用系統Ctrl+X啟動快捷選單選系統管理者進入PowerShell 如果快捷選單中只有命令提示字元,也可以進入後再輸入powershell進入 Set-NetIPv4Protocol -IGMPVersion Version2 相反的指令就是get-netipv4protocol, 可以查看目前設置的結果 Get-NetIPv4Protocol DefaultHopLimit             : 128 NeighborCacheLimit(Entries) : 256 RouteCacheLimit(Entries)    : 4096 ReassemblyLimit(Bytes)      : 66082592 IcmpRedirects               : Enabled SourceRoutingBehavior       : DontForward DhcpMediaSense              : Enabled MediaSenseEventLog          : Disabled IGMPLevel                   : All IGMPVersion          ...

strace追蹤程式使用的system call

圖片
追蹤指令使用的system call strace cat /dev/null -t 追蹤輸出加入時間資訊, 時:分:秒 -tt 使用時:分:秒.微秒資訊, 例如11:22:33.123456 -ttt 使用timestamp微秒數值 -r 顯示相對時間 -T 顯示耗用時間 -o {Output file path} 輸出到檔案, 如果不使用-o 也可以用重導向stderr 2>{Output file path}  -c 統計呼叫的次數與錯誤 -x 以十六進位輸出含有不可印的字串 -xx 所有字串以十六進位輸出 -s {length} 輸出字串時最多印出的字數, 超過就會在後面加上...表示大於長度 -v 輸出所有的系統呼叫, 因為會太多資訊所以一般會使用-e指定要追蹤的類型 -f 追蹤fork -ff 追蹤fork, 如果有-o選項的話, fork的pid會輸出到{Output file path}.{pid} -F 追蹤vfork -u {username} 以特定使用者執行程式並追蹤 追蹤已啟動的process運作 strace -p {ProcessID} 追蹤特定的system call 像是可以用-eopen來追蹤loader載入的library strace -eopen -f ./test 或是追蹤gcc的運作 strace -eopen -f gcc test.c -o test -e 的語法是 -e [qualifier=][!]value1[,value2]... qualifier的選項有trace,abbrev,verbose,raw,signal,read,write,預設不寫是用trace, 所以上面的指令用-eopen等於是-e trace=open !表示不包含/排除 value的選項通常有open,close,rean,write,all,none, trace本身有額外的value可用, file,procee,Network,signal,ipc signal有其他的用法, 像是要排除signal SIGIO的部分, 可以寫-e signal=!SIGIO 實際使用...

Android Studio加上Java編譯參數

圖片
在Android Studio加上Java Compile option 有時會想知道javac編譯時跑出來的Warning訊息的細節,例如-Xlint:deprecation 其實只要像下圖在build.gradle編譯設定中加入 tasks.withType(JavaCompile) {   options.compileArgs << "-Xlint:deprecation" }

BASH分割檔案, 切除檔頭

分割檔案 使用split指令,可以用檔案大小來分割 split -b {檔案大小} {輸出的 分割 檔名} 例如:  split -b 100M bigfile split_file_prefix 或是用行數來分割 split -l {最大行數} {輸出的分割檔名} 如果有換行問題, 可以先用dos2unix處理再split 切除檔頭 可以使用dd來處理 dd的skip忽略的單位以bs為準的,也是dd一次的讀寫單位,太低的話效率很差,bs設太高效率也不好 下面這兩個輸出的結果是相同的,只是後者會更快完成。 dd if=orignal.file of=output_bs1.file skip=717824 bs=1 dd if= orignal.file  of=output_bs1024.file skip=701 bs=1024

tar, tar.gz, tar.bz打包與壓縮解壓縮

壓縮z compress {filename} #壓縮檔案 uncompress {zipped file} #解壓.z compress -d {zipped file} 壓縮bz2 bzip {file name} bzip -z {file name} bzip -d {zipped file} #解壓.bz2 bzcat {zipped file} # 顯示bz2檔案內容 壓縮gz gzip {filename} gzip -{number} {filename} #用number指定壓縮比, 大的表示壓縮率高 gzip -d {zipped file} #解壓gz gunzip {zipped file} zcat {zipped file} #顯示gz檔案內容 產生tar tar cvf {created tar file} {directory} tar zcvf {created tar,gz file} {directory} # tar並壓縮gz eg. tar zcvf filename.tar.gz /home/test/* #打包/home/test下的所有檔案 tar zcvf  {created tar,gz file} {directory} --exclude mnt --exclude proc #打包tar.gz不過要排除特定目錄 tar -N '2017/06/25' zcvf {created tar,gz file} {directory} #比 2017/06/25新的檔案才打包 tar zcvfP {created tar.gz file} {directory} # -P會以絕對路徑壓縮目錄, 解tar的時候要小心 tar zcvfp {created tar.gz file} {directory} # -p是保留檔案原始權限 tar ztvf {tar.gz file} #查看tar.gz內容 tar jtvf {tar.bz file} #查看tar.bz內容 tar xvf {tar file} #解tar tar zxvf {tar.gz file} #解tar.gz tar jxvf {tar.bz} #解...

ffmpeg加密串流檔案及即時播放解密

ffmpeg支援crypoto模組加解密 查詢是否有編入crypto模組 ffmpeg -protocols | grep crypto crypto模組文件 https://ffmpeg.org/ffmpeg-protocols.html#crypto crypto模組介面 http://www.ffmpeg.org/doxygen/3.1/crypto_8c.html 加密串流檔案 ffmpeg -i content.ts -c copy -f mpegts -key "527930d9bab56a1ed763991c159d41fa" -iv "a084a4e635e5b32830bdb901089ac0c3" crypto:crypted.mpegts -key 指定加密的AES key -iv 指定加密的Initialization Vector 產生key和iv可以用openssl openssl rand -hex 16 解密串流檔案 ffmpeg -i crypted.ts -c copy -f mpegts -key "527930d9bab56a1ed763991c159d41fa" -iv "a084a4e635e5b32830bdb901089ac0c3" crypto:decrypted.mpegts 直接播放加密檔案 ffplay -key "527930d9bab56a1ed763991c159d41fa" -iv "a084a4e635e5b32830bdb901089ac0c3" -i crypto:crypted.mpegts 參考資料 http://bbs.chinaffmpeg.com/forum.php?mod=viewthread&tid=430