草庐IT

手撸图片压缩工具

前一段时间因为要将一些生活照片传给别人,由于是相机拍的单张图片普遍在10M以上,于是就想着把这些大尺寸图片简单进行下压缩 上百度找了一圈图片压缩软件,发现要不是不好用,要不是就得付费批量压缩又或者付费去除水印。功能付费我支持,只是一张图片收费一次,图片多了,感觉不合适吧。本着自己动手丰衣足食原则。花了两天时间简单搞了一个压缩工具网站。 目前由于功能比较简单,没有进行前后端拆分,主要技术点:SpringBoot、WebSocket、webjars、Vue、Element-UI、axios、jszip,核心压缩库是 Thumbnailator 提供压缩支持。源代码已经在 码云  公开。欢迎各位大佬

手撸图片压缩工具

前一段时间因为要将一些生活照片传给别人,由于是相机拍的单张图片普遍在10M以上,于是就想着把这些大尺寸图片简单进行下压缩 上百度找了一圈图片压缩软件,发现要不是不好用,要不是就得付费批量压缩又或者付费去除水印。功能付费我支持,只是一张图片收费一次,图片多了,感觉不合适吧。本着自己动手丰衣足食原则。花了两天时间简单搞了一个压缩工具网站。 目前由于功能比较简单,没有进行前后端拆分,主要技术点:SpringBoot、WebSocket、webjars、Vue、Element-UI、axios、jszip,核心压缩库是 Thumbnailator 提供压缩支持。源代码已经在 码云  公开。欢迎各位大佬

Golang:手撸一个支持六个级别的日志库

Golang标准日志库提供的日志输出方法有Print、Fatal、Panic等,没有常见的Debug、Info、Error等日志级别,用起来不太顺手。这篇文章就来手撸一个自己的日志库,可以记录不同级别的日志。其实对于追求简单来说,Golang标准日志库的三个输出方法也够用了,理解起来也很容易:Print用于记录一个普通的程序日志,开发者想记点什么都可以。Fatal用于记录一个导致程序崩溃的日志,并会退出程序。Panic用于记录一个异常日志,并触发panic。不过对于用惯了Debug、Info、Error的人来说,还是有点不习惯;对于想更细致的区分日志级别的需求,标准日志库还提供了一个通用的Ou

Golang:手撸一个支持六个级别的日志库

Golang标准日志库提供的日志输出方法有Print、Fatal、Panic等,没有常见的Debug、Info、Error等日志级别,用起来不太顺手。这篇文章就来手撸一个自己的日志库,可以记录不同级别的日志。其实对于追求简单来说,Golang标准日志库的三个输出方法也够用了,理解起来也很容易:Print用于记录一个普通的程序日志,开发者想记点什么都可以。Fatal用于记录一个导致程序崩溃的日志,并会退出程序。Panic用于记录一个异常日志,并触发panic。不过对于用惯了Debug、Info、Error的人来说,还是有点不习惯;对于想更细致的区分日志级别的需求,标准日志库还提供了一个通用的Ou

带你阅读Naive Ui Admin后台管理源码,并手撸JS版本

NaiveUiAdmin是一个基于Vue3.0、Vite、NaiveUI、TypeScript的中后台解决方案,它使用了最新的前端技术栈,并提炼了典型的业务模型,页面,包括二次封装组件、动态菜单、权限校验、粒子化权限控制等功能,它可以帮助你快速搭建企业级中后台项目,相信不管是从新技术使用还是其他方面,都能帮助到你。项目地址:https://github.com/jekip/naive-ui-admin本次使用JS+Vue实现NaiveUiAdmin,带你阅读项目的流程。项目搭建本次项目搭建使用Vue3提供的脚手架工具,使用UI方式搭建项目基础框架。安装vue/cli-initsudonpmin

带你阅读Naive Ui Admin后台管理源码,并手撸JS版本

NaiveUiAdmin是一个基于Vue3.0、Vite、NaiveUI、TypeScript的中后台解决方案,它使用了最新的前端技术栈,并提炼了典型的业务模型,页面,包括二次封装组件、动态菜单、权限校验、粒子化权限控制等功能,它可以帮助你快速搭建企业级中后台项目,相信不管是从新技术使用还是其他方面,都能帮助到你。项目地址:https://github.com/jekip/naive-ui-admin本次使用JS+Vue实现NaiveUiAdmin,带你阅读项目的流程。项目搭建本次项目搭建使用Vue3提供的脚手架工具,使用UI方式搭建项目基础框架。安装vue/cli-initsudonpmin

手撸一个Android经典线程通信框架:Handler

前言2022年已过1/4,时间过的真是快。近些年大Android的发展也很是迅速,尤其是遵循MVVM或者MVI架构下,使用Jetpack+Kotlin+Corroutine+Flow的组合,大大提升了Android应用的开发效率。然而,类似的效率的提升往往是通过层层封装,隐藏底层原理,简化调用,从而达到降低开发的上手门槛目的的。作为一个有品位的开发者,又怎能满足于只了解上层的API调用。本文我们就来通过实例来试着聊一聊Android经典线程通信框架Handler的基本原理。目的通过实现一个简单的Handler框架,试图解释其底层的工作原理。背景知识线程间通信即不同线程之间交换信息,Java中常

手撸一个Android经典线程通信框架:Handler

前言2022年已过1/4,时间过的真是快。近些年大Android的发展也很是迅速,尤其是遵循MVVM或者MVI架构下,使用Jetpack+Kotlin+Corroutine+Flow的组合,大大提升了Android应用的开发效率。然而,类似的效率的提升往往是通过层层封装,隐藏底层原理,简化调用,从而达到降低开发的上手门槛目的的。作为一个有品位的开发者,又怎能满足于只了解上层的API调用。本文我们就来通过实例来试着聊一聊Android经典线程通信框架Handler的基本原理。目的通过实现一个简单的Handler框架,试图解释其底层的工作原理。背景知识线程间通信即不同线程之间交换信息,Java中常
12