A Wand Makes Your Ideas Come True

0%

如果想用Rust去开发大型项目,特别是框架级别的项目,那么Rust的过程宏(proc-macro)机制肯定是一个必须掌握的技能。极客幼稚园公众号从本期开始,将进行一个系列连载,以文字 + 视频的形式,介绍过程宏的相关知识点,并通过几个项目实战,手把手书写几种不同类型的过程宏。我的视频将会上传至B站,文字版本与视频版本内容会大致相符,但文字版本对原理的讲解会更加清晰,大家看到的是一个最终【正确】的版本,而视频版本对于编写和调试过程的展示更加友好,大家可以看到编写一个过程宏的整个过程中是如何一步步阅读文档、踩坑的。另外,这一系列文章也是我本人近期在学习过程宏的过程中边学边写的,可能有很多野路子,如果大家有更好的实现方式或者编码方式,欢迎与我交流讨论。

视频教程在这里,完整文字版本请点击视频下方的【阅读原文】

阅读全文 »

先写个算是开篇语的东西吧。从去年起就开始关注rustpython这个项目,也一直想写一系列长篇文章来深入分析这个项目。这样一直拖了差不多一年了,总想着先把整个项目看完再书写一套有体系有章法的文章,但事实证明碎片的时间还是不足以让我把整个项目看完。因此,在今天决定,不管什么体系了,就按照随笔来写吧,看到啥写啥。正好之前因为追求高质量的文章,这个博客之前几个月才更新一次,所以这也算是一个尝试,当然,龟速更新的文章我也会继续写的。如果你看到这系列文章感觉还有点意思,可以把我的网站加收藏哈~ http://blog.ideawand.com 。我还有一个微信公众号叫做【极客幼稚园】,大家也可以关注一下,这样有什么更新大家也可以看到。

本系列随笔的第一篇,基本算是随机挑选的,我们来看看个python中__getattribute__这个魔术方法在rustpython中有关的实现吧。

阅读全文 »

在上一篇文章中,我们从历史发展的角度介绍了Console、Terminal、TTY这些概念,并且给大家展示了各种上古时代的显示设备,特别是使用印章和打印纸形式作为输出的设备。这一篇文章中,我们将重点聊聊有了荧光显示器之后,输出设备与操作系统之间的关系,例如如何显示彩色的文字。这是本系列的第二篇文章,后续应该还会有几篇文章。欢迎大家关注我的公众号【极客幼稚园】来获取最新的推送,当然也可以访问我的个人主页http://blog.ideawand.com。

阅读全文 »

Terminal(终端)和Console(控制台)这两个词,在使用Linux操作系统或者查阅资料的时候,经常会看到。但它们究竟是什么呢?笔者最近在捣鼓一台Linux系统的笔记本,并对其做键盘键位的映射,使其能够符合Mac操作系统下的按键习惯,在这个过程中,顺道深入了解了一下Terminal和Console的区别。关于键位映射,我会在后面再写一系列文章来介绍背后的原理以及实战,这里先卖个关子。本篇文章主要带领大家回顾一下计算机的发展历史,随着历史的发展,看看Terminal、Console这些概念是如何演进的。

阅读全文 »

本文记录了笔者在工作中遇到一个真实场景,在堆内存超过16G,堆对象过亿情况下,以真实案例带领读者感受不同参数设置情况下Go的GC性能变化。

阅读全文 »

背景介绍

tail命令作为linux下最常用的命令之一,大家肯定不陌生,tail -f用法更是排查问题查看日志的利器。很多日志收集工具,比如logstash、filebeat、flume等,也都能实现tail -f的类似功能,从文件末尾不断读取新的内容,并发送到指定的收集服务集群。那么,要实现这样一个工具,我们要用到哪些与文件操作有关的知识呢?

笔者曾经遇到这样的场景,公司采用zipkin来追踪各个系统之间的调用关系,每个子系统产生自己的日志并落盘,由每台服务器上部署的flume来收集日志并收集上报。

那么就有了一个问题,线上环境有公司的整套日志系统,而开发环境比较简陋,并没有部署收集工具。考虑到flume和logstash都是java系,有点重,而filebeat有个坑就是上报数据它一定会自作主张给外面套上一层结构,导致收集集群无法识别,于是笔者就想,能不能用python脚本,争取在50行代码之内,实现一个日志收集上报工具呢?

我们要解决如下几个问题:

  • 如何快速定位到文件最后的n行?
  • 日志文件可能发生切割,如何保证日志切割后还能正确读取最新的文件?
  • 如何高效的尽快检测到文件写入?
阅读全文 »

作为一名经常在Linux下从事开发的工程师来说,应该很多人都遇到过找不到so库的问题,特别是在一些涉及到C/C++依赖的项目中。在本公众号之前文章中介绍的使用Cython加速Python程序的例子中,Python这类解释型语言也会调用一些C/C++编译出来的so库。为了让大家能够面对例如下面这种错误时不再手足无措,我整理了这篇文章。

1
error while loading shared libraries: libxxx.so.2: cannot open shared object file: No such file or directory 
阅读全文 »

本文介绍了如何在不使用Minikube的情况下,在一台机器上搭建支持GPU的k8s测试环境。为什么要这么干呢——因为Minikube对GPU的支持还不完善,而手头正好在做的是一个使用GPU的机器学习项目。为了踩使用k8s编排机器学习微服务的坑,需要搭建一个本地的单机测试环境。此外,在写本篇博客时,即使是Google英文站也很少能搜索到不使用Minikube进行单机测试环境部署的文章,因此,在摸爬滚打一阵后,我决定写下此文……

阅读全文 »