Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
大家好,我是錯(cuò)誤先生。
最近在學(xué)前端,有空整理一個(gè)前端課程的技術(shù)總結(jié)。今天要說的內(nèi)容是在我前端學(xué)到HTML的時(shí)候。學(xué)了課程不是得實(shí)機(jī)操作一下嘛,編寫一個(gè)簡單的html文件。
一般來說在裝windows的電腦上很容易操作,新建一個(gè)txt文本文件,然后將后綴名改成html就行了。
圖1-新建HTML文件
然而我發(fā)現(xiàn),我的mac電腦上,右鍵并沒有新建文本文件。
圖2-mac的右鍵菜單
對(duì)比windows的右鍵菜單,mac右鍵能提供的“菜品”顯然寒酸許多。不要求你整個(gè)新建word、excel啥的,既然新建文件夾功能都做了,新建文本文件總來一個(gè)吧?!
圖3-windows右鍵菜單
雖說打開文本編輯器,寫好內(nèi)容然后保存也可實(shí)現(xiàn),不影響工作。但有不少人的習(xí)慣(比如我)仍是先決定文件保存位置,然后才開始工作的。
怎么解決呢?我找了一些材料,比如下面這個(gè):
4種方法,讓你在macOS上快速新建txt文本文件
總結(jié)下來,幾乎只有下載第三方app(例如New File Menu之類的)可以【完美】復(fù)刻windows的右鍵新建功能。但我不怎么喜歡這個(gè)方案:如果任何一個(gè)簡單的功能都得去下載app才能完成,那過段時(shí)間我的mac電腦不得塞滿N多app?
吸引我的是其中一個(gè)方案:自動(dòng)操作()
自動(dòng)操作
自動(dòng)操作是蘋果公司為他們的Mac OS X系統(tǒng)開發(fā)的一款軟件。只要通過點(diǎn)擊拖拽鼠標(biāo)等操作就可以將一系列動(dòng)作組合成一個(gè)工作流程,從而幫助你自動(dòng)的(可重復(fù)的)完成一些復(fù)雜的工作。
也就是說,自動(dòng)操作是蘋果官方為用戶提供的一款能夠?qū)崿F(xiàn)自動(dòng)執(zhí)行繁瑣重復(fù)的工作,提高效率的工具。
以新建文本文件為例,我們需要先在【訪達(dá)】->【應(yīng)用程序】里找到【自動(dòng)操作】程序
圖4-/自動(dòng)操作 程序位置
點(diǎn)開后,選擇創(chuàng)建一個(gè)“應(yīng)用程序”,然后分別選擇:【資源庫】->【實(shí)用工具】->【運(yùn)行】
圖5-選擇創(chuàng)建“應(yīng)用程序”
圖6-選擇“運(yùn)行”
接下來是最重要的一步,在代碼框中,補(bǔ)充如下一段程序:
tell application "Finder"
????set?selection?to?make?new?file?at?(the?target?of?the?front?window)?as?alias
end tell
圖7-新建txt文件的代碼
之后,關(guān)閉自動(dòng)操作窗口,將編寫好的腳本命名保存(例如:New Blank File)
圖8-保存腳本
此時(shí)還沒有結(jié)束,【訪達(dá)】->【應(yīng)用程序】里會(huì)多出一個(gè)名為"New Blank File"(你剛才起的名)的程序。但是你運(yùn)行程序后,它只會(huì)在【應(yīng)用程序】目錄下創(chuàng)建txt文本文件,這顯然不是我們想要的。
為了解決這個(gè)問題,我們需要按住Command+左鍵將【自動(dòng)操作】拖動(dòng)到右上角,使其變成【訪達(dá)】菜單欄里的一個(gè)程序。
圖9-添加到訪達(dá)菜單欄
這樣,我們就可以借助【訪達(dá)】,在任何位置創(chuàng)建文本文件了。
不過,我們寫的代碼到底是啥意思呢?
是蘋果公司在1993年十月隨system 7.1.1推出的一款腳本語言。其特點(diǎn)是比較接近英語這樣的自然語言。
其實(shí)windows也有自己的腳本語言,就是VB。但是豐富的右鍵菜單避免了我們想新建個(gè)文件也要寫腳本解決。安裝個(gè)winrar、360什么的,軟件也會(huì)把自己對(duì)應(yīng)的功能加進(jìn)右鍵菜單里去。但蘋果對(duì)這塊比較有潔癖……so,我們瞎折騰了一番,認(rèn)識(shí)了自動(dòng)操作這款神器工具,也算對(duì)造成麻煩之后的補(bǔ)償吧。
想要理解前面的代碼,學(xué)習(xí)語法是必須的。我在網(wǎng)上找到了兩個(gè)講得還算全面清晰的教程,在這里分享給大家。《簡明教程》適合快速入門。《權(quán)威指南》則適合作為工具手冊(cè)使用。
簡明教程:
提取碼:608l
權(quán)威指南
提取碼:y2n6
經(jīng)過粗略學(xué)習(xí),對(duì)有個(gè)基本的了解之后,我們可以嘗試將前面的代碼拆解,一個(gè)部分一個(gè)部分地理解它的意思:
圖10
1. on run{input, }
類似其它語言中的main函數(shù),是程序的入口,即最開始執(zhí)行的代碼塊。input是用戶輸入,是相關(guān)參數(shù),基本不需要變動(dòng)。
結(jié)尾相應(yīng)有return,end等語句,也不需要管。
2. "Finder"
tell是中最重要的流程控制語句,作用是指定腳本要控制的程序?qū)ο蟆R驗(yàn)樵谥付窂较滦陆ㄎ募枰柚绦颉驹L達(dá)】完成,所以后面跟的是 "Finder"。
tell語句的一般格式如下,后面需要跟end tell結(jié)尾。
tell?application "XXX"
????...
end tell
3.at (the target of the front window)
指明創(chuàng)建文件的位置,在哪里呢?在當(dāng)前窗口所在位置。
4.make newfile
這句好理解,就是新建一個(gè)文件,位置在上面已經(jīng)說明了。
5.set to
set語句起到的是一個(gè)賦值作用,而則代表用戶選擇的目標(biāo)。這一步就把之前make new file的結(jié)果賦值給了,其結(jié)果就是新建完txt后,這個(gè)txt文件會(huì)處于被用戶選中狀態(tài)。
需要注意的是set的語法問題。
set A to B在自然語言環(huán)境中,表達(dá)的是“將A的值賦給B”的意思。但是在中,set A to B表達(dá)的是“將B的值賦給A”。因?yàn)锳才是變量,B才是值。
這樣的確很別扭,如果換成
Dim A =B 或者
Set A = B
就好理解得多。所以,很難說接近自然語言是件好事還是壞事。
6.as alias
as語句會(huì)起到強(qiáng)制類型轉(zhuǎn)換作用,而alias是一個(gè)需要花些功夫理解的對(duì)象類型。簡單來說,alias是文件的指針(在iOS或者mac OS系統(tǒng)體系中,它被稱為“替身”)。可以通過它獲取文件內(nèi)容,而且即使文件改變路徑,也不影響指針指向。在set as alias后,也就指向了文件的指針。
集合起來,那句代碼可以翻譯成“啟動(dòng)腳本時(shí),告知【訪達(dá)】:在當(dāng)前窗口路徑下新建一個(gè)文件,并選中(將文件指針傳遞給鼠標(biāo)選擇)”
這么強(qiáng)大,顯然不單是為了解決一個(gè)新建txt文本問題的。大家有什么有意思的想法歡迎在留言區(qū)留言哦!
留言區(qū)
軟件架構(gòu)設(shè)計(jì)系列之九(軟件架構(gòu)文檔化)
軟件架構(gòu)設(shè)計(jì)系列包括軟件生命周期、軟件開發(fā)模型、軟件開發(fā)方法、基于架構(gòu)的軟件開發(fā)、軟件架構(gòu)設(shè)計(jì)(軟件架構(gòu)設(shè)計(jì)原則、軟件架構(gòu)質(zhì)量屬性、軟件架構(gòu)風(fēng)格、軟件架構(gòu)設(shè)計(jì)、軟件架構(gòu)文檔化、軟件架構(gòu)評(píng)估)等。
軟件架構(gòu)文檔化
記錄軟件架構(gòu)的活動(dòng)就是架構(gòu)編檔過程,也就是架構(gòu)的文檔化。它包含兩個(gè)方面:一是過程,編檔過程能促使架構(gòu)設(shè)計(jì)師進(jìn)一步思考,使得架構(gòu)更加完善;二是結(jié)果,描述架構(gòu)的文檔將作為架構(gòu)開發(fā)的成果,供項(xiàng)目干系人使用。
1、架構(gòu)文檔的使用者
架構(gòu)文檔的使用者是項(xiàng)目干系人。編寫技術(shù)文檔(尤其是軟件架構(gòu)文檔)最基本的原則之一是要從讀者的角度來編寫,易于編寫但很難閱讀的文檔是不受歡迎的。
架構(gòu)的主要用途是充當(dāng)項(xiàng)目干系人之間進(jìn)行交流的工具,文檔則促進(jìn)了這種交流—— 項(xiàng)目干系人希望從架構(gòu)文檔中獲得自己所關(guān)心的架構(gòu)信息,如:系統(tǒng)實(shí)現(xiàn)人員希望文檔提供關(guān)于開發(fā)活動(dòng)的不能違反的限制及可利用的自由;測試人員和集成人員希望能從文檔中得到必須組合在一起的各部分,并以此得到一個(gè)正確的測試黑箱;項(xiàng)目經(jīng)理希望根據(jù)所確定的工作任務(wù)組建開發(fā)小組,規(guī)劃和分配項(xiàng)目資源。
2、合理的編檔規(guī)則
編寫架構(gòu)文檔和編寫其他文檔一樣,必須遵守一些基本規(guī)則,這里將任何軟件編檔(包括軟件架構(gòu)編檔)的規(guī)則歸納為 7 條:
(1)從讀者的角度編寫文檔。
(2)避免出現(xiàn)不必要的重復(fù)。
(3)避免歧義。
(4)使用標(biāo)準(zhǔn)結(jié)構(gòu)。
(5)記錄基本原理。
(6)使文檔保持更新,但更新頻率不要過高。
(7)針對(duì)目標(biāo)的適宜性對(duì)文檔進(jìn)行評(píng)審。
3、視圖編檔
視圖是最重要的軟件架構(gòu)編檔概念。視圖的概念為架構(gòu)設(shè)計(jì)師提供了進(jìn)行軟件架構(gòu)編檔的基本原則。架構(gòu)文檔化就是將相關(guān)視圖編成文檔,并補(bǔ)充多個(gè)視圖的關(guān)聯(lián)關(guān)系。
視圖編檔的組織結(jié)構(gòu)(內(nèi)容及編排次序、大綱)一般包含 7 個(gè)部分。
(1)視圖概述:對(duì)系統(tǒng)進(jìn)行概括性的描述,包含視圖的主要元素和元素間的關(guān)系(但并不包含所有元素和元素間的關(guān)系,如:與錯(cuò)誤處理相關(guān)的內(nèi)容可以放在支持文檔中)。主要表示可用多個(gè)形式:圖形、表格、文本,通常用圖形形式,使用UML 語言來描述。
(2)元素目錄:對(duì)主要表示中所描述的元素及其關(guān)系進(jìn)行詳細(xì)描述,包括:元素及其 屬性、關(guān)系及其屬性、元素接口、元素行為。
這部分是文檔的主要組成部分,其中要注意:
—對(duì)元素及其協(xié)同工作的行為進(jìn)行編檔,如用UML 的順序圖和狀態(tài)圖描述行為;
—對(duì)接口進(jìn)行編檔,圖9-19 說明了這部分的內(nèi)容。
(3)上下文圖:用圖形展示系統(tǒng)如何與其環(huán)境相關(guān)。
(4)可變性指南:描述架構(gòu)的可變化點(diǎn),如在軟件產(chǎn)品線中,產(chǎn)品線架構(gòu)通過變化,適用于多個(gè)系統(tǒng),因此,文檔中應(yīng)包含這些變化點(diǎn),如各系統(tǒng)要做出選擇的選項(xiàng)、做出選擇的時(shí)間。
(5)架構(gòu)背景:為架構(gòu)的合理性提供足夠的、令人信服的論據(jù)。包括:基本原理、分析結(jié)果及設(shè)計(jì)中所反映的假定。
(6)術(shù)語表:對(duì)文檔中每個(gè)術(shù)語進(jìn)行簡要說明。
(7)其他信息:描述不屬于架構(gòu)方面的必要信息,如管理信息(創(chuàng)作者、配置控制數(shù)據(jù)及變更歷史)。
4、跨視圖文檔
軟件架構(gòu)由多個(gè)視圖文檔來反映,按前面所述的要求完成每個(gè)視圖的文檔后,需要對(duì)這些文檔進(jìn)行一個(gè)整體的“打包”工作,這就是跨視圖文檔。它包括如下內(nèi)容:
(1)文檔有哪些內(nèi)容,它們是如何組織的:視圖目錄(含哪些視圖);視圖模板(即前面描述的視圖文檔,企業(yè)可以通過規(guī)范化來定義統(tǒng)一的、公共的視圖模板)。
(2)架構(gòu)概述:它描述系統(tǒng)的目的、視圖之間的關(guān)聯(lián)、元素表及索引、項(xiàng)目詞匯。
(3)為什么架構(gòu)是這樣的(基本原理):跨視圖基本原理解釋了整體架構(gòu)實(shí)際上是其需求的一個(gè)解決方案。即解釋了做出決策的原因、方案的限制、改變決策時(shí)的影響及意義。
5、軟件視圖
軟件視圖通常分為三種類型:
(1)模塊視圖類型:為系統(tǒng)的主要模塊實(shí)現(xiàn)單元編檔。
(2)構(gòu)件和連接件視圖類型:為系統(tǒng)的構(gòu)件和連接件執(zhí)行單元編檔。
(3)分配視圖類型:為軟件的開發(fā)和執(zhí)行環(huán)境之間的關(guān)系編檔。每一視圖類型中,又有一些常用的形態(tài),可以把這些形態(tài)歸納成架構(gòu)風(fēng)格(簡稱風(fēng)格),
大量的架構(gòu)風(fēng)格供架構(gòu)設(shè)計(jì)師選用,例如客戶機(jī)/服務(wù)器是一種常見的架構(gòu)風(fēng)格,它是構(gòu)件和連接件視圖類型中的一員。架構(gòu)風(fēng)格是對(duì)元素和關(guān)系類型的特化,它還包括如何使用這些元素和關(guān)系類型的一組限制條件。架構(gòu)結(jié)構(gòu)/視圖分類如下表所示。
6、軟件架構(gòu)重構(gòu)
前面已論述了架構(gòu)編檔,即在架構(gòu)設(shè)計(jì)時(shí)完成編檔工作。但是還有另外一種情況:系統(tǒng)已經(jīng)存在,但不知其架構(gòu),即架構(gòu)沒有通過文檔很好地保留下來(文檔的缺失/失效)。如何維護(hù)這樣的系統(tǒng)并管理其演變?其關(guān)鍵就是要找到軟件架構(gòu),軟件架構(gòu)重構(gòu)就是研究解決這一問題的方法,它是反向工程之一。
架構(gòu)重構(gòu)需要工具的支持,但任何一個(gè)工具或工具集對(duì)架構(gòu)重構(gòu)都是不夠的。因?yàn)椋?/p>
工具往往是面向特定語言的;
數(shù)據(jù)提取工具經(jīng)常返回不完整的或錯(cuò)誤的結(jié)果,因此,應(yīng)在多個(gè)工具提供的結(jié)果間進(jìn)行補(bǔ)充、驗(yàn)證和判斷;
重構(gòu)的目的(文檔的用途)不同,決定了需要提取什么數(shù)據(jù),這反過來影響了工具的選擇。以此為原則,就是架構(gòu)重構(gòu)的工作臺(tái)方法,如 SEI 開發(fā)的 Dali。
軟件架構(gòu)重構(gòu)由以下活動(dòng)組成,這些活動(dòng)以迭代方式進(jìn)行,如下所示。
(1)信息提取(View )。可以使用各種工具進(jìn)行信息提取,如解析器、語法分析器等;可以利用 build 和 文件中關(guān)于模塊的依賴關(guān)系;可以從源代碼、編譯時(shí)制品和設(shè)計(jì)制品中提取靜態(tài)信息;可以使用分析工具提取動(dòng)態(tài)信息。
(2)數(shù)據(jù)庫構(gòu)造( ):將提取的信息轉(zhuǎn)化為標(biāo)準(zhǔn)的形式,并置于數(shù)據(jù)庫中。
(3)視圖融合(View Fusion):將數(shù)據(jù)庫中的信息組合在一起,生成該架構(gòu)的一個(gè)內(nèi)聚的視圖。
(4)重構(gòu)():構(gòu)建數(shù)據(jù)抽象和各種表示以生成架構(gòu)表示,主要由兩個(gè)活動(dòng)組成:可視化和交互、模式定義和識(shí)別。最后生成需要的架構(gòu)文檔()。
上述過程中,架構(gòu)是由重構(gòu)人員通過對(duì)系統(tǒng)做出一組假定來獲得,為了最有效地生成這些假定并對(duì)其進(jìn)行驗(yàn)證,必須讓熟悉系統(tǒng)的人參與此項(xiàng)工作,包括過去參與系統(tǒng)開發(fā)的人員或現(xiàn)在正在對(duì)其進(jìn)行維護(hù)的人員。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。