Hello & Welcome to
钻石墓场

黑夜中会发光

Numpy, pandas, Python3.9 和 Big Sur

Big Sur 发布了. 最近苹果每一次系统发布, 总伴随着奇奇怪怪的 broken feature. 比如Catalina 引进的 APFS 里有个 "双向虫洞" firmlink. 这个 firmlink 本来是用来解决 APFS 分离只读系统卷和 Data 卷之后的程序路径兼容性问题的. 苹果很自信的说 "没有人" 会感受到差别... 好吧, 升级 Catalina 之后我的 autoenv 就没法 正常使用 了. 这次升级 Big Sur 之后, 安装三件套 Numpy, Pandas 和 matplotlib 的时候又出问题了 (venv) ➜ data_playground pip install…

Python 的世界里没有代码块

以前经常写 ruby 和 js, 对于以下的代码非常习惯: item = {id: 1, name: 'Donald Clinton'} attrs = [:id, :name] attr_getters = attrs.map do |attr| lambda do "The #{attr} is #{item[attr]}" end end > attr_getters[0][] "The id is 1" > attr_getters[1][] "The name is Donald…

Automatic Eager Loading for Mongoid

Even in MongoDB, sometimes your models may still have reference relations. Like ActiveRecord, the popular MongoDB ORM, mongoid, provides #includes method to perform eager loads. Problems However, it is a pain to specify them manually in codes. In most scenes, you just need the eager loading when you what to…

Using ES6 style {a, b, c} hash construct in Ruby

ES6 ships with a very handy syntax sugar to build Object(aka Hash in Ruby). var year = 2016; var month = 3; var day = 30; var theDate = { year, month, day }; Can I use the syntax in ruby? calling something simple as HandyHash(:year, :month, :day)? To get the variable values, the…

森的妖精 GraphQL

最(好几个)近(月之前), 在公司前端同学的推荐下接触了GraphQL, 感觉一阵清爽. 如今使用了一段时间, 可以汇报一下使用感受. GraphQL? 物如其名, GraphQL 是一种 Query Language, 由世界上最好语言的领军者 Facebook 公司发明. 它的出现是为了满足服务端向客户端灵活输出数据的需要. Restful API 不行吗? 当然行. Restful 是包括我在内, 各位后端同学都非常熟悉的朋友. 从早年凭感觉写的jsp, asp们, 到后来做的 WebService API, 再到有哲学思想指导的 Restful API. 可以很明显的感觉到, 这些前后端的数据交互都是由后端在主导. 后端决定了数据格式, 决定了每个请求所能得到的数据. 可是! 时代不再是做个门户, 做个页面这么简单了. 如今更注重的是客户端侧的数据交互. 看看隔壁js们的各种前端框架, SPA, 数据绑定, MVVM 搞得热火朝天. 虽然后端依然承载着业务处理, 数据安全这样核心的功能. 但是客户端才是数据的需求方, 前端更清楚,…

Grape自定义参数类型

Grape的params函数是非常方便用于定义API参数的工具. 这次做到一个接口要传入GeoJSON格式的参数. 与世界在接口上直接写了: params do requires :location, type: GeoJSONPoint, desc: "地点" end class GeoJSONPoint attr_accessor :type, :coordinates def initialize(coordinates=[]) @coordinates = coordinates end # always a point def type "Point" end end 不过这样显然是不行的, 一定会出400 Bad Request. Grape毕竟不知道GeoJSONPoint这个类是怎么转换的. 读了读Grape的代码, 发现Grape是用 Virtus 这个gem来转换参数=>对象的. 于是这个GeoJSONPoint的类就需要用Virtus的方式来定义. 于是代码变成了 class GeoJSONPoint include Virtus.model…

Sorcery + Grape on Rails

最近手头有一个需要快速开发的新Web项目, 于是想了想还是不用sinatra, 直接用RoR来写. 因为需要为手机提供API, 感觉在Rails上面架设sinatra有点自欺欺人的感觉, 于是第一次尝试在Rails上面加一层Grape... 于是问题就来了. Sorcery在Session/Cookies方面的操作完全依赖Rails的API, 以前用sinatra的时候, 基本上没有感觉到什么不适, 这次在Grape上使用Sorcery就爆炸了OTL. Grape::Endpoint.send(:include, Sorcery::Controller)之后就开始各种undefined. 看了看大概都集中在ActionDispatch和ActionController里. 下午大概的做了个hotfix, 可惜因为Grape自用的Cookies和ActionDispatch::Cookies区别实在太大, Grape的remember_me功能在grape上暂时用不了. module API module SorceryAdapter AUTHENTICITY_TOKEN_LENGTH = 32 def self.included(mod) mod.instance_eval { helpers do ### Adapt for Sorcery (some directly taken from rails…

不小心是常态....

想着把Blog的backend db从sqlite换到mariadb, 结果不小心把.db文件删掉了... 明明一直在跟服务器打交道, 结果大意地把数据库删了>< 好糟糕otl... 总之钻石墓场就这样了OTL...…