我教我的儿子编程"正确/艰难",所以我们从C开始,就像真正的男人:)
将文本打印到控制台很有趣,但我仍然记得将我的旧i386切换到320x200x256模式并绘制几个彩色矩形的兴奋......当天就像调用一样简单int 10h然后你只需要写入字节[A000:0000]到在屏幕上绘制像素.
然而,对于现代Linux,这种对硬件的低级访问似乎更复杂(出于显而易见的原因).我简要地看着mmap-ing /dev/fd0描述这里 -原来有没有/dev/fb0在我的Ubuntu 13.04的设备.我也看过使用svgalib- 但是,他们的示例代码在我的显示器上没有显示任何内容.
所以问题是:在现代Linux中是否有简单的方法可以直接访问视频内存,而不需要太多的系统配置和样板代码?它不一定是全屏访问 - 只要通过将数据直接写入内存就可以打开X窗口并绘制像素也可以.
以下是Express.js 路由指南中的修改示例:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res) {
res.send('Birds home page');
});
router.get('/about', function(req, res) {
res.send('About birds');
});
...
app.use('/birds', router);
app.use('/fish', router);
Run Code Online (Sandbox Code Playgroud)
这版画"关于鸟"当我访问这两个/birds/about和/fish/about.
如何将参数或其他内容传递给路由器,这样,在控制器功能中,它可以分辨出这两条不同的路由?
例如,我想在参观时看到"鸟儿可以飞",参观时/birds/about"鱼可以游泳" /fish/about.
理想情况下,我希望能够传递一些"配置对象",因此迷你应用程序不需要知道它可能安装在所有可能的路径上(在伪代码中):
router.get('/about', function(req, res) {
res.send(magic_configuration.about_text);
});
....
magically_set_config(router, {about_text: "Bears eat fish"})
app.use('/bears', router);
Run Code Online (Sandbox Code Playgroud) 我有一个使用Pyramid/SQLAlchemy/Postgresql构建的Web应用程序,允许用户管理一些数据,并且该数据几乎完全独立于不同的用户.说,Alice访问alice.domain.com并且能够上传图片和文档,并且Bob访问bob.domain.com并且还能够上传图片和文档.Alice永远不会看到Bob创建的任何内容,反之亦然(这是一个简化的例子,真的可能在多个表中有很多数据,但想法是一样的).
现在,在DB后端组织数据最直接的选择是使用单个数据库,其中每个表(pictures和documents)都有user_id字段,所以,基本上,要获取所有Alice的图片,我可以做类似的事情
user_id = _figure_out_user_id_from_domain_name(request)
pictures = session.query(Picture).filter(Picture.user_id==user_id).all()
Run Code Online (Sandbox Code Playgroud)
这一切都很简单,但也存在一些缺点
所以我认为以某种方式分割每个用户的数据真的很好.我可以想到两种方法:
在同一个数据库中为Alice和Bob的图片和文档设置单独的表(Postgres的Schemas似乎是在这种情况下使用的正确方法):
documents_alice
documents_bob
pictures_alice
pictures_bob
Run Code Online (Sandbox Code Playgroud)
然后,使用一些黑魔法,根据当前请求的域"将"所有查询"路由"到一个或另一个表:
_use_dark_magic_to_configure_sqlalchemy('alice.domain.com')
pictures = session.query(Picture).all() # selects all Alice's pictures from "pictures_alice" table
...
_use_dark_magic_to_configure_sqlalchemy('bob.domain.com')
pictures = session.query(Picture).all() # selects all Bob's pictures from "pictures_bob" table
Run Code Online (Sandbox Code Playgroud)为每个用户使用单独的数据库:
- database_alice
- pictures
- documents
- database_bob
- pictures
- documents
Run Code Online (Sandbox Code Playgroud)
这似乎是最干净的解决方案,但我不确定多个数据库连接是否需要更多的RAM和其他资源,限制了可能的"租户"数量.
所以,问题是,这一切都有意义吗?如果是,我如何配置SQLAlchemy以在每个HTTP请求上动态修改表名(对于选项1)或者维护到不同数据库的连接池并为每个请求使用正确的连接(对于选项2)?
如何从Python脚本启动一个进程(例如另一个Python脚本),以便"子"进程与"父"完全分离,因此父进程可以a)继续其快乐方式而无需等待子进程完成和b)可以在不终止子进程的情况下终止?
家长:
import os
print "Parent started"
os.system("./child.py")
print "Parent finished"
Run Code Online (Sandbox Code Playgroud)
儿童:
import time
print "Child started"
time.sleep(10)
print "Child finished"
Run Code Online (Sandbox Code Playgroud)
运行parent.py打印:
Parent started
Child started
Child finished
Parent finished
Run Code Online (Sandbox Code Playgroud)
我想要它打印:
Parent started
Child started
Parent finished
(seconds later)
Child finished
Run Code Online (Sandbox Code Playgroud) 我正在尝试返回这样的函数:
@view_config(route_name='CreateNewAccount', request_method='GET', renderer='json')
def returnJSON(color, message=None):
return json.dumps({ "color" : "color", "message" : "message" }, default=json_util.default)
Run Code Online (Sandbox Code Playgroud)
由于Pyramid自己的JSON编码,它出现了双重编码,如下所示:
"{\"color\": \"color\", \"message\": \"message\"}"
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?我需要使用default参数(或等价物),因为它是Mongo的自定义类型所必需的.
使用 SQLAlchemy,我发现有时我会错误输入映射到列的属性名称,这会导致很难捕获错误:
class Thing(Base):
foo = Column(String)
thing = Thing()
thing.bar = "Hello" # a typo, I actually meant thing.foo
assert thing.bar == "Hello" # works here, as thing.bar is a transient attribute created by the assignment above
session.add(thing)
session.commit() # thing.bar is not saved in the database, obviously
...
# much later
thing = session.query(Thing)...one()
assert thing.foo == "Hello" # fails
assert thing.bar == "Hello" # fails, there's no even such attribute
Run Code Online (Sandbox Code Playgroud)
有没有办法配置映射类,以便分配给未映射到 SQLAlchemy 列的任何内容会引发异常?
我正在按键排序一个dicts列表:
groups = sorted(groups, key=lambda a: a['name'])
Run Code Online (Sandbox Code Playgroud)
一些dicts的名称设置为None,而Python 2将None值放在任何其他值之前,因此它们位于排序列表的前面.一个天真的解决方案
groups = sorted(groups, key=lambda a: a['name'] or 'zzzz')
Run Code Online (Sandbox Code Playgroud)
但是,显然,这对任何非拉丁名字都不起作用.
什么是一种很好的Pythonic方法来排序包含None值的列表,以便将这些值放在列表的末尾?
我有一个Python金字塔应用程序,我正在使用uwsgi运行,如下所示:
sudo /finance/finance-env/bin/uwsgi --ini-paste-logged /finance/corefinance/production.ini
Run Code Online (Sandbox Code Playgroud)
一旦它运行并且我的窗口超时,我无法在不重新启动整个盒子的情况下停止服务器.如何停止服务器?
我试图了解SQLAlchemy随附的" 关联判别器 "示例,它定义了HasAddresses mixin,因此每个模型子类化HasAddresses都会神奇地获取一个addresses属性,该属性是可以添加Address对象的集合.链接是通过中间表执行的,因此乍一看关系看起来像多对多,我希望能够将多个地址链接到客户,还有多个客户和供应商链接到地址.
Address但是,该模型的设置方式使其具有单个parent属性,该属性只能引用单个对象.因此,在示例中,地址只能链接到单个客户或供应商.
如何修改该示例,以便Address能够反向引用多个父对象?
我有一个用zc.buildout管理的Pyramid Web应用程序.在其中,我需要读取磁盘上的文件,该文件位于buildout目录的子目录中.
问题是确定文件的路径 - 我不想硬编码绝对路径,只是提供相对路径在生产中提供应用程序时不起作用(据说是因为工作目录不同).
所以我想到的有希望的"钩子"是:
"root"buildout目录,我可以在buildout.cfg中解决${buildout:directory}- 但是,我无法弄清楚如何"导出"它以便Python代码可以访问它
Paster的.ini文件的位置启动应用程序
python ×7
pyramid ×3
sqlalchemy ×3
buildout ×1
c ×1
express ×1
framebuffer ×1
graphics ×1
javascript ×1
json ×1
list ×1
multi-tenant ×1
node.js ×1
paster ×1
postgresql ×1
pymongo ×1
sorting ×1
subprocess ×1
uwsgi ×1