rdm腳本
1. 如何製作安卓平板系統鏡像
對Android系統的所有模塊進行編譯之後,對編譯出來的模塊文件進行打包。
打包結果就是是獲得一系列的鏡像文件,例如system.img、boot.img、ramdisk.img、userdata.img和recovery.img等。
些鏡像文件最終可以燒錄到手機上運行。
Android編譯系統在初始化的過程中,會通過根目錄下的Makefile腳本載入build/core/main.mk腳本,接著build/core/main.mk腳本又會載入build/core/Makefile腳本,而Android系統鏡像文件就是由build/core/Makefile腳本負責打包生成的。
system.img鏡像文件描述的是設備上的system分區,即/system目錄,它是在build/core/Makefile文件中生成的
build/core/main.mk文件定義了boot.img鏡像文件的依賴規則,我們可以通過執行make bootimage命令來執行。其中,bootimage是一個偽目標,它依賴於INSTALLED_BOOTIMAGE_TARGET。
build/core/main.mk文件定義了ramdisk.img鏡像文件的依賴規則,我們可以通過執行make ramdisk命令來執行。其中,ramdisk是一個偽目標,它依賴於INSTALLED_RAMDISK_TARGET。
userdata.img鏡像描述的是Android系統的data分區,即/data目錄,裡麵包含了用戶安裝的APP以及數據等等。
recovery.img是設備進入recovery模式時所載入的鏡像。recovery模式就是用來更新系統的,我們可以認為我們的設備具有兩個系統。一個是正常的系統,它由boot.img、system.img、ramdisk.img和userdata.img等組成,另外一個就是recovery系統,由recovery.img組成。平時我們進入的都是正常的系統,只有當我們需要更新這個正常的系統時,才會進入到recovery系統。因此,我們可以將recovery系統理解為在Linux Kernel之上運行的一個小小的用戶空間運行時。這個用戶空間運行時可以訪問我們平時經常使用的那個系統的文件,從而實現對它的更新。
2. 高分求會製作傳世服務端腳本的高手
升級武器 腳本
自動升武器腳本 H1dq;M
現在SF龍紋,谷玉,血飲遍地暴,想要多少有多少,這個腳本理論上可以升到伺服器允許的最高的屬性,但是實際情況就不好說了,畢竟用的是商店首飾,不過,先用腳本升幾把10的龍紋,然後再手升也不錯。我寫這個腳本也就是為了好玩,實用不是很大。有興趣的朋友可以一試。 6=g(NKd[
下面把「無墊刀腳本」發出來。 ,FuBFid
F.edYN,<Ag
如果$成功="" .'6P\w34
那麼$成功=0 ?^)z 8$o|
如果$失敗="" tVBz`- z
那麼$失敗=0 k#mbR%o
如果$概率="" u-mpyx](
那麼$概率=0 Y.- Q_T
如果$好刀="" EdL A!A
那麼$好刀=0 * hNb,{VN
如果$上次時間="" WZ1,!$"/%
那麼$上次時間=[當前時間] a>S(eTLG
$等待時間=300000 p[K4"U)
如果$起始時間="" yN$6wf e
那麼$起始時間=[當前時間] x^Iviw=Y
$休息時間=20000 |1>WFw98
$礦石=黑鐵礦 %W<H n
$首飾=竹笛 <UU+8J
$武器=龍紋劍 bbDu7jWu
$屬性=道術 ]?k5K
$普通=6 <".u3k
$點數=$普通+2 %RAcxQA V
$計數器=0 |i[9XO78
如果$容量="" HI"bRbe0'
那麼$容量=39 4&xt m="
m]V'DT#_]
觸發器:提示:升級成功!!! V |nGKEE<
$成功=$成功+1 FwEX+MLgH
跳轉到<成功> jtCb8|U
觸發器結束 nRP%Qb
<2DJ7K\<
觸發器:提示:武器破碎!!! 6XHU T
$失敗=$失敗+1 -#%CKM
$成功=0 lwO0>lU^?o
跳轉到<失敗> 7v?g@U9[
觸發器結束 LC1ca:e-l
>GHr7+xb
<全局腳本開始> UX<
<全局腳本結束> M`ZN#wL(
<掛機腳本開始> GloLR'
<分析位置> S'(] x`nbU
系統顯示[看看我在哪] P8'i|\)r
如果[當前地圖名]=5 C $o*H 3
那麼跳轉到<回盟重> ,b{6S/(
如果[當前地圖名]=3 M:v]vIRi
那麼跳轉到<回城> e(T]>Zi5
如果[當前地圖名]=0151 E+Db6SX!
那麼跳轉到<想想該干什麼> N(r$|J+*
(!mtA<
<回城> wFu;Fx"b
系統顯示[回來了,該買東西了!] tpj#<WA,2
關閉全局腳本 %Be~*)C
躲避PKER關閉 >QxCk2~'Ej
停止戰斗 q1|m0?
如果[3,333,332][距離]>50 DukYKI
那麼使用[回城卷] =GB`BBq
否則走到[3,334,327] QAopUgs(
跳轉到<總控> "xj#[aQVP
如果[回城卷][數量]<1 )+;e3gm
那麼跳轉到<分析位置> FVt?/}W9&
跳轉到<回城> %+=.WE?
jhIj#z\
<總控> :f5?GwI
如果[回城卷][數量]<2 \-l}''Kr
那麼調用<雜物購買> ;iyg/Hp}
如果[$礦石][數量]<4 WxmlsgeN@
那麼調用<換黑鐵礦> "H4kJuvy
如果[$首飾][數量]<4 }~+TlW/fQ
那麼調用<買首飾> 1Ml]M~[Vy1
0,jS|T)
<出發> F)&MS*ZW
$掛機時間_1=[當前時間]-$起始時間 bM&`V>;$
$掛機時間=$掛機時間_1/1000 n!5>#h~
系統顯示[歡迎使用≮奪命刀客≯全智能武器升級腳本] fHn`Kp>
系統顯示[本次掛機[$掛機時間]秒,現在庫存為[$容量],升級成功高屬性[$武器][$好刀]把] glI1Z
等待[200000]毫秒 S~1xd)d
找到NPC[傳送員,3,325,333] ]36@Z$WAm
對話[傳送員] +xl g
選擇[城市傳送] zo5y}&
等待[1000]毫秒 y{_sEh -
選擇[沙巴克外] m~5*Dc=
等待[1000]毫秒 `` LBF4/
開啟全局腳本 MwbJo#k_'
躲避PKER開啟 78^g/DrO4
系統顯示[出發,砸幾手去!] @Bg }1xpP
走到[3,638,316] . D Q4`
RWR9# S_D
<想想該干什麼> )$YjF9C3
系統顯示[考慮一下] GeHS4]
如果[自己][武器][名稱]=$武器 8A}V#Y9"M
那麼跳轉到<升刀> eM4*Vxw0
否則跳轉到<返回升級> Zn<NMto%C
EgxK,lu#f
<升刀> iLq4JN
走到[0151,12,15] [*z'4;_n+
系統顯示[看看運氣,砸一手!] ^ge@D,1!P%
找到NPC[沙城煉武器老闆,0151,12,10] CS9{`G`v
對話[沙城煉武器老闆] X%pc/&l>
選擇[開始武器升級] Rs5jXA.f
等待[1000]毫秒 #D5ab*z_!
選擇[確認修煉] <O)&3:`p
等待[1000]毫秒 Y?'bh
選擇[請求修煉] l( [FOOp
等待[3000]毫秒 =>J_uSV
$上次時間=[當前時間] c]5_a|Z
跳轉到<回城> R.|9]6zt?
/+8XxGA o
<返回升級> :619A H5(
走到[0151,12,15] @f@<tx5
如果[當前時間]-$上次時間>=$等待時間 -+tKhit
那麼系統顯示[把刀給我] !$@V:=Qu
那麼找到NPC[沙城煉武器老闆,0151,12,10] e WNCX9*TD
那麼對話[沙城煉武器老闆] >R'6)%Y
那麼選擇[返回武器升級] UCkjU-K l
那麼等待[1000]毫秒 &e;< ^
那麼裝備[$武器]到[武器] ]JR='_gX
那麼跳轉到<開刀> coI.5^=6
否則跳轉到<等待> dR_o]klR l
^vh &jZ8>e
<開刀> 7t8V[L81Gh
系統顯示[運氣怎麼樣?試一下就知道了!] }#V:0b]A
如果[自己][武器][名稱]<>$武器 D3eTSn0
那麼跳轉到<倉庫取刀> /bazeew
走到[0151,8,13] ^;oHo`
攻擊NPC[沙城鐵匠鋪老闆]8次 58xb)o!)
等待[2000]毫秒 \s w.uAO?'
跳轉到<開刀> Hk%JPR
J*"LP\E
<成功> IST5xv
系統顯示[成了啊!連續成了[$成功] 手了] suHrrrU0j
如果$成功=1 e"SYzs+ys
那麼$概率=$失敗 Dh@8);A&5
那麼$失敗=0 %~~l|X!
跳轉到<看屬性> sjj(?vL
TuCe3 F
<失敗> AO/ e3[.W
系統顯示[哎!這次不行了!連續碎了[$失敗]手了] nS)3
如果$失敗=$概率&&$好刀>0 C#h9NJ^|
那麼跳轉到<倉庫取好刀> $Af ]#{_
否則跳轉到<倉庫取刀> ?!7J/5`p
d6<9d/~M
<等待> fJ[>(w`
系統顯示[等一會,沒到時間呢!] [)-\r&}{
等待[$休息時間]毫秒 Zie#aZt
跳轉到<返回升級> 4-Uxz=T)H_
eSQw@,Wn
<看屬性> /,@&{^?3
系統顯示[看看我的刀幾的了?] t+~HY2
如果[武器][$屬性]>=$點數 *X'~e"B wM
那麼$好刀=$好刀+1 nc"CF/vz
那麼跳轉到<換普通刀> te=R;|Uy
否則跳轉到<升刀> 1_O*7mx
=D5]DUp~
<換普通刀> AvlU@6,("
系統顯示[好刀啊!小心點的好,換把普通的。] NG:r'^,H-
$容量=$容量+1 i'-? *hP_
走到[3,640,245] G6|"]KP
走到[3,638,243] z 3j"Q
等待[3000]毫秒 ts<ogSkT
走到[0152,8,13] U{(pkjn0~
等待[2000]毫秒 0HqB#ar
跳轉到<取普通刀> WN~[v#Qe
2=h2L!_
<倉庫取刀> Xh5P0oPF
系統顯示[找把普通的去升] w7[&zu]w(
走到[3,640,245] uV801P"
走到[3,638,243] mU]Kx,eJ
等待[3000]毫秒 XbX.lR2<{
走到[0152,8,13] nj<xo<C@
等待[2000]毫秒 NAi7=^['}
TIH?V_Gn
<取普通刀> `(cp0hiU
如果$計數器>$容量 A CtR3D
那麼$計數器=0 nrpb%k<7
那麼跳轉到<回去休息> Ix{W jZVP
否則找到NPC[沙城倉庫管理員,0152,7,12] I3I7zCSX$
對話[沙城倉庫管理員] $$ An|o5yI
取物[$武器]1個 vgFw (( _#
等待[1000]毫秒 "Wx0.Io-
$計數器=$計數器+1 {,&dl&-B
裝備[$武器]到[武器] $=) &
等待[1000]毫秒 ?(W^x X
對話NPC[沙城倉庫管理員] z-;;UyuR=
自動存物 =Y'<7
等待[1000]毫秒 r_rdm#
如果[武器][$屬性]=$普通 .@Z _Ais6/
那麼$計數器=0 WT+$_.k<_
那麼$容量=$容量-1 \ 4~ZQ
那麼跳轉到<升刀> Tj u%P1
否則跳轉到<取普通刀> #e"aVR4oi
?X^2~K{
<倉庫取好刀> LYk>m&x2a
系統顯示[該出手時就得出手,拿把好刀碰碰運氣!] Y_?N={}
走到[3,640,245] {qK1{(
走到[3,638,243] l1d'3iE
等待[3000]毫秒 jl5~`d-[
走到[0152,8,13] rx<l2 l[
等待[2000]毫秒 7I;fNB
#il%x0:
<取> 0;OFPJ
如果$計數器>$容量 hOx83Sd
那麼$計數器=0 [z%! M5~
那麼$點數=$點數+1 *2^EJ6e<p
那麼跳轉到<取> B1Jezf/*
否則找到NPC[沙城倉庫管理員,0152,7,12] AR $bH^='J
對話[沙城倉庫管理員] Wo1,e8",B@
取物[$武器]1個 os lG {8i
等待[1000]毫秒 QFT2l|{{;=
$計數器=$計數器+1 Qwf]Q!}
裝備[$武器]到[武器] b:W=^1uM'
等待[1000]毫秒 p<Wbmk>
對話NPC[沙城倉庫管理員] f*nAejs+p
自動存物 .cJ"Jcw><
等待[1000]毫秒 BO8iI-`4
如果[武器][$屬性]=$點數 q[4`c FN
那麼系統顯示[找到一把[$點數]的刀] W><B9eQ
那麼$好刀=$好刀-1 S)`AJn5
那麼$容量=$容量-1 f^=;7 ![q
那麼$計數器=0 74ghQH
那麼$點數=$普通+2 N Ydn}z f
那麼跳轉到<升刀> B5'FI_Y-EW
否則跳轉到<取> 7;{Ni~[@@
X ydAP
<雜物購買> k7}u%*~/
系統顯示[買雜物去] z_P31@"
找到NPC[盟重流浪漢,3,346,334] jPy1$8!
對話[盟重流浪漢] rPd"zh1u
等待[1000]毫秒 *kcxo5 .
買夠[回城卷]3個 U4TO"=
等待[1000]毫秒 hPt;Y
返回 75 Z5j9"
w+pH$<Ir
<換黑鐵礦> RKD4uz
系統顯示[換幾個礦] |5 ):nt
如果[$礦石][數量]<2 }#G m#3*
那麼找到NPC[高級服務生,3,336,331] qc{z=]1
那麼對話[高級服務生] Ba7p!g
那麼選擇[泡點兌換] t 5xQxyC
那麼等待[1000]毫秒 YV3KX7^r
那麼選擇[兌換礦石] :Fi 4QpV+
那麼等待[1000]毫秒 |qhCq5i
那麼選擇[黑鐵礦石] \ KCH
那麼等待[1000]毫秒 W [yECY
那麼選擇[釋放能量] g?v+O?K
那麼跳轉到<換黑鐵礦> o/EZ;JJZg
否則返回 /.~OZ}WV
"3'dtNF<Fb
<買首飾> TPJ' OtR
系統顯示[買幾個項鏈] 'Gv1p-h`
找到NPC[盟重老兵,3,326,326] c4mJa- w
對話[盟重老兵] R'ZZ.|D{
選擇[想去商店] wCEj+w3o1
等待[1000]毫秒 QcdcPF>F
選擇[首飾店] PNDya
等待[1000]毫秒 }:D5?
找到NPC[盟重項鏈店老闆,0158,4,21] uwX;mq Q
對話[盟重項鏈店老闆] t. WanEmV
買夠[$首飾]2個 (O$'M
如果[$首飾][數量]<2 k(',nCe
那麼跳轉到<買首飾> 6:ERL+r37
使用[回城卷] O tu NKK
返回 HvC.\j\bP
qwEua~l~
<回盟重> adY1yB
系統顯示[回土城去] tu<wp`yyv
走到[5,141,339] 1F%/gn i
對話[蒼月傳送員] )DJ5OcJ/
選擇[城市傳送] Uwgs&+
等待[1000]毫秒 #5SgoSU
選擇[盟重土城] 0`Dw*C|
等待[1000]毫秒 tS'w@s
跳轉到<回城> % 3 D}
SQTzwH4
<回去休息> ,J~.8VQ
系統顯示[刀都升沒了,回去吧,休息一下!] C7`K 2
使用[回城卷] }bKR$
等待[1000]毫秒 [vB~8Gq
走到[3,335,325] bdOFa7'X&i
停止腳本 Wmw||
HZJ~Q )
<掛機腳本結束>
3. 程序員用Mac都有哪些必備的app
Mac上程序員必備的10大軟體
1、IDEA
作為一個開發者,必須使用IDEA的,以前的elipse基本很少有用了,除非那些10多年的老員工對它有太大的感情了。
2、安裝JDK11或者JDK8
我覺得應該安裝JDK11吧,畢竟JDK14都出來這么久了。
3、Pycharm
Python開發工具,作為程序員也許你不是做Python開發的,但是偶爾還是用Python的。
4、Git
不用多說,當你在公司開發時候,一個項目是由很多人完成的,Git就是用來版本控制的,不僅要安裝還要熟悉使用。
5、VMware Fusion和Navicat
Navicat是一個資料庫管理工具,值得擁有,VMware是虛擬機軟體。我現在還是學生,電腦配置也不太好,我一般使用阿里雲伺服器,然後連接IDEA工具,感覺太方便了,寫完代碼可以直接操作虛擬機。
6、Visual Studio for Mac
這是一款微軟推出的跨平台開發工具,我一般用來寫前端的。
7、Xcode
Xcode是蘋果產品的,適用於ios開發工具,同時支持c++,對於學習c的同學來說值得擁有,就算做c開發,也值得安裝,因為真的太強大了。
8、Google瀏覽器
9、ClenMyMacX
系統殺毒軟體及清理垃圾等等。
10、Typora
作為一個程序員,不管學習也好總是做筆記叭,它就是一款最好的Markown,非常方便,它的語法我之前也寫過一篇文章,可以抽30分鍾學習即可熟練基本用法。
11、MindNode
我個人蔽森比較喜歡使用這塊來做思維導圖
12、Processon
在線畫圖工具,也可以做思維導圖等,非常不錯。
13、Rdm
學習Redis使用可視化工具
14、PDF Expert
Mac最好用的一款PDF
15、Xnip
個人覺得挺好用的截圖工具
16、Be Focused
類似番茄土豆,時間管理工具
17、eZip
壓縮解壓工具
18、網路網盤
19、uPic
圖床,當你發表博客時候,每次粘貼有點太耗時間了,所以使用uPic配置Typora就完美了。
20、其他工具
qq、微信、OmniFocus項目管理工具、AE、PR視頻剪輯等工具,看個人愛好下載使用,還有一些工具,暫時想不出了,但是上面所提到的我基本使用。
我的回答希望對你有幫助。
用了8年的Mac電腦,個人介紹下一些常用的APP,僅供參考。
1.終端iterm2
作為一名程序員,少不了需要用命令行處理事情。
通過它可以處理本地電腦的事情,也可以連接遠程伺服器操作。
補充:當然有些朋友喜派喚歡zshell環境,也可以使用ohmyzsh,看個人實際需求吧,我還是喜歡bash環境。
2.Alfred
Alfred 是一個用鍵盤通過熱鍵、關鍵字、自定義插件來加快操作效率的工具,它不但是搜索工具,還是快速啟動工具,甚至能夠操作許多系統功能,擴充性極強。
比如程序員經常需要查看unix時間,用這個搜索框就能快速得到答案,按下回車鍵即可復制結果。
3.DBeaver免費開源資料庫
一個免費開源的軟體,支持Oracle、MySQL等資料庫,但是速度相比Navicat Premium慢,但是勝在免費。
4.IntelliJ IDEA 開發工具IDE
寫java代碼,怎麼可能少了這個軟體,吃飯幹活的工具。
當然有些人也會用Visual Studio,用得人也不少,只要適合自己需求就可以了。
5.Android Studio安卓開發
Android Studio是一個Android開發環境,基於IntelliJ IDEA。通過這個開發工具,可以開發手機APP。
6.PyCharm
人生苦短,我學Python,通過這個工具,可以快速開發,但是唯一缺點就是耗內存。
7.Sourcetree管理代碼工具
Sourcetree是個免費的Git客戶端工具,通過它宏羨畝可以進行可視化操作,適合對Git有基礎需求的人。但是有時候一些復雜的操作,個人還是喜歡命令行處理。
8.Markdown文檔編寫工具Typora
Typora支持跨平台,配合快捷鍵,輕松的寫介面文檔、資料庫表結構等文檔,圖片也可以復制粘貼進來,十分便利。
同時支持導出PDF,Word多種格式。
9.Sublime Text跨平台的文本編輯器
Sublime Text 是一款流行的代碼編輯器軟體,支持各類插件,可運行在Linux,Windows和Mac OS X。
我經常用它來編寫一些簡單的Python腳本,或者看Java代碼進行Review。
10.WireShark抓包軟體
作為程序員,有時候要分析別人提供的網路數據包文件,安裝這個跨平台軟體,可以直觀的分析網路數據包。
其他還有很多軟體,這里就寫前10個常用的軟體推薦給你,希望能解答到你的問題。
作為一名前端,來推薦幾個自己一直用的軟體。
Visual Studio Code
vs code 是微軟開發的良心編輯器,功能強大而且插件多,主要是啟動速度還挺快,是原來的Eclipse開發團隊的大佬來開發的,就是好用。
鏈接 https://code.visualstudio.com/
Sip: Mac 上最好的色彩管理工具
一款高效實用的Mac屏幕取色軟體,可以便捷地對屏幕上的顏色進行采樣和編碼,從而高效地輔助用戶對色彩的調整程度。支持 CSS、UIColor 等多種格式,適用於 Swift、Android、Java、.NET 等多種開發環境。
mac store 搜索 : sip
Moom: Mac窗口管理工具
一款實用的系統增強軟體,操作極其方便簡單,它可以通過拖拽的操作方式實現對窗口的任意操作,大小、位置、左右上下全方位移動以及最大最小化,這款Mac窗口管理器能夠快速修改當前窗口大小並放置在指定位置,操作簡單易上手。
mac store 搜索 : moom
Irvue Unsplash 壁紙工具
每天一張新壁紙,換來好的心情。
mac store 搜索 : Irvue。
1.vscode,美觀,融合性強,插件多。
2.termius,完美替代xshell,用著舒服。
3.navicat16,相較於之前版本,ui是真漂亮,加上mac字體,簡直是好用又藝術。
4.有道雲筆記,多客戶端同步,加上有代碼塊功能,代碼筆記存儲和查找就很方便了。
5.chrome,好處不用多說。
6.pd runner,偶爾用windows且不用花錢使用虛擬機pd的好工具。
Mac自帶的工具大部分人都沒發揮極致。
推薦一:PD,虛擬機利器。
推薦二:XmindZen 整理你的思維筆記,開個腦洞啥的。
推薦三:HomeBrew
推薦四:QuickTime 自帶的錄屏工具,錄點視頻很輕松。
從brew開始,剩下的就是一鍵安裝了。必備!
1、xcode
mac自帶的開發工具,好用舒服。
2、IDEA
java開發的首選工具,對比eclipse那就是質的提升。
3、Visual Studio Code
微軟的花大力氣做的開發工具。全平台都可以使用。
4、iStat Menus
可以讓你詳細掌握系統狀態,特別是流量現實,非常精準。
5、vMware Fusion
虛擬機選擇vMware Fusion確實是最省心的。超過其他虛擬機的太多。誰用誰知道。
6、CleanMyMac X
CleanMyMac X是被查詢最多的Mac電腦優化軟體。
7、Sublime Text
這個軟體應該是前端和好多輕度開發者的必愛了。
8、iTerm2
iTerm2可以肩負起打造終極版Mac的終端。更改為Oh my zsh的shell,安裝powerlevel9k插件。你的終端就可以飛起來了。
9、Homebrew
作為Mac電腦的軟體管家,Homebrew一直沒有讓我們失望。
10、docker
程序員經常要做一些環境的調整,docker是一個很好的生產工具,調整好了就留下,不好就刪除,對本機環境沒有任何影響。而且可以快速部署到生產環境中。
我說的對不對呢,請大家拍磚。
我們程序員在Mac上的工具大致分為三類1)編程類 2)筆記類 3)任務管理類
一、編程類
1.1 首當其沖,當然是神之編輯器Emacs,而Emacs本身又是瑞士軍刀包含編程,筆記,任務管理等,尤其是org,乃是許多人對Emacs欲罷不能的理由;
1.2 既然提到了emacs,自然少不了vim,相比emacs更加靈活輕便,適合於對配置作快速而簡單的修改。
1.3 vscode,對編程新手而言,emacs與vim上手難度較高,因此推薦從vscode入手編程。
當然還有jetbrain等,但是筆者不喜歡,因此不做推薦。
二、筆記類
程序員首先是辦公室白領,日常文檔總結,工作復盤等,Mac上最為推薦的筆記工具,
2.1 BearNote極為精美且便捷,令人愛不釋手,當然既然用macbook,缺點就是要fufei;
2.2 印象筆記,在macbook出人意料之外的好用,13年末的時候,筆者就是因為看到同事在macbook上精美的印象筆記,而種草買了第一台MBP。
2.3 Typora 是最優秀的所見即所得的markdown標記語言工具,是程序員寫文章之必備。
三、任務與時間管理
3.1 任務管理當然要用omnifocus,只有在macbook上才能享用這款效率工具。
3.2 項目管理工具Omniplan,編程是青春飯,我們最終都要往產品經理,往管理崗位上邁進。因此項目管理工具必不可少。同樣的,Omni系列的工具,只有MBP上才有。
3.3 花時間學學Emads的org-mode,用其作任務管理等。
作為一名大數據開發工程師,M1的Mac安裝軟體如下
1、IDEA 主力開發工具
2、VS Code 主力開發工具
3、Sublime 文本編輯工具
4、Item2 終端工具
5、Termius SSH工具
6、Postman 介面測試
7、Chrome 瀏覽器
8、SourceTree git管理工具
9、Typora 筆記管理
這個因人而異,我主要裝了這些
基本上主要就這些了
4. socket在php主要是什麼作用用在哪些方面
PHP 使用Berkley的socket庫來創建它的連接。你可以知道socket只不過是一個數據結構。你使用這個socket數據結構去開始一個客戶端和伺服器之間的會話。這個伺服器是一直在監聽准備產生一個新的會話。當一個客戶端連接伺服器,它就打開伺服器正在進行監聽的一個埠進行會話。這時,伺服器端接受客戶端的連接請求,那麼就進行一次循環。現在這個客戶端就能夠發送信息到伺服器,伺服器也能發送信息給客戶端。
產生一個Socket,你需要三個變數:一個協議、一個socket類型和一個公共協議類型。產生一個socket有三種協議供選擇,繼續看下面的內容來獲取詳細的協議內容。
定義一個公共的協議類型是進行連接一個必不可少的元素。下面的表我們看看有那些公共的協議類型。
表一:協議
名字/常量 描述
AF_INET 這是大多數用來產生socket的協議,使用TCP或UDP來傳輸,用在IPv4的地址
AF_INET6 與上面類似,不過是來用在IPv6的地址
AF_UNIX 本地協議,使用在Unix和Linux系統上,它很少使用,一般都是當客戶端和伺服器在同一台及其上的時候使用
表二:Socket類型
名字/常量 描述
SOCK_STREAM 這個協議是按照順序的、可靠的、數據完整的基於位元組流的連接。這是一個使用最多的socket類型,這個socket是使用TCP來進行傳輸。
SOCK_DGRAM 這個協議是無連接的、固定長度的傳輸調用。該協議是不可靠的,使用UDP來進行它的連接。
SOCK_SEQPACKET 這個協議是雙線路的、可靠的連接,發送固定長度的數據包進行傳輸。必須把這個包完整的接受才能進行讀取。
SOCK_RAW 這個socket類型提供單一的網路訪問,這個socket類型使用ICMP公共協議。(ping、traceroute使用該協議)
SOCK_RDM 這個類型是很少使用的,在大部分的操作系統上沒有實現,它是提供給數據鏈路層使用,不保證數據包的順序
表三:公共協議
名字/常量 描述
ICMP 互聯網控制消息協議,主要使用在網關和主機上,用來檢查網路狀況和報告錯誤信息
UDP 用戶數據報文協議,它是一個無連接,不可靠的傳輸協議
TCP 傳輸控制協議,這是一個使用最多的可靠的公共協議,它能保證數據包能夠到達接受者那兒,如果在傳輸過程中發生錯誤,那麼它將重新發送出錯數據包。
現在你知道了產生一個socket的三個元素,那麼我們就在php中使用socket_create()函數來產生一個socket。這個 socket_create()函數需要三個參數:一個協議、一個socket類型、一個公共協議。socket_create()函數運行成功返回一個包含socket的資源類型,如果沒有成功則返回false。
Resourece socket_create(int protocol, int socketType, int commonProtocol);
現在你產生一個socket,然後呢?php提供了幾個操縱socket的函數。你能夠綁定socket到一個IP,監聽一個socket的通信,接受一個socket;現在我們來看一個例子,了解函數是如何產生、接受和監聽一個socket。
<?php
$commonProtocol = getprotobyname(「tcp」);
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 『localhost』, 1337);
socket_listen($socket);
// More socket functionality to come
?>
上面這個例子產生一個你自己的伺服器端。例子第一行,
$commonProtocol = getprotobyname(「tcp」);
使用公共協議名字來獲取一個協議類型。在這里使用的是TCP公共協議,如果你想使用UDP或者ICMP協議,那麼你應該把getprotobyname() 函數的參數改為「udp」或「icmp」。還有一個可選的辦法是不使用getprotobyname()函數而是指定SOL_TCP或SOL_UDP在 socket_create()函數中。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
例子的第二行是產生一個socket並且返回一個socket資源的實例。在你有了一個socket資源的實例以後,你就必須把socket綁定到一個IP地址和某一個埠上。
socket_bind($socket, 『localhost』, 1337);
在這里你綁定socket到本地計算機(127.0.0.1)和綁定socket到你的1337埠。然後你就需要監聽所有進來的socket連接。
socket_listen($socket);
在第四行以後,你就需要了解所有的socket函數和他們的使用。
表四:Socket函數
函數名 描述
socket_accept() 接受一個Socket連接
socket_bind() 把socket綁定在一個IP地址和埠上
socket_clear_error() 清除socket的錯誤或者最後的錯誤代碼
socket_close() 關閉一個socket資源
socket_connect() 開始一個socket連接
socket_create_listen() 在指定埠打開一個socket監聽
socket_create_pair() 產生一對沒有區別的socket到一個數組里
socket_create() 產生一個socket,相當於產生一個socket的數據結構
socket_get_option() 獲取socket選項
socket_getpeername() 獲取遠程類似主機的ip地址
socket_getsockname() 獲取本地socket的ip地址
socket_iovec_add() 添加一個新的向量到一個分散/聚合的數組
socket_iovec_alloc() 這個函數創建一個能夠發送接收讀寫的iovec數據結構
socket_iovec_delete() 刪除一個已經分配的iovec
socket_iovec_fetch() 返回指定的iovec資源的數據
socket_iovec_free() 釋放一個iovec資源
socket_iovec_set() 設置iovec的數據新值
socket_last_error() 獲取當前socket的最後錯誤代碼
socket_listen() 監聽由指定socket的所有連接
socket_read() 讀取指定長度的數據
socket_readv() 讀取從分散/聚合數組過來的數據
socket_recv() 從socket里結束數據到緩存
socket_recvfrom() 接受數據從指定的socket,如果沒有指定則默認當前socket
socket_recvmsg() 從iovec里接受消息
socket_select() 多路選擇
socket_send() 這個函數發送數據到已連接的socket
socket_sendmsg() 發送消息到socket
socket_sendto() 發送消息到指定地址的socket
socket_set_block() 在socket里設置為塊模式
socket_set_nonblock() socket里設置為非塊模式
socket_set_option() 設置socket選項
socket_shutdown() 這個函數允許你關閉讀、寫、或者指定的socket
socket_strerror() 返回指定錯誤號的詳細錯誤
socket_write() 寫數據到socket緩存
socket_writev() 寫數據到分散/聚合數組
(注: 函數介紹刪減了部分原文內容,函數詳細使用建議參考英文原文,或者參考PHP手冊)
以上所有的函數都是PHP中關於socket的,使用這些函數,你必須把你的socket打開,如果你沒有打開,請編輯你的php.ini文件,去掉下面這行前面的注釋:
extension=php_sockets.dll
如果你無法去掉注釋,那麼請使用下面的代碼來載入擴展庫:
<?php
if(!extension_loaded(『sockets』))
{
if(strtoupper(substr(PHP_OS, 3)) == 「WIN」)
{
dl(『php_sockets.dll』);
}
else
{
dl(『sockets.so』);
}
}
?>
如果你不知道你的socket是否打開,那麼你可以使用phpinfo()函數來確定socket是否打開。你通過查看phpinfo信息了解socket是否打開。如下圖:
查看phpinfo()關於socket的信息
◆產生一個伺服器
現在我們把第一個例子進行完善。你需要監聽一個指定的socket並且處理用戶的連接。
<?php
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 'localhost', 1337);
socket_listen($socket);
// Accept any incoming connections to the server
$connection = socket_accept($socket);
if($connection)
{
socket_write($connection, "You have connected to the socket.../n/r");
}
?>
你應該使用你的命令提示符來運行這個例子。理由是因為這里將產生一個伺服器,而不是一個Web頁面。如果你嘗試使用Web瀏覽器來運行這個腳本,那麼很有可能它會超過30秒的限時。你可以使用下面的代碼來設置一個無限的運行時間,但是還是建議使用命令提示符來運行。
set_time_limit(0);
在你的命令提示符中對這個腳本進行簡單測試:
Php.exe example01_server.php
如果你沒有在系統的環境變數中設置php解釋器的路徑,那麼你將需要給php.exe指定詳細的路徑。當你運行這個伺服器端的時候,你能夠通過遠程登陸(telnet)的方式連接到埠1337來測試這個伺服器。如下圖:
上面的伺服器端有三個問題:1. 它不能接受多個連接。2. 它只完成唯一的一個命令。3. 你不能通過Web瀏覽器連接這個伺服器。
這個第一個問題比較容易解決,你可以使用一個應用程序去每次都連接到伺服器。但是後面的問題是你需要使用一個Web頁面去連接這個伺服器,這個比較困難。你可以讓你的伺服器接受連接,然後些數據到客戶端(如果它一定要寫的話),關閉連接並且等待下一個連接。
在上一個代碼的基礎上再改進,產生下面的代碼來做你的新伺服器端:
<?php
// Set up our socket
$commonProtocol = getprotobyname("tcp");
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, 'localhost', 1337);
socket_listen($socket);
// Initialize the buffer
$buffer = "NO DATA";
while(true)
{
// Accept any connections coming in on this socket
$connection = socket_accept($socket);
printf("Socket connected/r/n");
// Check to see if there is anything in the buffer
if($buffer != "")
{
printf("Something is in the buffer...sending data.../r/n");
socket_write($connection, $buffer . "/r/n");
printf("Wrote to socket/r/n");
}
else
{
printf("No Data in the buffer/r/n");
}
// Get the input
while($data = socket_read($connection, 1024, PHP_NORMAL_READ))
{
$buffer = $data;
socket_write($connection, "Information Received/r/n");
printf("Buffer: " . $buffer . "/r/n");
}
socket_close($connection);
printf("Closed the socket/r/n/r/n");
}
?>
這個伺服器端要做什麼呢?它初始化一個socket並且打開一個緩存收發數據。它等待連接,一旦產生一個連接,它將列印「Socket connected」在伺服器端的屏幕上。這個伺服器檢查緩沖區,如果緩沖區里有數據,它將把數據發送到連接過來的計算機。然後它發送這個數據的接受信息,一旦它接受了信息,就把信息保存到數據里,並且讓連接的計算機知道這些信息,最後關閉連接。當連接關閉後,伺服器又開始處理下一次連接。(翻譯的爛,附上原文)
This is what the server does. It initializes the socket and the buffer that you use to receive
and send data. Then it waits for a connection. Once a connection is created it prints
「Socket connected」 to the screen the server is running on. The server then checks to see if
there is anything in the buffer; if there is, it sends the data to the connected computer.
After it sends the data it waits to receive information. Once it receives information it stores
it in the data, lets the connected computer know that it has received the information, and
then closes the connection. After the connection is closed, the server starts the whole
process again.
◆產生一個客戶端
處理第二個問題是很容易的。你需要產生一個php頁連接一個socket,發送一些數據進它的緩存並處理它。然後你又個處理後的數據在還頓,你能夠發送你的數據到伺服器。在另外一台客戶端連接,它將處理那些數據。
To solve the second problem is very easy. You need to create a PHP page that connects to
a socket, receive any data that is in the buffer, and process it. After you have processed the
data in the buffer you can send your data to the server. When another client connects, it
will process the data you sent and the client will send more data back to the server.
下面的例子示範了使用socket:
<?php
// Create the socket and connect
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection = socket_connect($socket,』localhost』, 1337);
while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ))
{
if($buffer == 「NO DATA」)
{
echo(「<p>NO DATA</p>」);
break;
}
else
{
// Do something with the data in the buffer
echo(「<p>Buffer Data: 「 . $buffer . 「</p>」);
}
}
echo(「<p>Writing to Socket</p>」);
// Write some test data to our socket
if(!socket_write($socket, 「SOME DATA/r/n」))
{
echo(「<p>Write failed</p>」);
}
// Read any response from the socket
while($buffer = socket_read($socket, 1024, PHP_NORMAL_READ))
{
echo(「<p>Data sent was: SOME DATA<br> Response was:」 . $buffer . 「</p>」);
}
echo(「<p>Done Reading from Socket</p>」);
?>
這個例子的代碼演示了客戶端連接到伺服器。客戶端讀取數據。如果這是第一時間到達這個循環的首次連接,這個伺服器將發送「NO DATA」返回給客戶端。如果情況發生了,這個客戶端在連接之上。客戶端發送它的數據到伺服器,數據發送給伺服器,客戶端等待響應。一旦接受到響應,那麼它將把響應寫到屏幕上。