====================
== Hi, I'm Vimiix ==
====================
Get hands dirty.

《算法图解》读书笔记1-二分和大O

algorithms Linux

算法是一组完成任务的指令

为什么要学习算法

这次是我第二次读《算法图解》,当我第一次看这本书的时候,我更兴奋于书中有什么内容,迫不及待的去过内容,学习那些算法概念。但当我第二次准备开始读这本书的时候,我脑海中出现的了一个问题:“为什么要学习算法?”,这个问题也许会有人和我一样,之前根本没有好好的去思考,只是知道,作为一个程序员我应该学习算法。当然,能够有这个觉悟,说明我们还算是个合格的程序员。

但是,不妨认真思考一下,为什么要学习算法?算法应该怎么学?

Read more...

TLPI笔记—深入文件I/O模型

tlpi Linux note I/O

原子操作和竞争操作

所有的系统调用都是以原子操作方式执行的。之所以这么说,是指内核保证了某系统调用中的所有步骤会作为地理操作而一次性加以执行,期间不会被其他进程或线程中断。原子性规避了竞争状态(race condition),竞争状态指:操作共享资源的两个进程(或线程)其结果取决于一个无法预期的顺序,即这些进程或线程获得 CPU 使用权的先后相对顺序。

Read more...

TLPI笔记—通用文件I/O模型

tlpi Linux note I/O

文件描述符

所有执行 I/O 操作的系统调用都是以文件描述符,一个非负整数来指代打开的文件。文件描述符用以表示所有类型的已打开的文件,包括管道(pipe)、FIFO、socket、终端、设备和普通文件。每个进程都各自独立维护着一张文件描述符表。

标准文件描述符

文件描述符用途POSIX 名称stdio 流
0标准输入STDIN_FILENOstdin
1标准输出STDOUT_FILENOstdout
2标准错误STDERR_FILENOstderr
Read more...

TPLI笔记—linux/unix标准和历史

tlpi Linux note POSIX

前言

最近开始阅读《Linux/Unix 系统编程手册》 这本书,重新系统的学习一下 linux 系统编程方面的知识。

在阅读完第一章《历史和标准》以后,对于很多标准名词都见过,但是对于他们之间的发展历程很是模糊,通读这部分内容后豁然开朗,尤其本章最后总结部分,对于前面的概况的既简练还没有遗漏。不禁在书上用笔写下:“牛 B 总结,一气呵成”

方便以后不去翻书回顾,特花点时间摘录至此。

Read more...

[python]记录关于websocket的原理和使用

Python websocket note django

什么是 websocket

WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

Websocket 是一个持久化的协议,相对于 HTTP 这种非持久的协议来说的。

举个例子:

HTTP 的生命周期通过 Request 来界定,也就是发送一次 Request,收到一次 Response ,那么在 HTTP1.0 中,这次 HTTP 请求就结束了

在 HTTP1.1 中进行了改进,使得有一个 keep-alive,也就是说,在一个 HTTP 连接中,可以发送多个 Request,接收多个 Response。但是请记住 Request = Response , 在 HTTP 中永远是这样,也就是说一个 request 只能有一个 response。而且这个 response 也是被动的,不能主动发起。

而对于 websocket 来说,在 HTTP 的握手基础上建立起链接,服务器端可以主动的向客户端发送数据。

Read more...

[笔记]git push卡主不动问题记录:Git push hangs on POST git-receive-pack

git note solution

问题

昨天完成了《一个完整的 Django 入门指南》 - 第 6 部分的翻译工作,本地在翻译的过程中,存储了十几张原文中的 png 格式的插图。

git push 提交 github 仓库的时候,终端显示写成功 100%, 但是一直卡在了下面这里没有推送成功:

Counting objects: 21, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (21/21), done.
Writing objects: 100% (21/21), 1018.52 KiB | 17.87 MiB/s, done.
Total 21 (delta 7), reused 0 (delta 0)
# 卡在这里
Read more...

[Python]使用pipenv管理python虚拟环境

pipenv autoenv Python virtualenv

前言

近期的项目中,我开始尝试着从 virtualenv 管理 python 虚拟环境,切换到用 pipenv 来管理。

经过一段时间的使用,着实觉得 pipenv 使用的更加顺手,更加的便捷。这当然也延续了 Kenneth 大神一贯的项目作风– For Humans

再配合上 autoenv(自动激活虚拟环境的工具),更加的 Perfect!

Read more...

[Python]Uvicorn初体验

uvicorn web Python asyncio

uvicorn 简介

uvicorn是一个基于asyncio开发的一个轻量级高效的 web 服务器框架。

官网:http://www.uvicorn.org

uvicorn 设计的初衷是想要实现两个目标:

它目前支持httpwebsocketsPub/Sub 广播,并且可以扩展到其他协议和消息类型。

Read more...

[算法笔记]动态规划之最长公共子串和最长公共子序列

动态规划 algorithms Python

本文是《算法图解》笔记

应用场景

一切脱离实际应用场景的算法都是耍流氓!

  • 生物学家根据最长公共序列来确定 DNA 链的相似性,进而判断两种动物或疾病有多相似。最长公共序列还被用来寻找多发性硬化症治疗方案。
  • 源代码管理中,git diff指令,可以查找出编辑前后文件的差异,这是基于动态规划实现的。
  • 编辑距离(levenshtein distance),判断字符串的相似程度,也是基于动态规划计算。可以通过这个技术从拼写检查到判断用户上传的资料是否是盗版。(这样看来,我猜想大学论文查重应该也是基于动态规划算法:P
  • Microsoft Word 等软件中具有断字功能,使用动态规划可以确定什么地方断字以确保行长一致。
Read more...

[Jenkins]Error:403 No valid crumb was included in the request

CI ERROR jenkins csrf

错误备忘

配置 jenkins 的时候,一直报这个错,是因为 jenkins 默认安全设置里面开启了 防止款站点请求伪造

Read more...

[Python]python如何方便的操作MySQL和Oracle数据库

Python pymysql cx_Oracle

环境

Read more...

[区块链]区块链和通证的应用与技术路径

blockchain note 通证经济

前言:1 月 21 日参加 CSDN 举办的区块链沙龙,以下是来自 CSDN 副总裁孟岩的 Slide 笔记。表达上使用了个人的理解,如果有哪里理解错误,还请在评论中指正。

产业形势和发展方向

三大派别

目前国内的区块链产业形势分为 三个派别,这三个群体需要分开来评判看待。

最为我们大众所熟知的一些企业,或者说是一些数字货币,大都属于圈公司。这一类公司可以用六个字总结:“只造势,不做事”。各种铺天盖地的宣传,为的是制造其发行的数字货币的影响力,而并没有实际的实体价值依托。

因为我们大家日常接触或听到的大部分都是币圈的公司信息,所以常常会有人说:“区块链这个技术没有实际的落地应用,只是个噱头”。其实不然,国外其实有很多的公司在做着基于区块链技术的应用,只是因为这一类的公司不会去发行数字货币,也不发通证(通证的概念后面会提到),只是在借助区块链技术在做着一些实际的应用产品,所以往往不被人所了解。这一类的公司就属于链圈公司范畴。链圈的公司会有很多基于区块链技术的落地应用,但是因为每个产品都是独立的,影响力是很有限的,所以无法对全球产生革命性的改变。

还有第三个派别就是—“通证派”。首先理解一下通证的定义,通证,英文的名字是Token,还有的人译作“代币”,但是这个真不是一个很雅的翻译,我更倾向于称之为“通证”。通证的核心是,流通,通证是一种价值转移的载体形式。

通证有广义的通证和狭义的通证之分,狭义的通证包含但不限于:身份证,房产证,信用卡,用户积分,通行证,门票,购物卡,发票,股票,债券等等…广义的通证是在狭义的通证基础上多一个数字加密货币

Read more...

[python]web框架中的代码自动重载怎么实现

Python reload Flask Django uWSGI

在开发和调试 wsgi 应用程序时,有很多方法可以自动重新加载代码。例如,如果你使用的是werkzeug,则只需要传use_reloader参数即可:

run_sumple('127.0.0.1', 5000, app, use_reloader=True)

对于 Flask,实际上在内部使用 werkzeug,所以你需要设置 debug = true:

app.run(debug=True)

django 会在你修改任何代码的时候自动为你重新加载:

python manage.py runserver

所有这些例子在本地开发的时候都非常有用,但是,建议不要在实际生产中使用。

作为学习,可以一起来看一下,python 是如何让代码自动地重新加载的?

Read more...

[python]ImportError:attempted relative import with no known parent package

Python 翻译 importError

前言

在这篇文章中,我将会解析 ImportError: attempted relative import with no known parent package 这个异常的原因。当你在运行的 python 脚本。使用了相对引用方式 (类似import ..module) 去引用包时,可能会出现这个异常。

Read more...

[译]关于python字典类型最疯狂的表达方式

Python translation dict trick

一篇来自 Dan Bader 的有趣的博文,一起来学习一下,如何去研究一个意外的 Python 现象。

Read more...

写Flask应用时的一些优雅技巧

python flask pythonic tricks

借助find_modules,import_string优雅地注册蓝图模块

find_modules, import_string这两个函数包含在werkzeug.utils工具包中,借助着两个工具函数可以帮助我们在更优雅的给应用注册blueprint模块,尤其是当项目中blueprint模块很多的时候,会节省很多行代码,看起来更加的舒服。

Read more...

[译]python中的global和nonlocal的实践

python translation global nonlocal

今天的博文翻译是关于 python 中 global 和 nonlocal 两个关键字的用法,原文的作者是来自孟加拉国的Tamim Shahriar,他的博客非常适合新手朋友去阅读,都是简短而有意义的 python 实践。

我们大多数人都对 Python 中的全局变量很熟悉了。如果我们在一个模块中声明全局变量,模块内部的任何函数都可以访问这个全局变量。(模块可以理解为一个python文件或.py文件)

Read more...

[译]Python的enumerate()函数揭秘

python translation enumerate

今天的原文的作者是来自国外的一位 Python“布道师”Dan Bader,他的博客完全就是一个个人品牌的学校。有跟多 Python 技巧,有很多他录制的 Youtube 视频,国内的 Pythonista 们,不妨订阅一下他的每周邮件推送。订阅链接

今天的译文是他博客中的一篇,点击查看原文

如何以去写以及为什么你应该使用 Python 中的内置枚举函数来编写更干净更加 Pythonic 的循环语句?

Read more...

[译]编码,编码,编码!提高编程技能的唯一途径

python translation experience

最近博客没什么更新。工作上新项目马上要开始了,我很清楚自己的技术积累很匮乏,需要学习的东西太多了,但又不知该从何学起。以前听过一句话,不知道怎么规划学习的时候,只管学就好了。最近家里也储备了一批的新书,都还没来得及看,所以暂时不想怎么规划博客了,接下来到过年的这两个月,博客的文章将都是国外博客的译文,希望可以学习大神经验的同时提升自己的英文水平。

今天是第一篇,来自前美国宇航局工程师,python 大神Daniel Roy Greenfeld的博客中的一篇《code,code,code》,旨在帮助新手程序员知道如何才能提高自己的编程技能。

Read more...

脱离Flask上下文,使用jinja2渲染html模板

Python template jinja2

前言

首先,如果一个正常的 flask 带路由的接口,我们是不需要关心上下文对象的,Flask 做了很多“魔术”的方法,当一个 Flask 应用接收到一个请求的时候,它会在将逻辑委托给你的视图函数之前,创建好一个上下文对象。

当我们返回的时候调用render_template(template, **context),就可以正常的渲染界面返回,在这个函数中,如果看一下源码就会发现,返回渲染之前,会创建一个 ctx 去获得当前环境的app变量。然后通过这个 ctx 去渲染传进来的context参数列表。

Read more...
上一页 3 of 5 下一页