轶哥

📚 Having fun with AI Agent. Always learning.

    JS推测Base64图片类型
    •   更新:2019-03-04 15:01:42
    •   首发:2019-02-23 22:21:25
    •   源代码
    •   28573

    部分业务中会碰到Base64图片文本。

    例如:

    • 微信JS-SDK - “拍照或从手机相册中选图接口”,wx.chooseImage与wx.request结合获取Base64数据。“获取本地图片接口”,wx.getLocalImgData返回Base64数据。
    • 微信小程序中,图片访问地址受到白名单限制,有可能采用base64数据直接在接口返回。
    • 某种读卡器获取到的图片数据以Base64格式返回。

    如果返回的图片数据中不包含格式前缀(甚至某个微信接口在ios中错误返回image/jgp类型),那就需要推测图片类型。

    Electron 预加载远程页面提升用户体验
    •   更新:2019-01-23 21:00:19
    •   首发:2019-01-23 20:44:32
    •   教程
    •   11203

    使用场景

    Electron 内置 ChromiumNode.js,为了提升用户体验,通常 Electron 封装的前端静态文件存储在客户端本地。但总有一些特殊情况,会使用到部分远程页面。

    比如微信扫码登录,需要远程访问微信的登录站点,获得扫码结果后跳转到我们自己的服务器,然后通知到主进程来关闭对应的渲染进程。目前这个问题有更高效的解决方案,详见博文《无刷新微信扫码登陆解决方案》

    再比如,部分页面还没有实现前后端分离,为了产品尽快上线,也需要嵌入远程URL。

    直接在Electron中访问远程地址是有风险的,控制远程地址切回本地页面也是较为繁琐的。

    以上需求可以使用webview标签实现。这是Electron为我们提供的一个特殊组件,类似于iframe但跟iframe不同,确保了应用的安全性。类似于AndroidioswebviewCrosswalk,Electron中的webview也支持和渲染进程相互通讯。

    PHP 7.3正式版+常见拓展的Docker镜像
    •   更新:2019-01-13 10:04:17
    •   首发:2019-01-06 20:43:12
    •   源代码
    •   6147

    2018年12月6日PHP官方发布了PHP 7.3.0 正式版。恰逢最近在写一个PHP在线练习的网站,特意去翻了一下7.3.0正式版的Docker镜像。

    因为官方镜像只包含了最基本的模块,像pdo_mysqlredis之类的模块并没有包含进去。在hub.docker.com中找到一个相对比较合适的 PHP 7.2 版本的Dockerfilehttps://hub.docker.com/r/phpdocker/phpdocker/),却发现作者将MariaDBRedis ServerNode.js等内容给编进了Image。

    我比较喜欢干净的Docker Image,一个镜像只做一个事情。像MySQLRedis之类的数据库,可以单独启动相应的模块。

    因此我在前人的基础上,移除了MariaDBRedis ServerNode.js并升级PHP版本到7.3.0正式版。

    创业之殇——管理
    •   更新:2019-01-07 19:45:15
    •   首发:2019-01-07 02:14:51
    •   随笔
    •   6319

    最近一年,我一直在研究优秀的项目、写代码、学东西。

    我也不知道为什么突然谈起管理这个话题。

    小公司也需要管理

    有人说“小公司最好没有管理,一定要做减法”。从某种角度上看或许是对的,“跟战略对口的人共事,团队成员一定要那种能够自我驱动的人”。

    这个说法在几年前可能我会非常赞同,但是就现在看来,这话说得太绝对。

    选人要看品质,但是“完全自我驱动的人,和完全需要踢着屁股往前走的人,是两个极端,现实中都是很少的(——格总在人间)”,有自驱动力的人也需要鼓励,也需要管理

    如果有自我驱动力的员工,他的成绩没有得到认可,对他来说他的感觉可能就是:“每天都好像在考试,但是从来不公布分数。总是不知道自己做得好不好,也不知道以后会怎么样...” (节选来自插座学院创始人“何川”文章)。

    他没有安全感,也没有成就感。

    公司如果不能让好员工全心投入到工作中,就留不住好员工

    当你对即将离职的员工说:“你做的很好,你很优秀,我跟其他领导也一直在表扬你”这些话的时候,已经晚了。

    解决 Rancher 2 卸载后无法重新运行的问题
    •   更新:2018-12-07 18:10:07
    •   首发:2018-12-07 18:10:07
    •   教程
    •   7904

    因某些原因需要重装Rancher 2,本想着运行在docker中的系统应该很容易重装。但是重装后出现了很多报错。

    一个Rancher集群需要EtcdControlWorker三个角色都正常运行,该集群才能正常工作。其中Worker代表执行任务的服务器,EtcdControl服务至少部署一个。

    重装后EtcdControl服务均出现报错。

    报错详情

    其中Control则是kube-apiserver容器报Unable to create storage,报错类似:

    记一次服务器启动修复 - /etc/fstab错误至系统无法启动
    •   更新:2018-11-24 23:36:59
    •   首发:2018-11-24 23:35:41
    •   互联网
    •   16079

    利用RK3399作为ARM微型服务器是非常有趣的事情。然而总有一些意外来得令人措手不及。

    事情是这样的。我在服务器中挂载了三块SSD硬盘,其中两块是放于USB硬盘盒,通过Type-C和USB3.0接口连接。

    开机自动挂载

    我们先看一下开机自动挂载方案。

    查询分区的Block ID:

    blkid /dev/sda1
    /dev/sda1: UUID="7f50f85e-783c-4d94-be37-d2c662504e58" TYPE="ext4"
    

    然后把 Block ID 添加到/etc/fstab文件中,这是我的fstab文件:

    UUID=a848d601-91ac-4b5c-8ce3-ffef674f5dd5 /nvme ext4 defaults 0 0
    UUID=88eb8df2-1a8f-4f38-acc9-566deb1c8f40 /tf ext4 defaults 0 0
    UUID=7f50f85e-783c-4d94-be37-d2c662504e58 /ssd0 ext4 defaults 0 0
    UUID=e66307fc-2c33-406b-ae60-b27e2344d02a /ssd1 ext4 defaults 0 0
    

    事情是这样开始的

    我在检查硬盘状态的时候,发现其中一块硬盘没有进行4k对齐。然后我对该硬盘进行了重新分区。结果服务器就卡死了!?

    当我重启服务器后,一直连不上SSH。

    插入HDMI,显示器一片黑暗!

    如果是X86架构的服务器,挂载/etc/fstab失败后会进入高级模式,可以通过接入显示器解决,但是ARM架构(或者说我这块板子)的系统并没有提供这样的后悔药。

    x86系统可以进入光盘Linux,然后挂载硬盘改写/etc/fstab文件。但是我的系统烧写在eMMC,即便能在SD卡刷机,通过SD卡引导系统并挂载eMMC硬盘也是非常有挑战的事情。

    Nginx 解决API跨域问题
    •   更新:2018-11-14 16:29:12
    •   首发:2018-11-14 16:27:47
    •   教程
    •   9423

    利用Nginx可以最简单且高效解决跨域问题。

    跨域是前后端分离开发中非常常见的问题。这个问题网上已经有非常多的答案,但大部分是编程框架里面添加CORS头。但无论用什么Web框架,现已很难离开Nginx。因此直接在Nginx中处理跨域问题有得天独厚的优势,可以将OPTIONS请求拦截在API服务之前,节约服务器开销。

    简单说,跨域分为简单跨域复杂跨域

    简单跨域不会发送OPTIONS请求。

    复杂跨域会发送一个预检查OPTIONS请求。

    复杂跨域的条件是:

    1. 非GET、HEAD、POST请求。
    2. POST请求的Content-Type不是application/x-www-form-urlencoded, multipart/form-data, 或text/plain
    3. 添加了自定义header,例如Token

    跨域请求浏览器会在Headers中添加Origin,通常情况下不允许用户修改其值。

      上一页 下一页