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
早 發自 凹非寺
量子位 報道 | 公眾號 QbitAI
萬萬沒想到,如此普通的復選框,竟也能玩出這種高度!
例如點一下復選框,屏幕就像被投入石子的水面泛出波紋:
設定好初始狀態,就可以開始展示《生命游戲》的演化過程;
控制上下左右,還能還原經典游戲《貪吃蛇》;
這就是一位做前端開發的小哥Bryan,近期在自己的網站上發布的有關checkbox (復選框)的新玩法。
這個項目在Hacker News上引來了大量網友評論。
高贊評論已經給小朋友安排得明明白白了~
而面對一些諸如“為什么要用復選框,普通像素就可以達到這種效果”的質疑,也有人為Bryan說話:
回到這件事本身,其實在去年早些時候,他就建了一個名為Checkboxland的JavaScript庫。
它可以將任何內容呈現為HTML復選框。
講真,剛才展示的復選框效果,只能說是“開胃菜”。
不僅僅是簡單的動畫,日常拍下的照片,記錄的生活vlog,一樣可以成為“復選框”的素材。
小哥本人也一度以為靈感耗盡,但在參閱了一篇關于將圖像轉化為ASCII的文章之后,Bryan將耐克和蘋果的logo轉化了出來(不建議轉化迪士尼的logo)。
小哥本人也是老二次元了,《Bad Apple》也是信手拈來:
隨后,自嘲“the CheckBox guy”的小哥賦予了復選框更多的可能,他又拓展了Checkboxland API,用來加載任何視頻并生成復選框版本。
下面這個看起來就像進入了《星際穿越》的五維立方體。
而此刻你如果打開攝像頭,Bryan還可以帶領你半只腳踏進《黑客帝國》~
趕快學起來,說不定還能用來畫心形圖,成為你的表白神器(不是)!
看似炫酷的效果實際制作過程只需分為兩大步,手把手教你!
1.做出原本的圖像。
2.將圖像轉化為ASCII文本輸出。
以水波為例,首先要生成這樣動態的水波。
想要生成它,需要以中心為原點,在xy平面上建立正弦函數。
z軸垂直屏幕向外,把z軸的數值轉化為灰度,白色為波峰,黑色為波谷。
然后在圖形計算器desmos上讓水波動起來,這樣第一步就完成了。
第二步,將第一步的成果轉化為ASCII碼輸出。
這一步的轉化主要涉及到將彩色對應灰度。
采用這個公式,即使是彩色的圖片,也只不過是五彩斑斕的灰罷了~
GrayScale = 0.21 R + 0.72 G + 0.07 B
提取原圖的RGB色彩,輸出為灰度:
const toGrayScale = (r, g, b) => 0.21 * r + 0.72 * g + 0.07 * b;
const convertToGrayScales = (context, width, height) => {
const imageData = context.getImageData(0, 0, width, height);
const grayScales = [];
for (let i = 0 ; i < imageData.data.length ; i += 4) {
const r = imageData.data[i];
const g = imageData.data[i + 1];
const b = imageData.data[i + 2];
const grayScale = toGrayScale(r, g, b);
imageData.data[i] = imageData.data[i + 1] = imageData.data[i + 2] = grayScale;
grayScales.push(grayScale);
}
context.putImageData(imageData, 0, 0);
return grayScales;
};
然后為每個像素賦灰度值:
const grayRamp = '$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^`\'. ';
const rampLength = grayRamp.length;
const getCharacterForGrayScale = grayScale => grayRamp[Math.ceil((rampLength - 1) * grayScale / 255)];const asciiImage = document.querySelector('pre#ascii');
const drawAscii = (grayScales) => {
const ascii = grayScales.reduce((asciiImage, grayScale) => {
return asciiImage + getCharacterForGrayScale(grayScale);
}, '');
asciiImage.textContent = ascii;
};
最后調整一下圖片大小就大功告成了~更多詳細內容見文后鏈接~
在最近的更新中,Bryan稱,他創造新天地的事情將暫時告一段落。
但是他不僅留下了復選框新玩法原理的詳細介紹,還有自制的豐富的demos。這些足以讓你探索創造。
簡單的動畫,貪吃蛇,通過攝像頭實時生成復選框版圖像(demos中的webcam)…
點擊即可試玩,以貪吃蛇和webcam為例:
點擊snake,鍵盤上下左右即可控制貪吃蛇:
點擊webcam,打開前置攝像頭,可以看到自己的實時動態:
根據網友的反饋,似乎在安卓系統中打開會白屏,但是在Mac Safari, iPhone Safari, 桌面Chrome上都可以使用。
感興趣的小伙伴,快來試試吧~
參考鏈接:
[1]https://www.bryanbraun.com/2021/09/21/i-keep-making-things-out-of-checkboxes/
[2]https://news.ycombinator.com/item?id=28826018
[3]https://www.jonathan-petitcolas.com/2017/12/28/converting-image-to-ascii-art.html
[4]https://www.bryanbraun.com/checkboxland/#demos
[5]https://github.com/bryanbraun/checkboxland
— 完 —
量子位 QbitAI · 頭條號簽約
關注我們,第一時間獲知前沿科技動態
ss實現簡單實用的復選框,常用于自定義復選框的頁面當中!實現效果如下:
代碼如下:
html布局:
css樣式:
6年的時候花了一些時間整理了一些關于jvm的介紹文章,到現在回顧起來還是一些還沒有補充全面,其中就包括如何利用工具來監控調優前后的性能變化。工具做為圖形化界面來展示更能直觀的發現問題,另一方面一些耗費性能的分析(dump文件分析)一般也不會在生產直接分析,往往dump下來的文件達1G左右,人工分析效率較低,因此利用工具來分析jvm相關問題,長長可以到達事半功倍的效果來。
jvm監控分析工具一般分為兩類,一種是jdk自帶的工具,一種是第三方的分析工具。jdk自帶工具一般在jdk bin目錄下面,以exe的形式直接點擊就可以使用,其中包含分析工具已經很強大,幾乎涉及了方方面面,但是我們最常使用的只有兩款:jconsole.exe和jvisualvm.exe;第三方的分析工具有很多,各自的側重點不同,比較有代表性的:MAT(Memory Analyzer Tool)、GChisto等。
對于大型 JAVA 應用程序來說,再精細的測試也難以堵住所有的漏洞,即便我們在測試階段進行了大量卓有成效的工作,很多問題還是會在生產環境下暴露出來,并且很難在測試環境中進行重現。JVM 能夠記錄下問題發生時系統的部分運行狀態,并將其存儲在堆轉儲 (Heap Dump) 文件中,從而為我們分析和診斷問題提供了重要的依據。其中VisualVM和MAT是dump文件的分析利器。
Jconsole(Java Monitoring and Management Console)是從java5開始,在JDK中自帶的java監控和管理控制臺,用于對JVM中內存,線程和類等的監控,是一個基于JMX(java management extensions)的GUI性能監測工具。jconsole使用jvm的擴展機制獲取并展示虛擬機中運行的應用程序的性能和資源消耗等信息。
直接在jdk/bin目錄下點擊jconsole.exe即可啟動,界面如下:
在彈出的框中可以選擇本機的監控本機的java應用,也可以選擇遠程的java服務來監控,如果監控遠程服務需要在tomcat啟動腳本中添加如下代碼:
-Dcom.sun.management.jmxremote.port=6969
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
連接進去之后,就可以看到jconsole概覽圖和主要的功能:概述、內存、線程、類、VM、MBeans
簡介
VisualVM 是一個工具,它提供了一個可視界面,用于查看 Java 虛擬機 (Java Virtual Machine, JVM) 上運行的基于 Java 技術的應用程序(Java 應用程序)的詳細信息。VisualVM 對 Java Development Kit (JDK) 工具所檢索的 JVM 軟件相關數據進行組織,并通過一種使您可以快速查看有關多個 Java 應用程序的數據的方式提供該信息。您可以查看本地應用程序以及遠程主機上運行的應用程序的相關數據。此外,還可以捕獲有關 JVM 軟件實例的數據,并將該數據保存到本地系統,以供后期查看或與其他用戶共享。
VisualVM 是javajdk自帶的最牛逼的調優工具了吧,也是我平時使用最多調優工具,幾乎涉及了jvm調優的方方面面。同樣是在jdk/bin目錄下面雙擊jvisualvm.exe既可使用,啟動起來后和jconsole 一樣同樣可以選擇本地和遠程,如果需要監控遠程同樣需要配置相關參數,主界面如下;
VisualVM可以根據需要安裝不同的插件,每個插件的關注點都不同,有的主要監控GC,有的主要監控內存,有的監控線程等。
如何安裝:
1、從主菜單中選擇“工具”>“插件”。
2、在“可用插件”標簽中,選中該插件的“安裝”復選框。單擊“安裝”。
3、逐步完成插件安裝程序。
我這里以 Eclipse(pid 22296)為例,雙擊后直接展開,主界面展示了系統和jvm兩大塊內容,點擊右下方jvm參數和系統屬性可以參考詳細的參數信息.
因為VisualVM的插件太多,我這里主要介紹三個我主要使用幾個:監控、線程、Visual GC
監控的主頁其實也就是,cpu、內存、類、線程的圖表
線程和jconsole功能沒有太大的區別
Visual GC 是常常使用的一個功能,可以明顯的看到年輕代、老年代的內存變化,以及gc頻率、gc的時間等。
以上的功能其實jconsole幾乎也有,VisualVM更全面更直觀一些,另外VisualVM非常多的其它功能,可以分析dump的內存快照,dump出來的線程快照并且進行分析等,還有其它很多的插件大家可以去探索
MAT是什么?
MAT(Memory Analyzer Tool),一個基于Eclipse的內存分析工具,是一個快速、功能豐富的Java heap分析工具,它可以幫助我們查找內存泄漏和減少內存消耗。使用內存分析工具從眾多的對象中進行分析,快速的計算出在內存中對象的占用大小,看看是誰阻止了垃圾收集器的回收工作,并可以通過報表直觀的查看到可能造成這種結果的對象。
通常內存泄露分析被認為是一件很有難度的工作,一般由團隊中的資深人士進行。不過要介紹的 MAT(Eclipse Memory Analyzer)被認為是一個“傻瓜式“的堆轉儲文件分析工具,你只需要輕輕點擊一下鼠標就可以生成一個專業的分析報告。和其他內存泄露分析工具相比,MAT 的使用非常容易,基本可以實現一鍵到位,即使是新手也能夠很快上手使用。
MAT以eclipse 插件的形式來安裝,具體的安裝過程就不在描述了,可以利用visualvm或者是 jmap命令生產堆文件,導入eclipse mat中生成分析報告:
生產這會報表的同時也會在dump文件的同級目錄下生成三份(dump_Top_Consumers.zip、dump_Leak_Suspects.zip、dump_Top_Components.zip)分析結果的html文件,方便發送給相關同事來查看。
需要關注的是下面的Actions、Reports、Step by Step區域:
以上只是一個初級的介紹,mat還有更強大的使用,比如對比堆內存,在生產環境中往往為了定位問題,每隔幾分鐘dump出一下內存快照,隨后在對比不同時間的堆內存的變化來發現問題。
GChisto是一款專業分析gc日志的工具,可以通過gc日志來分析:Minor GC、full gc的時間、頻率等等,通過列表、報表、圖表等不同的形式來反應gc的情況。雖然界面略顯粗糙,但是功能還是不錯的。
配置好本地的jdk環境之后,雙擊GChisto.jar,在彈出的輸入框中點擊 add 選擇gc.log日志
不過這款工具已經不再維護,不能識別最新jdk的日志文件。
GCViewer也是一款分析小工具,用于可視化查看由Sun / Oracle, IBM, HP 和 BEA Java 虛擬機產生的垃圾收集器的日志,gcviewer個人感覺顯示 的界面比較亂沒有GChisto更專業一些。
這是一個web工具,在線使用非常方便.
地址: http://gceasy.io
進入官網,講打包好的zip或者gz為后綴的壓縮包上傳,過一會就會拿到分析結果。
推薦使用此工具進行gc分析。
前期jvm系類文章回顧:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。