JNI 局部引用释放
前言
有过 JNI 开发经历的都知道,在创建局部引用之后要释放。可是我们经常却直接返回 env->NewStringUTF("") 到 Java 没有释放,并且不会有问题,本文就来研究一下局部引用的释放问题。
有过 JNI 开发经历的都知道,在创建局部引用之后要释放。可是我们经常却直接返回 env->NewStringUTF("") 到 Java 没有释放,并且不会有问题,本文就来研究一下局部引用的释放问题。
市面上那么多输入法为什么还要折腾一个新的输入法?
许多年前有爆出输入法泄漏隐私的问题,一些数据没有经过加密传输。
这些想想都让人后怕。经过一段时间的摸索,逐步上手了 RIME ,因为 RIME 并不是那么容易上手,所以我把摸索的一些经验写成文章,希望能帮助到想使用 RIME 的伙伴。
最近在学习 Rust , Rust 中也有引用,这让我有点好奇 Rust 的引用是不是与 C++ 一样,于是便有了此文。
在日常开发中,经常需要调试服务端返回的数据,我们常用的有 Postman 、 PostWoman 等等。
但是我习惯了在 Emacs 中做完这一切,不想去安装其他软件,于是在 Emacs 中也找到了 restclient 这个插件,它能满足我的需求。
所以今天要来分享一下 restclient 的使用。
在上一篇文章go实现文件上传/下载服务中讲到了自己实现一个文件上传服务,然而我发现gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang).也默认提供了文件上传服务。
本文就来看看 Gin 中的文件上传服务。
|
|
我们创建一个 ginupload 的目录用来存放代码,并且使用 go mod 来管理依赖。
在开发的过程中,难免会碰到上传/下载文件的场景。如果这个功能服务端没开发好,就没法进行测试。
所以每次都要自己先实现一遍,本文使用 go 写了一个简单的文件上传和下载服务。
以后再碰到这种场景的时候就可以快速进行开发。
继上一篇用 Rust 开发 iOS 开发折腾之后,我又折腾起 Android 了。
最开始我是先从 Android 上下手的,不过一直没成功,直到最近才成功了。
本文默认你已经把 Rust 安装好了。注意需要使用 stable channel ,我之前使用的是 nightly 所以一直失败。
nightly channel 会报 dl_iterate_phdr can't find 错误,这个错误一直误导了我,我一直以为是链接上的问题,所以折腾了很久。
直到我换了一台电脑试了一下,居然成功了,才发现使用的 channel 是不一样的。
Rust 是近几年特别火的语言,之前学过几次,每次学完之后就不了了之,没有实际用到项目中。
所以每次学习的时候都感觉像是最熟悉的陌生人,所以最近想要在移动端进行实战,于是开始了折腾之旅,这篇就是 Rust 在 iOS 上的探索。
今天来说一下 CocoaPods 的安装。
CocoaPods 是用来管理 iOS 开发中用到的第三方库,类似安卓中的 Gradle 、 Maven 的工具。
在 iOS 的开发中会经常用到,对我这样的 iOS 新手,一段时间不用,不免遗忘,所以用来记录一下,以后查找起来方便。
最近在研究 Cronet 网络库,涉及到 Android 和 iOS ,由于对 OC 不怎么熟悉,所以在使用的时候碰到了 C++ 与 OC 互相调用的问题,于是便有了此文。
最近在下载 chromium 源码,下载完之后需要切换到指定的分支,这时候使用 git fetch 进行切换,但是不是一次就能成功。
所以需要不断执行 git fetch ,但是随着执行的次数增多,我发现磁盘的空间却越来越少。
也就是 git fetch 失败后占用了磁盘空间并没有释放。
在查找资料后发现使用 git prune 可以解决这个问题。
git prune 会删除没有使用的 hash 文件,由于我们这边 fetch 失败了,所以这些文件是没有使用的。
执行之后磁盘瞬间释放70G空间。
Cronet 是 Chromium 浏览器中用于网络请求的库,支持 HTTP1/2 、 SPDY 、 QUIC 等协议。并且还支持移动端。
需要注意的是编译 Android 需要在 Linux 下进行,并且只支持 Ubuntu 和 Debian 的发行版,其它的不支持。
gdb 是 GNU 下的一款调试器,支持常见的语言,例如 C/C++ 、 Go 、 Rust 等等。
调试器对我们开发程序的时候有非常大的帮助,是每一个开发都需要学会的调试技能。
今天来了解一下 gdb 的使用。
在Emacs中使用Forge管理GitHub Pull Request中,我聊到了在 Emacs 中使用 Forge 管理 GitHub Pull Request ,今天来讲一讲怎么管理 GitHub Issue 。
使用之前需要配置 GitHub 相关信息,在Emacs中使用Forge管理GitHub Pull Request中有说过,不了解的可以前往查看,这里不再赘述。
使用 GitHub 与其他开发者合作需要频繁的创建 Pull Request 或者 Review 别人提交的 Pull Request 。
自从我使用 Emacs 来管理 Git 仓库后一直用的很舒服,但是这也仅限于自己的仓库。创建 Pull Reqeust 也是用的网页,这样的操作体验就不一致了,需要在 Emacs 和浏览器来回切换。
于是我搜索一圈发现在 Emacs 里可以使用 Forge 来创建 Pull Request ,所以本文会描述如何在 Emacs 中使用 Forge 来管理 GitHub Pull Request 。
最近在调试的时候使用 cout 打印 uint8_t 类型数据,结果却什么都没有打印出来,一直以为程序有问题,调试了半天发现 cout 会使用 char 类型来打印 uint8_t 。
今天来聊一聊单一职责原则
有两个端,移动端和服务端,起先设计是有两个接口,一个接口用于查询,一个用于更新。
客户端要求在更新接口在没有查询到对应数据的时候可以把数据更新到数据库。但是服务端却没有做这个功能,他把这个功能做到了查询接口,也就是要想更新一条新的数据要先调用查询接口。
在使用 RTags 预处理 C/C++这篇文章中提到了 rtags 的使用,于是我在 Linux 中使用的时候碰到了安装的问题并顺利解决了。
然后又在 Mac 上进行了尝试,也碰到了问题,记录一下,希望能帮助需要的人。
使用 C/C++ 开发的项目,在进行测试的时候,要么自己写一些简单的例子进行测试,要么使用第三方框架。自己写简单的例子对于大项目来说效率就不高,而且输出的结果就不是很专业,不能得到一个测试报告。
所以我们有必要选择一个比较好的测试框架来对代码进行测试,今天要介绍的就是谷歌的测试框架 google/googletest: GoogleTest - Google Testing and Mocking Framework