软件技术学习笔记

个人博客,记录软件技术与程序员的点点滴滴。

Emscripten docker构建WebAssembly (C++)

C++的构建环境比别的计算机语言要复杂得多,一切从头开始安装是最麻烦的,比如:安装编译器、第三方库等。在容器时代,使用已准备好的Docker镜像就省事多了。在开发WebAssembly C++时,可直接使用Emscripten SDK docker镜像。虽然C++ WebAssembly的构建比较复杂,但是,其生成的目标文件(*.wasm)比GoLang的要小很多,更适合于Web网络传输。

示例代码,见: hello-web-assembly-cpp

继续阅读→

Hybrid App消息桥接(Android)

以前写过一篇 Hybrid App体验(Android),但是未动手验证Native和Web之间的双向消息通信。今天起床之后,想在Web中启动Android相机与振动通知玩玩,于是开始实现双向的通信,技术特点还是JSBridge。

比较坑的是Android权限管理,几个Android版本还不一样。新版本要调用相机拍照与保存,需要动态申请权限,还需要提供Provider才能给Intent传递文件路径,同时,想在getExternalFilesDir()之外创建文件困难重重。最后,为了避免消耗时间太大,只能放弃保存功能。也许在当前Activity中获取到相机数据之后,自己保存到JPG文件还更加方便。

代码仓库,见 android-webview-1

继续阅读→

我为什么选择裸辞

每个人在不同阶段的驱动力是不一样的,有时是驱动力2.0,有时是驱动力3.0。我长久的目标是成为一名软件专家,虽然不要求是行业内的,但至少能够成为部门内的。以我当时的绩效,刚提升职级,又该到加薪与配股的时候了。但是,驱动力2.0并未满足我的真正需求,所以选择离职。

继续阅读→

我们的软件“士兵”为何临阵脱逃

在软件开发领域,人员的离职或转岗是经常看到的。有的团队每年离职/转岗率10%~20%,有的团队则高达50%。人员的离职,对团队有以下冲击:

  1. 项目进度受到冲击,只能拆东墙补西墙。
  2. 业务增长放慢或缩减,收益减少。
  3. 在职人员的负担加重,心里也会有想法,工作效率降低,可能引发更多的人员离职。
  4. 新成员培养成本。寻找合适的新成员并不容易,需要一定的周期;新成员入项需要老员工的指导;新成员需过一段时间才能独立开展工作。

我们从驱动力、软件架构、生产效率、成本、收益、压力与成长等几个方面来看这个问题,再看看一些应对之策,如何给公司创造长期的、更大的价值。

继续阅读→

正确理解Less is Better

在编码时,我们一般都遵守“Less is Better”教条。按照代码行数,大部分时候也是对的。但是,对整个系统而言,并不是所有的场景都满足“Less is Better”。敏捷宣言中的“简单设计”不是没有设计,编码之前进行适当的软件架构设计是非常有必要的。

继续阅读→

浅谈桌面应用与Electron

我从开始学习编程到现在,大部分都是在做与用户界面有关的桌面应用或Web应用,也开发过少量的后端项目。我的第一份工作就是桌面应用开发,工作的时间最长,主要用到C++/JS/HTML/CSS。

桌面应用有它自己的优点:本地数据或文件处理,传感器数据采集,响应快,不需在线,无服务器压力等。日常工作中,我们用得最多的软件就是桌面应用。目前,Electron在开发跨平台的桌面应用很方便,但在性能方面它没有优势。在项目技术选型时,我们需要做更多的考虑。

继续阅读→

React混合SSR与SPA片段

单页面应用(SPA)在处理大数据与强交互的方面有优势,但是其缺点是首屏加载比较慢、很难进行搜索引擎优化(SEO)。在工具软件上,选择SPA是正确的。但是,以静态内容展现为主的网站,如果选择SPA,给用户的体验不好。前端使用React框架时,可以选择服务端渲染(SSR)的方式解决该问题。

大部分网站,即使是以静态内容展现为主的网站,其中也包含一部分动态内容与交互。本文就演示:使用React服务端渲染的同时,也在前端动态渲染一些组件(为了让只搞过SPA的同学更容易理解,暂时称之为“SPA片段”),目的是完成动静分离、页面骨架快速显示。同时,“SPA片段”这种方法,可以用来逐渐替换“祖传”的老代码到React组件。导出静态路由之后,还可以使用SSR来生成页面缓存或静态页面。

继续阅读→

React Native Android

以前使用Expo玩过React Native,只需把Expo APP安装,再扫二维码就可以运行自己编写的React Native程序,上手速度很快。但是,自己本来就想开发独立的Native APP,还需要寄生在Expo上才能运行,总感觉有点不爽。今天就使用React Native CLI + Android Studio自己构建APK的方式玩玩。

继续阅读→

Hybrid App体验(Android)

很早以前就听说过Hybrid App(混合模式移动应用),也大概了解它使用哪些技术,今天自己动手体验一把。大厂一般都是自己编译Chromium / Blink,还添加自己的定制。没有那个实力的话就选择别人提供好的SDK,比如腾讯浏览服务X5。我本次主要为了体验技术应用,不需要考虑不同Android版本的差异,就使用Android SDK中自带的WebView。

继续阅读→