三月沙


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 我的书单

  • 技术编年史

用一个简易的 web chat 说说 Python、Golang、Nodejs 的异步

发表于 Jun 24 2017 | 分类于 技术

在 web 编程中,经常有业务需要在处理请求时做异步操作,比如耗时太长的 IO 操作,等异步执行完成之后再结束请求返回 response 到 client,在这个过程中 client 和 server 一直保持着连接不释放,也就是当前请求在从 client 的角度看一直处于阻塞状态,直到请求结束。

之所以称之为异步,最重要的特征就是 server 可以继续处理其他 request 而不被阻塞。

不同语言在处理这种异步场景的方式是截然不同的,常见的处理策略有:消息共享(异步任务队列)、多线程多进程、event(linux signals,nodejs event loop)、协程 coroutine(返回 Future、Promise 代表程序执行的未来状态),其中 coroutine 是应用最广泛的,这也是今天此篇的主题。

阅读全文 »

理解 Go nil

发表于 Jun 11 2017 | 分类于 golang
golang 中的 nil 是不同于其他语言的,为了更好的理解 nil,在此我将尝试一步一步揭示 nil 在 golang 中的一些操作和现象。 1. nil 是不能比较的code-1 Play 123456789package mainimport ( "fmt")func main() ...
阅读全文 »

sqlalchemy session 执行 delete 时 synchronize_session 策略

发表于 Jun 7 2017 | 分类于 SQLAlchemy
1session.query(Tag).filter(Tag.id.in_([1,2,3,4])).delete(synchronize_session='evaluate') sqlalchemy 利用 session 执行 delete 时有一个 synchronize_se ...
阅读全文 »

开发中常用的 CSS framework(2015年至今)

发表于 May 25 2017 | 分类于 css

自 bootstrap CSS framework 已经成了开发者必不可少的技术选型了,随着移动端的不断发展和日趋复杂化的 UI 交互模式的需要,适应各种场景的 CSS framework 也层出不穷,在此盘点一下个人日常开发时选择的几种 CSS framework,排名不分先后。

purecss

优点

简单实用响应式,提供了 grid 布局、form、menu、 button、table 几种常用组件,无 JavaScript。

适用场景

页面所需组件比较少,适用于只需要比较简单的 form 以及很基础的交互,中大型项目不适合,缺 JavaScript,需要借助第三方 JavaScript 或者自己实现,开发效率差。

  • https://git-star.com/

bulma

龙珠布尔玛的英文名字?好像是。

优点

mobile first、语义化、模块化、html 结构简洁明确,提供了大量基础性组件,甚至是一般做官方网站使用的 banner、hexo 都有,可以快速构建官网等非常常用的网站样式。

提供了一些非常基础的工具化 class,比如 modifiers 可以直接修改内边距、外边距、边框都常需要改动的地方,非常实用。

开发者友好。

阅读全文 »

如果 SQLAlchemy model 自增主键等于 0

发表于 May 25 2017 | 分类于 SQLAlchemy

SQLAlchemy 使用 session 生成新的数据根据主键的不同大致有以下几种情况,其中主键是 0 最为特殊。

测试环境

  • SQLAlchemy 1.0.9
  • mysql 5.6.27
  • pythonn 2.7
阅读全文 »

无处不在的架构

发表于 May 3 2017 | 分类于 程序人生

概念

Architecture

Architecture is both the process and the product of planning, designing, and constructing buildings and other physical structures. —— From wiki https://en.wikipedia.org/wiki/Architecture。

Architecture 意在计划、设计、构建建筑物的过程。

Software architecture

Software architecture refers to the high level structures of a software system, the discipline of creating such structures, and the documentation of these structures…..The architecture of a software system is a metaphor, analogous to the architecture of a building.—— From wiki https://en.wikipedia.org/wiki/Software_architecture

software architecture 和构建一座实体建筑是非常相似的,都具有计划、设计、构建的过程。

阅读全文 »

创业三年,使用 mongodb 的实践教训

发表于 Feb 16 2017 | 分类于 mongodb

在生产环境中使用 mongodb 始于 2012 年左右,从最初的 master-slave 模式到后来的 master-replication,到评估 mongodb-sharding 并放弃在生产环境中使用,使用 mongodb 作为基础数据库已经服务了上亿用户。在 4 年的 mongodb 生产环境使用当中,踩了很多坑也走了不少弯路,在此记录,与君共享。

No schema 并不代表没有一致性

mongodb 是 nosql 数据库,强调 schema 的灵活性和强大的集群功能,以及牺牲事务带来的巨大性能提升。如果只是用 mongodb 记录日志,一致性并不是很重要,相反如果是关键性业务,鉴于 schema 极强的灵活性,经常会造成 collection 数据结构被变更而且不易察觉,表现的结果是应用程序常会出现诡异而无法深入跟踪原因的 bug 和异常。业务越庞大,这样的改变越是灾难性的。

设计之初就对一致性做出非常严格的校验和控制,好消息是 mongodb 3.2 开始已经从数据库层面支持对 collection 结构的校验。每次表结构调整,都要对历史数据进行相应的变更。

阅读全文 »

tornado 中的异步调用模式

发表于 Feb 8 2017 | 分类于 tornado

fundamental concepts

同步

调用者等待调用结果的返回

异步

调用者不等待调用结果的返回,而是通过间隔轮询、通知等方式得知结果

阻塞

调用方式影响后续指令的执行

非阻塞

调用方式不影响后续指令的执行


一般来说,阻塞是绝对的,非阻塞则是相对的,因为任何指令或调用的执行都要占用 CPU 周期,或网络,或 IO。非阻塞只是说调用或者资源消耗不影响后续逻辑执行,他们经得起等待。非阻塞往往和异步一起出现。

tornado 是一个异步非阻塞 httpserver,同时也是一个 web framework。

Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user。

在 tornado 中异步和非阻塞是通过 ioloop 和 Future 实现的,Future 是借助 python 的协程来实现非阻塞调用。tornado 提供了不同的异步调用形式来适配不同的调用场景,本文的目的就是为了说明不同形式是如何使用的以及它们的差别。

为了演示方便,这里使用了一个公共模块 util.py 来提供 ioloop 的启动和销毁,下文不做特殊说明皆是如此。

阅读全文 »

理解 semantic-ui grid 的使用

发表于 Feb 5 2017 | 分类于 semantic-ui

semantic-ui 是一套类似于 bootstrap 的 ui framework,相比 bootstrap 有如下优点:

  • 组件采用语义化的组织方式,容易理解,容易记忆
  • 组件库非常丰富,几乎不需要引入第三方的组件,统一性强
  • 由于采用语义化的方式命名,所有组件都有自己的命名空间,相互不受干扰,侵入性弱,对自定义 css 干扰小,bootstrap 则改写了很多元素的默认样式,复写困难
  • 自定义容易,semantic ui 的源码中各个组件相互独立,依赖清晰,自定义方便

fundamental concepts

  • container
    A fixed width container 具有固定宽度的容器
  • grid
    网格
  • column
    网格的列
  • row
    网格的行

固定宽度居中布局

semantic ui 提供容器 container 来快速实现固定宽度居中,使用 container 不需要任何 grid

1
2
3
4
5
<div class="ui container">
<div class="c">
content
</div>
</div>

如果需要对一段文本进行固定居中,semantic ui 提供了 text container

阅读全文 »

用 markdown 自定义排版公众号文章

发表于 Nov 18 2016 | 分类于 程序人生

可能吧的阿禅的之前写了一篇文章介绍了他是如何排版公众号文章的:思路就是用 markdown 写作,然后使用专门的工具导出为 html 文件,最后把自定义的样式应用到导出的文件,复制粘贴最终的内容到微信公众号。

在这篇文章中,我将一步步说明如何把阿禅的思路应用到时间中。

选择一款舒适的 markdown 写作工具

markdown 的写作工具有很多,这里我只介绍两款 mac 下的软件,非常好用,而且免费开源

  • Typora
  • macdown
阅读全文 »
1…11121314
三月沙

三月沙

135 日志
28 分类
113 标签
GitHub
© 2024 三月沙
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.2