周比較火的莫過于 3 位初中生開源的 Windows 12 網(wǎng)頁版,雖然項目完成度不如在線版的 Windows 11,但是不妨一看。除了后生可畏的 win12 之外,開源不到一周的 open-interpreter 表現(xiàn)也很搶眼,一個在終端就能使喚的 AI 助手獲得了 15k+ star。
還有深度開源的 deepin-unioncode IDE 表現(xiàn)也不俗,還有不能錯過的靜態(tài)分析工具 biome 和 React 編輯器 puck 都可以玩玩看。
選項標(biāo)準(zhǔn):新發(fā)布 | 實用 | 有趣,根據(jù)項目 release 時間分類,發(fā)布時間不超過 14 day 的項目會標(biāo)注 New,無該標(biāo)志則說明項目 release 超過半月。由于本文篇幅有限,還有部分項目未能在本文展示,望周知
主語言:Python
New 這是一個在你計算機里運行語言模型的項目,支持 Python、JavaScript、Shell 等等。安裝后,通過在終端中運行 $ interpreter,就可以通過類似 ChatGPT 的界面與 open-interpreter 聊天。比如,像是 demo 里,讓它將系統(tǒng)主題變暗黑,btw,這個項目開源沒到一周,便獲得了 15k+ star,可見其受歡迎程度。
GitHub 地址→github.com/KillianLucas/open-interpreter
主語言:HTML、JavaScript
這是 3 個初中生做的 Windows 12 在線體驗版,在線就能體驗一把 Windows 12。如果你還在用 Windows 11,不妨試試這個在線版的 12,再考慮是否升級系統(tǒng)。
GitHub 地址→github.com/tjy-gitnub/win12
本周 star 增長數(shù) 1,150+,主語言:TypeScript
可用來寫 React 的自托管、拖拽編輯器,特性:
GitHub 地址→github.com/measuredco/puck
本周 star 增長數(shù):450+,主語言:C++
深度公司開源的深度集成開發(fā)環(huán)境,具有多語言、跨平臺等特性。
GitHub 地址→github.com/linuxdeepin/deepin-unioncode
本周 star 增長數(shù):1,050+,主語言:TypeScript
支持自定義域名的短鏈接縮短服務(wù),dub 還自帶分析功能,你可以統(tǒng)計到鏈接點擊情況、點擊區(qū)域分布等等信息。此外,它還支持生成短鏈接相對應(yīng)的二維碼。
GitHub 地址→github.com/steven-tey/dub
本周 star 增長數(shù):750+,主語言:Rust
New 不到一秒,它就能格式化并檢查你的代碼。除了靜態(tài)代碼分析之外,biome 有一流的 IDE,其復(fù)雜的解析器可以高保真地展示源文本,并提供一流的錯誤恢復(fù)功能。而 biome 的設(shè)計目標(biāo)是為了最終取代 Babel、ESLint、Webpack、Prettier、Jest 等工具。
GitHub 地址→github.com/biomejs/biome
本周 star 增長數(shù):800+,主語言:Dart
New 一款集成了主流大語言模型以及繪圖模型的 APP, 采用 Flutter 開發(fā),代碼完全開源,支持以下功能:
GitHub 地址→github.com/mylxsw/aidea
在這個章節(jié),我們將會分享下本周 HelloGitHub 網(wǎng)站上的熱評項目,HG 開源項目評價體系剛上線不久,期待你的評價。
主語言:Swift
這款工具可以列出所有可供下載的 macOS 固件/安裝程序的信息,包括名稱、版本號、發(fā)布日期和大小。
HG 評價地址→hellogithub.com/repository/00c31d3483b7498d8961c05b7ec8cdb9
主語言:Go
雖然 Go 語言內(nèi)置了處理 XML 的庫,但在使用時必須按照嵌套層級定義結(jié)構(gòu)體非常繁瑣。這個項目的設(shè)計靈感來源于 Python 語言的 ElementTree 庫,可以在無需定義結(jié)構(gòu)體的情況下靈活的讀取、生成 XML 文檔。
HG 評價地址→hellogithub.com/repository/89689a3f8df5449ea9a7fe1cafc13c10
- END -
譯]Vue 最黑暗的一天
JavaScript 今天
原文:Vue's Darkest Day 作者:Daniel Elkington
譯者注:原文寫于2019年6月21日
今天,我驚訝的發(fā)現(xiàn),往常積極友好的 VueJS 社區(qū)陷入了一場激烈的戰(zhàn)爭。兩周前,Vue 的創(chuàng)建者尤雨溪發(fā)布了一個請求意見稿(RFC),用于在即將發(fā)布的 Vue 3.0 中使用基于函數(shù)的方式編寫 Vue 組件。今天,一個 Reddit 上批評性的帖子和 Hacker News 上一些類似的批評性的評論,引起大批開發(fā)者涌向原本的 RFC 來表達他們的憤怒,其中一些有點侮辱性。在很多地方都有人聲稱:
看過 Reddit 上成堆的負(fù)面評論,你可能會在 RFC 頁面上驚訝的發(fā)現(xiàn)尤雨溪的 RFC 收到的正面的表情回應(yīng)的比例比負(fù)面的高得多,而且許多早期評論都是相當(dāng)正面的。實際上,第一條評論就充滿了溢美之詞。
我就是第一個寫評論的人。我碰巧收到新 RFC 的通知,馬上讀了一下,發(fā)現(xiàn)這正是我想從 Vue 3.0 得到的,而且它會給我極大的幫助,于是我在 RFC 發(fā)布 15 分鐘后留下了第一條評論來表達我的謝意。我希望在這里進一步說明為什么我覺得新提案是一個如此好的主意,但首先,要回應(yīng)一些批評。
我懷疑很多人在閱讀了 Hacker News 或 Reddit 上有著很多誤導(dǎo)性評論的帖子之后有點激動,他們在沒有閱讀原始提案的情況下就表達了自己的憤怒。尤雨溪已經(jīng)更新了這個提案,通過問答的方式回應(yīng)了人們的很多問題,總的來說:
一個更主觀的觀點是:新語法不如舊語法,并且會導(dǎo)致結(jié)構(gòu)化程度較低的代碼。我希望通過一個簡單的例子來說明為什么我在看到 RFC 時如此興奮,以及為什么我覺得它更優(yōu)秀,將會導(dǎo)致結(jié)構(gòu)化 更好 的代碼。
考慮一下下面的有趣組件,用戶可以輸入寵物的詳細信息。請注意:
你可以在這里嘗試組件的demo,也可以在這里查看使用 Vue 2.x 編寫的代碼(在 components/Vue2.vue)
考慮一下這個組件的 JavaScript:
export default { data () { return { petName : "" , petNameTouched : false , petSize : "" , petSizeTouched : false }; }, computed : { petNameComment : function () { if ( this . petNameTouched ) { return "Hello " + this . petName ; } return null ; }, petSizeComment : function () { if ( this . petSizeTouched ) { switch ( this . petSize ) { case "Small" : return "I can barely see your pet!" ; case "Medium" : return "Your pet is pretty average." ; case "Large" : return "Wow, your pet is huge!" ; default : return null ; } } return null ; } }, methods : { onPetNameBlur : function () { this . petNameTouched=true ; }, onPetSizeChange : function () { this . petSizeTouched=true ; } } };
實質(zhì)上,我們有一些數(shù)據(jù)、從這些數(shù)據(jù)計算出的屬性、以及 操作這些數(shù)據(jù)的方法。注意,在 Vue 2.x 中我們 沒有辦法把相關(guān)的東西放在一起。我們不能把 petName 數(shù)據(jù)聲明放在 petNameComment 計算屬性或者 onPetNameBlur 方法旁邊,因為在 Vue 2.x 中,這些選項是按照類型組織的。
當(dāng)然,對于像這樣的小例子來說,這不太重要。但是想象一個更大的例子,它有很多功能,需要 data、 computed、 methods、甚至是一兩個 watcher。目前還 沒有好方法 來把相關(guān)的東西放一起!有人可能會使用諸如 Mixin 或高階組件之類的辦法,但是它們都有問題——很難辨別一個屬性來自哪里,還有命名空間的沖突。(是的,在這種情況下,拆分為多個組件是可能的,但是這個類似的例子就不行)
新提案不是按照選項的類型來組織組件,而是允許我們按照實際功能來組織組件。這類似于你在電腦上整理個人文件的方式——你通常沒有“表格”文件夾和“Word 文檔”文件夾,相反,你可能有一個”工作“文件夾和一個”假期計劃“文件夾。想象一下使用提案里的語法來編寫組件(盡我所能,如果你看到了什么 bug 請告訴我):
import { state , computed } from "vue" ; export default { setup () { const petNameState=state ({ name : "" , touched : false }); const petNameComment=computed (()=> { if ( petNameState . touched ) { return "Hello " + petNameState . name ; } return null ; }); const onPetNameBlur=()=> { petNameState . touched=true ; }; const petSizeState=state ({ size : "" , touched : false }); const petSizeComment=computed (()=> { if ( petSizeState . touched ) { switch ( this . petSize ) { case "Small" : return "I can barely see your pet!" ; case "Medium" : return "Your pet is pretty average." ; case "Large" : return "Wow, your pet is huge!" ; default : return null ; } } return null ; }); const onPetSizeChange=()=> { petSizeState . touched=true ; }; return { petName : petNameState . name , petNameComment , onPetNameBlur , petSize : petSizeState . size , petSizeComment , onPetSizeChange }; } };
注意:
除此之外,新語法可以有完整的 Typescript 支持,這在 Vue 2.x 基于對象的語法中很難實現(xiàn)。而且我們可以很輕易地把可重用的邏輯提取為可重用的函數(shù)。例如:
import { state , computed } from "vue" ; function usePetName () { const petNameState=state ({ name : "" , touched : false }); const petNameComment=computed (()=> { if ( petNameState . touched ) { return "Hello " + petNameState . name ; } return null ; }); const onPetNameBlur=()=> { petNameState . touched=true ; }; return { petName : petNameState . name , petNameComment , onPetNameBlur }; } function usePetSize () { const petSizeState=state ({ size : "" , touched : false }); const petSizeComment=computed (()=> { if ( petSizeState . touched ) { switch ( this . petSize ) { case "Small" : return "I can barely see your pet!" ; case "Medium" : return "Your pet is pretty average." ; case "Large" : return "Wow, your pet is huge!" ; default : return null ; } } return null ; }); const onPetSizeChange=()=> { petSizeState . touched=true ; }; return { petSize : petSizeState . size , petSizeComment , onPetSizeChange }; } export default { setup () { const { petName , petNameComment , onPetNameBlur }=usePetName (); const { petSize , petSizeComment , onPetSizeChange }=usePetSize (); return { petName , petNameComment , onPetNameBlur , petSize , petSizeComment , onPetSizeChange }; } };
在 Vue 2.x 中,我經(jīng)常發(fā)現(xiàn)自己寫了個“怪獸組件”,它很難分解成更小的部分——它不能分解成其他的組件,因為很多事務(wù)基于少量狀態(tài)。然而,使用提案中的語法,很容易看出大型組件的邏輯可以被分解為更小的可重用部分,在必要時移動到獨立的文件里,留給你小的、易于理解的函數(shù)和組件。
這是目前為止 Vue 最黑暗的一天嗎?看起來是的。一直團結(jié)追隨這個項目方向的社區(qū)已經(jīng)分裂了。但我希望人們能夠重新審視這個提案,它沒有破壞任何東西,只要他們想,仍然可以按照選項的類型來組織它們,但是可以做到更多——更清晰的代碼、更簡潔的代碼、更有意思的庫、還有完善的 Typescript 支持。
最后,在使用開源軟件時,最好記住,全靠維護者投入的大量精力,你才可以免費使用它。今天的一些過分批評是他們不應(yīng)該承受的。好在這些無禮的批評只是少數(shù)(盡管數(shù)量相當(dāng)多),大多數(shù)人能以更禮貌的方式表達自己。
2019年6月23日更新:
我很快就寫好了原文,并沒有期望它能得到這樣的關(guān)注。然后我意識到這個代碼示例對于我想要表達的觀點來說過于復(fù)雜,所以我把它簡化了很多。原本的代碼示例在這里。
作者:李潤澤
TML稱為超文本標(biāo)記語言,是一種標(biāo)識性的語言。在前端開發(fā)中離不開HTML,支持不同數(shù)據(jù)格式的文件鑲?cè)搿G岸斯こ處熢诿嬖囘^程中涉及到一些基礎(chǔ)知識,常見的前端HTML面試題有哪些呢?本文,千鋒武漢Web前端培訓(xùn)小編分享12道經(jīng)典的HTML面試題給大家!
1、<image>標(biāo)簽上title屬性與alt屬性的區(qū)別是什么?
alt屬性是為了給那些不能看到你文檔中圖像的瀏覽者提供文字說明的。且長度必須少于100個英文字符或者用戶必須保證替換文字盡可能的短。
這包括那些使用本來就不支持圖像顯示或者圖像顯示被關(guān)閉的瀏覽器的用戶,視覺障礙的用戶和使用屏幕閱讀器的用戶等。
title屬性為設(shè)置該屬性的元素提供建議性的信息。使用title屬性提供非本質(zhì)的額外信息。參考《alt和title屬性的區(qū)別及應(yīng)用》
2、分別寫出以下幾個HTML標(biāo)簽:文字加粗、下標(biāo)、居中、字體
加粗:<b>、<strong>
下標(biāo):<sub>
居中:<center>
字體:<font>、<basefont>、參考《HTML標(biāo)簽列表》
3、請寫出至少5個html5新增的標(biāo)簽,并說明其語義和應(yīng)用場景
section:定義文檔中的一個章節(jié)
nav:定義只包含導(dǎo)航鏈接的章節(jié)
header:定義頁面或章節(jié)的頭部。它經(jīng)常包含 logo、頁面標(biāo)題和導(dǎo)航性的目錄。
footer:定義頁面或章節(jié)的尾部。它經(jīng)常包含版權(quán)信息、法律信息鏈接和反饋建議用的地址。
aside:定義和頁面內(nèi)容關(guān)聯(lián)度較低的內(nèi)容——如果被刪除,剩下的內(nèi)容仍然很合理。
參考《HTML5 標(biāo)簽列表》
4、請說說你對標(biāo)簽語義化的理解?
a. 去掉或者丟失樣式的時候能夠讓頁面呈現(xiàn)出清晰的結(jié)構(gòu)
b. 有利于SEO:和搜索引擎建立良好溝通,有助于爬蟲抓取更多的有效信息:爬蟲依賴于標(biāo)簽來確定上下文和各個關(guān)鍵字的權(quán)重;
c. 方便其他設(shè)備解析(如屏幕閱讀器、盲人閱讀器、移動設(shè)備)以意義的方式來渲染網(wǎng)頁;
d. 便于團隊開發(fā)和維護,語義化更具可讀性,遵循W3C標(biāo)準(zhǔn)的團隊都遵循這個標(biāo)準(zhǔn),可以減少差異化。
5、Doctype作用? 嚴(yán)格模式與混雜模式如何區(qū)分?它們有何意義?
聲明位于文檔中的最前面,處于 標(biāo)簽之前。告知瀏覽器以何種模式來渲染文檔。
嚴(yán)格模式的排版和 JS 運作模式是,以該瀏覽器支持的最高標(biāo)準(zhǔn)運行。
在混雜模式中,頁面以寬松的向后兼容的方式顯示。模擬老式瀏覽器的行為以防止站點無法工作。
DOCTYPE不存在或格式不正確會導(dǎo)致文檔以混雜模式呈現(xiàn)。
6、你知道多少種Doctype文檔類型?
標(biāo)簽可聲明三種 DTD 類型,分別表示嚴(yán)格版本、過渡版本以及基于框架的 HTML 文檔。
HTML 4.01 規(guī)定了三種文檔類型:Strict、Transitional 以及 Frameset。
XHTML 1.0 規(guī)定了三種 XML 文檔類型:Strict、Transitional 以及 Frameset。
Standards (標(biāo)準(zhǔn))模式(也就是嚴(yán)格呈現(xiàn)模式)用于呈現(xiàn)遵循最新標(biāo)準(zhǔn)的網(wǎng)頁,
Quirks(包容)模式(也就是松散呈現(xiàn)模式或者兼容模式)用于呈現(xiàn)為傳統(tǒng)瀏覽器而設(shè)計的網(wǎng)頁。
7、HTML與XHTML——二者有什么區(qū)別
a. XHTML 元素必須被正確地嵌套。
b. XHTML 元素必須被關(guān)閉。
c. 標(biāo)簽名必須用小寫字母。
d. XHTML 文檔必須擁有根元素。
參考《XHTML 與 HTML 之間的差異》
8、html5有哪些新特性、移除了那些元素?
a. HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集,主要是關(guān)于圖像,位置,存儲,多任務(wù)等功能的增加。
b. 拖拽釋放(Drag and drop) API
c. 語義化更好的內(nèi)容標(biāo)簽(header,nav,footer,aside,article,section)
d. 音頻、視頻API(audio,video)
e. 畫布(Canvas) API
f. 地理(Geolocation) API
g. 本地離線存儲 localStorage 長期存儲數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失
h. sessionStorage 的數(shù)據(jù)在頁面會話結(jié)束時會被清除
i. 表單控件,calendar、date、time、email、url、search
j. 新的技術(shù)webworker, websocket等
移除的元素:
a. 純表現(xiàn)的元素:basefont,big,center, s,strike,tt,u;
b. 對可用性產(chǎn)生負(fù)面影響的元素:frame,frameset,noframes;
9、iframe的優(yōu)缺點?
優(yōu)點:
a. 解決加載緩慢的第三方內(nèi)容如圖標(biāo)和廣告等的加載問題
b. iframe無刷新文件上傳
c. iframe跨域通信
缺點:
a. iframe會阻塞主頁面的Onload事件
b. 無法被一些搜索引擎索引到
c. 頁面會增加服務(wù)器的http請求
d. 會產(chǎn)生很多頁面,不容易管理。
參考《iframe的一些記錄》
10、Quirks模式是什么?它和Standards模式有什么區(qū)別?
在寫程序時我們也會經(jīng)常遇到這樣的問題,如何保證原來的接口不變,又提供更強大的功能,尤其是新功能不兼容舊功能時。IE6以前的頁面大家都不會去寫DTD,所以IE6就假定 如果寫了DTD,就意味著這個頁面將采用對CSS支持更好的布局,而如果沒有,則采用兼容之前的布局方式。這就是Quirks模式(怪癖模式,詭異模式,怪異模式)。
區(qū)別:總體會有布局、樣式解析和腳本執(zhí)行三個方面的區(qū)別。
a. 盒模型:在W3C標(biāo)準(zhǔn)中,如果設(shè)置一個元素的寬度和高度,指的是元素內(nèi)容的寬度和高度,而在Quirks 模式下,IE的寬度和高度還包含了padding和border。
b. 設(shè)置行內(nèi)元素的高寬:在Standards模式下,給等行內(nèi)元素設(shè)置wdith和height都不會生效,而在quirks模式下,則會生效。
c. 設(shè)置百分比的高度:在standards模式下,一個元素的高度是由其包含的內(nèi)容來決定的,如果父元素沒有設(shè)置百分比的高度,子元素設(shè)置一個百分比的高度是無效的用
d. 設(shè)置水平居中:使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下卻會失效。
11、請闡述table的缺點
a. 太深的嵌套,比如table>tr>td>h3,會導(dǎo)致搜索引擎讀取困難,而且,最直接的損失就是大大增加了冗余代碼量。
b. 靈活性差,比如要將tr設(shè)置border等屬性,是不行的,得通過td
c. 代碼臃腫,當(dāng)在table中套用table的時候,閱讀代碼會顯得異常混亂
d. 混亂的colspan與rowspan,用來布局時,頻繁使用他們會造成整個文檔順序混亂。
e. 不夠語義
參考《為什么說table表格布局不好?》
12、簡述一下src與href的區(qū)別
src用于替換當(dāng)前元素;href用于在當(dāng)前文檔和引用資源之間確立聯(lián)系。
src是source的縮寫,指向外部資源的位置,指向的內(nèi)容將會嵌入到文檔中當(dāng)前標(biāo)簽所在位置
href是Hypertext Reference的縮寫,指向網(wǎng)絡(luò)資源所在位置,建立和當(dāng)前元素(錨點)或當(dāng)前文檔(鏈接)之間的鏈接
以上千鋒武漢Web前端培訓(xùn)小編僅介紹了部分HTML面試題及答案。如果想要在眾多競爭者中脫穎而出,除了專業(yè)技能還需要掌握一些求職面試的技巧,在面試過程中爭取更多的主動權(quán)。了解更多Web前端工程師求職面試技巧,你可以關(guān)注“武漢千鋒”微信公眾號,定期發(fā)布技術(shù)熱點文章和求職指南。你也可以來千鋒武漢Web前端培訓(xùn)班免費試聽兩周,親身感受教學(xué)效果,滿意后進行系統(tǒng)深入的學(xué)習(xí)進階!
千鋒武漢Web前端培訓(xùn)課程結(jié)合時下流行技術(shù),以實戰(zhàn)項目驅(qū)動教學(xué),除了培養(yǎng)學(xué)員的開發(fā)技術(shù),覆蓋熱門大數(shù)據(jù)可視化內(nèi)容,深度貫穿前端后端開發(fā),緊貼主流企業(yè)一線需求。這里有專業(yè)老師帶你,最多半年的時間讓你完美蛻變。進名企、拿高薪不再是問題,命運掌握在自己的手里,想要什么樣的人生就看你自己的選擇了!
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。