整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          前端小哥玩HTML復(fù)選框上癮,能畫(huà)logo做視頻,還開(kāi)源成JS庫(kù)

          早 發(fā)自 凹非寺
          量子位 報(bào)道 | 公眾號(hào) QbitAI

          萬(wàn)萬(wàn)沒(méi)想到,如此普通的復(fù)選框,竟也能玩出這種高度!

          例如點(diǎn)一下復(fù)選框,屏幕就像被投入石子的水面泛出波紋:

          設(shè)定好初始狀態(tài),就可以開(kāi)始展示《生命游戲》的演化過(guò)程;

          控制上下左右,還能還原經(jīng)典游戲《貪吃蛇》;

          這就是一位做前端開(kāi)發(fā)的小哥Bryan,近期在自己的網(wǎng)站上發(fā)布的有關(guān)checkbox (復(fù)選框)的新玩法。

          這個(gè)項(xiàng)目在Hacker News上引來(lái)了大量網(wǎng)友評(píng)論。

          高贊評(píng)論已經(jīng)給小朋友安排得明明白白了~

          而面對(duì)一些諸如“為什么要用復(fù)選框,普通像素就可以達(dá)到這種效果”的質(zhì)疑,也有人為Bryan說(shuō)話:

          回到這件事本身,其實(shí)在去年早些時(shí)候,他就建了一個(gè)名為Checkboxland的JavaScript庫(kù)。

          它可以將任何內(nèi)容呈現(xiàn)為HTML復(fù)選框。

          還有更厲害的玩法

          講真,剛才展示的復(fù)選框效果,只能說(shuō)是“開(kāi)胃菜”。

          不僅僅是簡(jiǎn)單的動(dòng)畫(huà),日常拍下的照片,記錄的生活vlog,一樣可以成為“復(fù)選框”的素材。

          小哥本人也一度以為靈感耗盡,但在參閱了一篇關(guān)于將圖像轉(zhuǎn)化為ASCII的文章之后,Bryan將耐克和蘋(píng)果的logo轉(zhuǎn)化了出來(lái)(不建議轉(zhuǎn)化迪士尼的logo)

          小哥本人也是老二次元了,《Bad Apple》也是信手拈來(lái):

          隨后,自嘲“the CheckBox guy”的小哥賦予了復(fù)選框更多的可能,他又拓展了Checkboxland API,用來(lái)加載任何視頻并生成復(fù)選框版本。

          下面這個(gè)看起來(lái)就像進(jìn)入了《星際穿越》的五維立方體。

          而此刻你如果打開(kāi)攝像頭,Bryan還可以帶領(lǐng)你半只腳踏進(jìn)《黑客帝國(guó)》~

          趕快學(xué)起來(lái),說(shuō)不定還能用來(lái)畫(huà)心形圖,成為你的表白神器(不是)

          復(fù)選框花式玩法,什么原理?

          看似炫酷的效果實(shí)際制作過(guò)程只需分為兩大步,手把手教你!

          1.做出原本的圖像。

          2.將圖像轉(zhuǎn)化為ASCII文本輸出。

          以水波為例,首先要生成這樣動(dòng)態(tài)的水波。

          想要生成它,需要以中心為原點(diǎn),在xy平面上建立正弦函數(shù)。

          z軸垂直屏幕向外,把z軸的數(shù)值轉(zhuǎn)化為灰度,白色為波峰,黑色為波谷。

          然后在圖形計(jì)算器desmos上讓水波動(dòng)起來(lái),這樣第一步就完成了。

          第二步,將第一步的成果轉(zhuǎn)化為ASCII碼輸出。

          這一步的轉(zhuǎn)化主要涉及到將彩色對(duì)應(yīng)灰度。

          采用這個(gè)公式,即使是彩色的圖片,也只不過(guò)是五彩斑斕的灰罷了~

          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;
          };

          然后為每個(gè)像素賦灰度值:

          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;
          };

          最后調(diào)整一下圖片大小就大功告成了~更多詳細(xì)內(nèi)容見(jiàn)文后鏈接~

          在線可玩,快來(lái)試試

          在最近的更新中,Bryan稱(chēng),他創(chuàng)造新天地的事情將暫時(shí)告一段落。

          但是他不僅留下了復(fù)選框新玩法原理的詳細(xì)介紹,還有自制的豐富的demos。這些足以讓你探索創(chuàng)造。

          簡(jiǎn)單的動(dòng)畫(huà),貪吃蛇,通過(guò)攝像頭實(shí)時(shí)生成復(fù)選框版圖像(demos中的webcam)

          點(diǎn)擊即可試玩,以貪吃蛇和webcam為例:

          點(diǎn)擊snake,鍵盤(pán)上下左右即可控制貪吃蛇:

          點(diǎn)擊webcam,打開(kāi)前置攝像頭,可以看到自己的實(shí)時(shí)動(dòng)態(tài):

          根據(jù)網(wǎng)友的反饋,似乎在安卓系統(tǒng)中打開(kāi)會(huì)白屏,但是在Mac Safari, iPhone Safari, 桌面Chrome上都可以使用。

          感興趣的小伙伴,快來(lái)試試吧~

          參考鏈接:

          [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 · 頭條號(hào)簽約

          關(guān)注我們,第一時(shí)間獲知前沿科技動(dòng)態(tài)

          ss實(shí)現(xiàn)簡(jiǎn)單實(shí)用的復(fù)選框,常用于自定義復(fù)選框的頁(yè)面當(dāng)中!實(shí)現(xiàn)效果如下:

          代碼如下:

          html布局:

          css樣式:

          6年的時(shí)候花了一些時(shí)間整理了一些關(guān)于jvm的介紹文章,到現(xiàn)在回顧起來(lái)還是一些還沒(méi)有補(bǔ)充全面,其中就包括如何利用工具來(lái)監(jiān)控調(diào)優(yōu)前后的性能變化。工具做為圖形化界面來(lái)展示更能直觀的發(fā)現(xiàn)問(wèn)題,另一方面一些耗費(fèi)性能的分析(dump文件分析)一般也不會(huì)在生產(chǎn)直接分析,往往dump下來(lái)的文件達(dá)1G左右,人工分析效率較低,因此利用工具來(lái)分析jvm相關(guān)問(wèn)題,長(zhǎng)長(zhǎng)可以到達(dá)事半功倍的效果來(lái)。

          jvm監(jiān)控分析工具一般分為兩類(lèi),一種是jdk自帶的工具,一種是第三方的分析工具。jdk自帶工具一般在jdk bin目錄下面,以exe的形式直接點(diǎn)擊就可以使用,其中包含分析工具已經(jīng)很強(qiáng)大,幾乎涉及了方方面面,但是我們最常使用的只有兩款:jconsole.exe和jvisualvm.exe;第三方的分析工具有很多,各自的側(cè)重點(diǎn)不同,比較有代表性的:MAT(Memory Analyzer Tool)、GChisto等。

          對(duì)于大型 JAVA 應(yīng)用程序來(lái)說(shuō),再精細(xì)的測(cè)試也難以堵住所有的漏洞,即便我們?cè)跍y(cè)試階段進(jìn)行了大量卓有成效的工作,很多問(wèn)題還是會(huì)在生產(chǎn)環(huán)境下暴露出來(lái),并且很難在測(cè)試環(huán)境中進(jìn)行重現(xiàn)。JVM 能夠記錄下問(wèn)題發(fā)生時(shí)系統(tǒng)的部分運(yùn)行狀態(tài),并將其存儲(chǔ)在堆轉(zhuǎn)儲(chǔ) (Heap Dump) 文件中,從而為我們分析和診斷問(wèn)題提供了重要的依據(jù)。其中VisualVM和MAT是dump文件的分析利器。

          jdk自帶的工具

          jconsole

          Jconsole(Java Monitoring and Management Console)是從java5開(kāi)始,在JDK中自帶的java監(jiān)控和管理控制臺(tái),用于對(duì)JVM中內(nèi)存,線程和類(lèi)等的監(jiān)控,是一個(gè)基于JMX(java management extensions)的GUI性能監(jiān)測(cè)工具。jconsole使用jvm的擴(kuò)展機(jī)制獲取并展示虛擬機(jī)中運(yùn)行的應(yīng)用程序的性能和資源消耗等信息。

          直接在jdk/bin目錄下點(diǎn)擊jconsole.exe即可啟動(dòng),界面如下:

          在彈出的框中可以選擇本機(jī)的監(jiān)控本機(jī)的java應(yīng)用,也可以選擇遠(yuǎn)程的java服務(wù)來(lái)監(jiān)控,如果監(jiān)控遠(yuǎn)程服務(wù)需要在tomcat啟動(dòng)腳本中添加如下代碼:

           -Dcom.sun.management.jmxremote.port=6969  
           -Dcom.sun.management.jmxremote.ssl=false  
           -Dcom.sun.management.jmxremote.authenticate=false
          

          連接進(jìn)去之后,就可以看到j(luò)console概覽圖和主要的功能:概述、內(nèi)存、線程、類(lèi)、VM、MBeans

          • 概述,以圖表的方式顯示出堆內(nèi)存使用量,活動(dòng)線程數(shù),已加載的類(lèi),CUP占用率的折線圖,可以非常清晰的觀察在程序執(zhí)行過(guò)程中的變動(dòng)情況。

          • 內(nèi)存,主要展示了內(nèi)存的使用情況,同時(shí)可以查看堆和非堆內(nèi)存的變化值對(duì)比,也可以點(diǎn)擊執(zhí)行GC來(lái)處罰GC的執(zhí)行

          • 線程,主界面展示線程數(shù)的活動(dòng)數(shù)和峰值,同時(shí)點(diǎn)擊左下方線程可以查看線程的詳細(xì)信息,比如線程的狀態(tài)是什么,堆棧內(nèi)容等,同時(shí)也可以點(diǎn)擊“檢測(cè)死鎖”來(lái)檢查線程之間是否有死鎖的情況。

          • 類(lèi),主要展示已加載類(lèi)的相關(guān)信息。
          • VM 概要,展示JVM所有信息總覽,包括基本信息、線程相關(guān)、堆相關(guān)、操作系統(tǒng)、VM參數(shù)等。
          • Mbean,查看Mbean的屬性,方法等。

          VisualVM

          簡(jiǎn)介

          VisualVM 是一個(gè)工具,它提供了一個(gè)可視界面,用于查看 Java 虛擬機(jī) (Java Virtual Machine, JVM) 上運(yùn)行的基于 Java 技術(shù)的應(yīng)用程序(Java 應(yīng)用程序)的詳細(xì)信息。VisualVM 對(duì) Java Development Kit (JDK) 工具所檢索的 JVM 軟件相關(guān)數(shù)據(jù)進(jìn)行組織,并通過(guò)一種使您可以快速查看有關(guān)多個(gè) Java 應(yīng)用程序的數(shù)據(jù)的方式提供該信息。您可以查看本地應(yīng)用程序以及遠(yuǎn)程主機(jī)上運(yùn)行的應(yīng)用程序的相關(guān)數(shù)據(jù)。此外,還可以捕獲有關(guān) JVM 軟件實(shí)例的數(shù)據(jù),并將該數(shù)據(jù)保存到本地系統(tǒng),以供后期查看或與其他用戶(hù)共享。

          VisualVM 是javajdk自帶的最牛逼的調(diào)優(yōu)工具了吧,也是我平時(shí)使用最多調(diào)優(yōu)工具,幾乎涉及了jvm調(diào)優(yōu)的方方面面。同樣是在jdk/bin目錄下面雙擊jvisualvm.exe既可使用,啟動(dòng)起來(lái)后和jconsole 一樣同樣可以選擇本地和遠(yuǎn)程,如果需要監(jiān)控遠(yuǎn)程同樣需要配置相關(guān)參數(shù),主界面如下;

          VisualVM可以根據(jù)需要安裝不同的插件,每個(gè)插件的關(guān)注點(diǎn)都不同,有的主要監(jiān)控GC,有的主要監(jiān)控內(nèi)存,有的監(jiān)控線程等。

          如何安裝:

          1、從主菜單中選擇“工具”>“插件”。
          2、在“可用插件”標(biāo)簽中,選中該插件的“安裝”復(fù)選框。單擊“安裝”。
          3、逐步完成插件安裝程序。

          我這里以 Eclipse(pid 22296)為例,雙擊后直接展開(kāi),主界面展示了系統(tǒng)和jvm兩大塊內(nèi)容,點(diǎn)擊右下方j(luò)vm參數(shù)和系統(tǒng)屬性可以參考詳細(xì)的參數(shù)信息.

          因?yàn)閂isualVM的插件太多,我這里主要介紹三個(gè)我主要使用幾個(gè):監(jiān)控、線程、Visual GC

          監(jiān)控的主頁(yè)其實(shí)也就是,cpu、內(nèi)存、類(lèi)、線程的圖表

          線程和jconsole功能沒(méi)有太大的區(qū)別

          Visual GC 是常常使用的一個(gè)功能,可以明顯的看到年輕代、老年代的內(nèi)存變化,以及gc頻率、gc的時(shí)間等。

          以上的功能其實(shí)jconsole幾乎也有,VisualVM更全面更直觀一些,另外VisualVM非常多的其它功能,可以分析dump的內(nèi)存快照,dump出來(lái)的線程快照并且進(jìn)行分析等,還有其它很多的插件大家可以去探索

          第三方調(diào)優(yōu)工具

          MAT

          MAT是什么?

          MAT(Memory Analyzer Tool),一個(gè)基于Eclipse的內(nèi)存分析工具,是一個(gè)快速、功能豐富的Java heap分析工具,它可以幫助我們查找內(nèi)存泄漏和減少內(nèi)存消耗。使用內(nèi)存分析工具從眾多的對(duì)象中進(jìn)行分析,快速的計(jì)算出在內(nèi)存中對(duì)象的占用大小,看看是誰(shuí)阻止了垃圾收集器的回收工作,并可以通過(guò)報(bào)表直觀的查看到可能造成這種結(jié)果的對(duì)象。

          通常內(nèi)存泄露分析被認(rèn)為是一件很有難度的工作,一般由團(tuán)隊(duì)中的資深人士進(jìn)行。不過(guò)要介紹的 MAT(Eclipse Memory Analyzer)被認(rèn)為是一個(gè)“傻瓜式“的堆轉(zhuǎn)儲(chǔ)文件分析工具,你只需要輕輕點(diǎn)擊一下鼠標(biāo)就可以生成一個(gè)專(zhuān)業(yè)的分析報(bào)告。和其他內(nèi)存泄露分析工具相比,MAT 的使用非常容易,基本可以實(shí)現(xiàn)一鍵到位,即使是新手也能夠很快上手使用。

          MAT以eclipse 插件的形式來(lái)安裝,具體的安裝過(guò)程就不在描述了,可以利用visualvm或者是 jmap命令生產(chǎn)堆文件,導(dǎo)入eclipse mat中生成分析報(bào)告:

          生產(chǎn)這會(huì)報(bào)表的同時(shí)也會(huì)在dump文件的同級(jí)目錄下生成三份(dump_Top_Consumers.zip、dump_Leak_Suspects.zip、dump_Top_Components.zip)分析結(jié)果的html文件,方便發(fā)送給相關(guān)同事來(lái)查看。

          需要關(guān)注的是下面的Actions、Reports、Step by Step區(qū)域:

          • Histogram:列出內(nèi)存中的對(duì)象,對(duì)象的個(gè)數(shù)以及大小,支持正則表達(dá)式查找,也可以計(jì)算出該類(lèi)所有對(duì)象的retained size

          • Dominator Tree:列出最大的對(duì)象以及其依賴(lài)存活的Object (大小是以Retained Heap為標(biāo)準(zhǔn)排序的)

          • Top Consumers : 通過(guò)圖形列出最大的object

          • duplicate classes :檢測(cè)由多個(gè)類(lèi)裝載器加載的類(lèi)
          • Leak Suspects :內(nèi)存泄漏分析

          • Top Components: 列出大于總堆數(shù)的百分之1的報(bào)表。

          • Component Report:分析對(duì)象屬于同一個(gè)包或者被同一個(gè)類(lèi)加載器加載

          以上只是一個(gè)初級(jí)的介紹,mat還有更強(qiáng)大的使用,比如對(duì)比堆內(nèi)存,在生產(chǎn)環(huán)境中往往為了定位問(wèn)題,每隔幾分鐘dump出一下內(nèi)存快照,隨后在對(duì)比不同時(shí)間的堆內(nèi)存的變化來(lái)發(fā)現(xiàn)問(wèn)題。

          GChisto

          GChisto是一款專(zhuān)業(yè)分析gc日志的工具,可以通過(guò)gc日志來(lái)分析:Minor GC、full gc的時(shí)間、頻率等等,通過(guò)列表、報(bào)表、圖表等不同的形式來(lái)反應(yīng)gc的情況。雖然界面略顯粗糙,但是功能還是不錯(cuò)的。

          配置好本地的jdk環(huán)境之后,雙擊GChisto.jar,在彈出的輸入框中點(diǎn)擊 add 選擇gc.log日志

          • GC Pause Stats:可以查看GC 的次數(shù)、GC的時(shí)間、GC的開(kāi)銷(xiāo)、最大GC時(shí)間和最小GC時(shí)間等,以及相應(yīng)的柱狀圖

          • GC Pause Distribution:查看GC停頓的詳細(xì)分布,x軸表示垃圾收集停頓時(shí)間,y軸表示是停頓次數(shù)。
          • GC Timeline:顯示整個(gè)時(shí)間線上的垃圾收集

          不過(guò)這款工具已經(jīng)不再維護(hù),不能識(shí)別最新jdk的日志文件。

          gcviewer

          GCViewer也是一款分析小工具,用于可視化查看由Sun / Oracle, IBM, HP 和 BEA Java 虛擬機(jī)產(chǎn)生的垃圾收集器的日志,gcviewer個(gè)人感覺(jué)顯示 的界面比較亂沒(méi)有GChisto更專(zhuān)業(yè)一些。

          GC Easy

          這是一個(gè)web工具,在線使用非常方便.

          地址: http://gceasy.io

          進(jìn)入官網(wǎng),講打包好的zip或者gz為后綴的壓縮包上傳,過(guò)一會(huì)就會(huì)拿到分析結(jié)果。

          推薦使用此工具進(jìn)行g(shù)c分析。

          前期jvm系類(lèi)文章回顧:

          • jvm系列(一):java類(lèi)的加載機(jī)制
          • jvm系列(二):JVM內(nèi)存結(jié)構(gòu)
          • jvm系列(三):GC算法 垃圾收集器
          • jvm系列(四):jvm調(diào)優(yōu)-命令篇
          • jvm系列(五):tomcat性能調(diào)優(yōu)和性能監(jiān)控(visualvm)
          • jvm系列(六):jvm調(diào)優(yōu)-從eclipse開(kāi)始

          主站蜘蛛池模板: 精品人体无码一区二区三区| 末成年女AV片一区二区| 色欲AV蜜桃一区二区三| 国产午夜精品一区二区三区漫画| 精品久久久久中文字幕一区| 中文字幕精品一区二区精品| 91大神在线精品视频一区| 精品无人区一区二区三区在线| 国产一区二区三区电影| 日韩免费一区二区三区在线播放 | 中文字幕人妻无码一区二区三区| 色系一区二区三区四区五区| 日本高清成本人视频一区| 无码国产精品一区二区免费vr| eeuss鲁片一区二区三区| 国产一区二区三区在线影院| 中文字幕一区在线观看视频| 日韩十八禁一区二区久久| 久久亚洲日韩精品一区二区三区| 精品无人乱码一区二区三区 | 视频一区二区三区在线观看| 久久久91精品国产一区二区三区| 国产福利无码一区在线| 97se色综合一区二区二区| 制服丝袜一区二区三区| 中文字幕一区二区三区永久| 久久一区不卡中文字幕| 日韩一区二区精品观看| 亚洲色精品VR一区区三区| 亚洲乱码日产一区三区| 中文字幕一区二区三区有限公司 | 无码人妻久久一区二区三区免费| 加勒比精品久久一区二区三区| 3D动漫精品一区二区三区| 亚洲一区爱区精品无码| 久久精品国产一区| 少妇激情一区二区三区视频| 高清一区二区三区日本久| 亚洲AV无码一区二区三区系列| 日本一区二区免费看| 亚洲免费视频一区二区三区|