小编Max*_*tor的帖子

了解低级图形编程

我很有兴趣了解可用于制作图形应用程序的不同抽象层.

我看到很多术语被抛出:在最高级别的抽象中,我听说过C#,.NET,pyglet和pygame之类的东西.再往下,我听说DirectX和OpenGL.然后是DirectDraw,SDL,Win32 API以及其他多平台库,如WxWidgets.

如何才能很好地了解其中一个层的结束位置以及下一个层的开始位置?什么是在Windows中创建窗口的"最低级别"方式?那么C++呢?(代码示例将是神圣的.)在X11中怎么样?OpenGL和DirectX的Windows实现是否构建在Win32 API之上?我在哪里可以开始了解这些事情?

关于SO的另一个问题是建议编程Windows.Linux怎么样?有没有相当于这样的书?

我知道这是非常低级的,并且有许多更友好的工具可用,但我想至少学习表面下发生的事情的基础知识.我想尽可能地开始甩掉窗户和矢量,从像pygame这样的东西开始对我来说太高级了; 我真的需要制作完整的概念电路,介绍如何在计算机上绘制内容.

我一定会欣赏有关书籍和资源的建议,但我认为如果这个问题的答案充满了许多不同的方法来通过不同的图形编程方法来获得"Hello world",那将是非常酷的.C?C++?使用OpenGL?使用DirectX?在Windows XP上?在Ubuntu上?也许我要求太多了.

graphics

42
推荐指数
4
解决办法
2万
查看次数

$ .proxy()和bind()有什么区别?

在2009年,ECMAScript 5添加了一个内置bind()函数,它将一个对象作为参数并返回一个相同的函数,其中this将始终引用您传递它的对象.(我找不到任何看起来像规范文档链接的东西.)

这与jQuery的$.proxy()功能有何不同?难道$.proxy()是第一位的ECMAScript 5发布之前?是否有特别的原因,有利于$.proxy(function(){}, this)function(){}.bind(this)

javascript jquery closures scope bind

26
推荐指数
4
解决办法
1万
查看次数

如何在Windows 7上使用ruby 1.9.2运行Qt4?

摘要

我正在使用Qt4编写一个Ruby 1.9.2应用程序用于GUI,我想在Linux,OS X和Windows上分发它.除了我的Windows 7 64位盒子外,我的应用程序运行正常.

有Win7 + Qt4 + 1.8.7的工作示例,但显然不是Win7 + Qt4 + 1.9.2.有两种宝石的Ruby-QT绑定,qtbindingsqtruby4(有时被称为qt4-qtruby),但我还没有看到任何人使用Ruby 1.9.2 Win7上运行.

问题 qtruby4

这篇文章从2008年10月开始,它的更新版本从2011年6月起作为很好的起点,但是我通过RubyInstaller for Windows的下载页面安装Ruby 1.9.2与后者不同.1.8.7似乎工作正常,但是当我用1.9.2尝试时,我得到了一些不寻常的错误.要求'rubygems'然后要求'Qt'结果:

no such file to load -- 'qtruby4'
Run Code Online (Sandbox Code Playgroud)

上面的第一篇文章链接到dr1ku的一篇更深入的文章,可能会提供一些线索.

  • 使用这些库的最新版本重现dr1ku的步骤可能是值得的.
  • dr1ku和2008 paschenda.org文章都使用了一个特殊的Windows Qt4-QtRuby安装程序,但维护者指出他没有时间更新它.我并不完全清楚特殊安装程序的功能,但我认为paschenda.org的2011年文章不再使用它,因为DevKit表面上可以帮助RubyGems自己构建Qt4而无需帮助.

在野外发现

以下是一些似乎遇到同样问题的人:

问题 qtbindings

我的应用程序实际上使用的qtbindings宝石,所以我尝试安装该相反,与gem install qtbindings --platform=mswin32[1]然而,当我试图,require 'Qt' …

ruby qt4 qtruby windows-7 ruby-1.9

24
推荐指数
1
解决办法
8771
查看次数

我应该如何构建我的(大多数)基于文本的游戏服务器?

想想MUD/MUCKs,但也许有头像或场所插图.我选择的语言是红宝石.

我需要处理多个持久连接,并在服务器及其各个客户端之间异步传输数据.必须根据客户端会话中发生的活动保持单个数据库的最新状态.每个客户端会话中的活动可能需要立即更新多个其他客户端(用户进入房间;用户向另一个用户发送私人消息).

这是一个目标项目 一个学习项目,所以我的目的是重新发明一两个轮子,以了解有关并发网络编程的更多信息.但是,我对并发和网络编程都不熟悉; 以前我几乎专门在Web应用程序中的非持久性同步HTTP请求的世界中工作.所以,我想确保我重新发明了正确的轮子.

根据emboss的优秀答案,我开始关注某些HTTP服务器的内部情况,因为Web应用程序通常可以避免由于服务器本身抽象问题的彻底解决而导致的线程问题.

我不想使用EventMachine或GServer,因为我还不知道他们做了什么.一旦我对他们的工作方式有了一般意识,他们解决了什么问题以及为什么它们有用,我会对此感到满意.我的目标不是"写游戏",而是"编写游戏并了解一些低级别的东西是如何工作的".我也不清楚某些术语的界限; 例如,"I/O-unbound apps"是"事件驱动的应用程序"的超集吗?反之亦然?

我当然对实现我的目标的一种正确的方式感兴趣,如果它存在,但总体而言我想理解为什么它是正确的方式以及为什么其他方式不太可取.

您可以建议的任何书籍,电子书,在线资源,示例项目或其他花絮都是我真正追求的.

我现在正在做的事情是使用IO#select阻塞连接套接字列表,超时为0.1秒.它将读取的任何信息推送到线程安全的读取队列中,然后无论何时达到超时,它都会从线程安全的写入队列中提取数据.我不确定超时是否应该更短.还有第二个线程轮询套接字处理线程的读取队列并处理"请求".这比我最初的工作方式要好,但仍然可能不太理想.

我在Hacker News上发布了这个问题,并且链接到了我正在处理的一些资源; 类似的东西会很棒:

ruby concurrency network-programming thread-safety mud

18
推荐指数
1
解决办法
1688
查看次数

如何设置我的Ubuntu VPS发送外发邮件?

我的VPS提供程序(Slicehost)不提供SMTP服务器.我使用Google Apps为我的域发送和接收邮件,但我希望能够以编程方式发送电子邮件.

我一直在谷歌搜索这个问题好几个月,我似乎无法清楚地了解我需要做什么.我只需要像postfix这样的MTA吗?我将其配置为"卫星"或"互联网"网站吗?我是否需要进行任何DNS更改?如果我想有一天以编程方式接收电子邮件,是否有任何配置选项我应该小心修补?另外,如果我的VPS主机确实提供了一个SMTP服务器,我现在要做的不是我需要做什么?

谢谢!

编辑:我的发现的简要概述:

  • 更新/etc/hosts/etc/hostname反映FQDN(例如,mail.domain.comsub.domain.com代替slicename)
    • 重启并验证 hostname -f
  • 设置反向DNS(由拥有IP池的任何人拥有)以指向相同的FQDN
    • 检查RDNS是否已经传播了 dig -x server.ip.address
  • sudo aptitude install postfix telnet mailx
    • 使用网站设置
    • 将FQDN设置为上面选择的任何内容
  • 测试用 mail whateveryouremailis@gmail.com

email ubuntu postfix-mta smtp mta

11
推荐指数
1
解决办法
1万
查看次数

游戏编程 - 如何避免重新发明轮子

摘要:

我可以用C编写一个"胖客户端"游戏,而不需要重新发明轮子,或者我应该只是咬紧牙关并使用一些库或SDK?我是一个温和的C程序员,并且不怕使用指针,数据结构,内存位置等,如果它能给我控制,我需要制作一个伟大的"胖客户端"游戏.但是,我正在考虑为了权力和控制而不是 易用性而避开高级语言和框架.

我有兴趣在某个时候修改2D格斗/平台游戏作为副项目.我主要是一名Linux服务器端程序员,具有Python,Ruby和PHP方面的经验.我知道其中一些语言有很好的框架,比如PyGame.我也意识到人们对Air和.NET这样的东西所取得的成功......但我有一些顾虑:

  • 性能:脚本语言非常慢.如果我正在进行实时游戏,我希望它尽可能快速.
  • 巨大的二进制文件:使用像.NET这样的框架或像Ruby这样的脚本语言通常会产生你不需要的大型CLR或库.我想制作的游戏小而简单 - 我不希望它的CLR比游戏本身更大!
  • 额外的东西:老实说,我只是不喜欢继承一些大型游戏库的包袱,如果我可以更好地包围我自己的代码.

我问这个问题,因为我知道我很容易因为没有发明这种综合症.我一直想自己编程,我确信它浪费了很多时间.然而,这对我来说非常常见 - 例如,我没有使用Rails(一个非常大的Web项目框架,其中包含ORM和GUI工具包),我使用了一系列较小的Ruby工具,如机架续集,它们组合在一起精美.

所以,我转向你,SO专家.我天真吗?这是我的看法:

  • 使用C.
    • 缺点
      • 可能会让我讨厌编程
      • 重新发明车轮的高风险
      • 它花费很长时间以至于我失去了兴趣的高风险
    • 优点
      • 尝试和真实 - 大多数A-list游戏都是用C语言完成的(今天仍然如此吗?)
      • 对内存管理,速度,资产管理等的高度控制,我相信自己要学会处理
      • 没有残酷
  • 使用框架或SDK
    • 缺点
      • 超大交付风险
      • 取决于原始图书馆作者对游戏开发的各个方面 - 如果没有我想要的功能怎么办?我将不得不自己编程,这不错,但部分地破坏了首先使用高级框架的目的
      • 性能问题的高风险
    • 优点
      • 开发时间更快
      • 可能更容易维护
      • 没有浪费时间重塑共同的范式

还有什么可以添加到此列表中?这是一个纯粹的判断电话,还是有人可以为我封印这笔交易?欢迎预订建议.

frameworks choice

11
推荐指数
3
解决办法
2449
查看次数

SQL查询:在多行上模拟"AND"而不是子查询

假设我有一个带有两列的"tags"表:tagidcontentid.每行代表分配给一段内容的标签.我想要一个查询,它将为我提供标记有标记334,338和342的每个内容的争用.

执行此操作的"简单"方法是(伪代码):

select contentid from tags where tagid = 334 and contentid in (
    select contentid from tags where tagid = 338 and contentid in (
        select contentid from tags where tagid = 342
    )
)
Run Code Online (Sandbox Code Playgroud)

然而,我的直觉告诉我,有一种更好,更快,更可扩展的方法来做到这一点.例如,如果我需要找到12个标签的交集怎么办?这很快就会变得可怕.有任何想法吗?

编辑:事实证明这也包含在这篇优秀的博客文章中.

sql join

10
推荐指数
1
解决办法
2201
查看次数

"&> foo"和"> foo 2>&1"之间有什么区别?

似乎有两个bash惯用法将STDOUT和STDERR重定向到一个文件:

fooscript &> foo
Run Code Online (Sandbox Code Playgroud)

......而且......

fooscript > foo 2>&1
Run Code Online (Sandbox Code Playgroud)

有什么不同?在我看来,第一个只是第二个的快捷方式,但我的同事认为,即使初始重定向出错,第二个也不会产生输出,而第一个会将重定向错误吐出到STDOUT.

编辑:好的......似乎人们不理解我的要求,所以我会尽力澄清:

任何人都可以给我一个例子,上面写的两个特定的行行会产生不同的行为吗?

bash

10
推荐指数
2
解决办法
2402
查看次数

如何在Ruby中模拟Python的命名printf参数?

在Python中,您可以这样做:

print "Hi!  I'm %(name)s, and I'm %(age)d years old." % ({"name":"Brian","age":30})
Run Code Online (Sandbox Code Playgroud)

什么是最接近,最简单的Ruby习惯用于复制这种行为?(请不要monkeypatching String类.)

编辑:这是一个非常好的好处是你可以将预处理的字符串存储在变量中并将其用作"模板",如下所示:

template = "Hi!  I'm %(name)s, and I'm %(age)d years old."
def greet(template,name,age):
    print template % ({"name":name,"age":age})
Run Code Online (Sandbox Code Playgroud)

这显然是一个简单的例子,但是能够存储这样的字符串供以后使用有很多实用性.Ruby的"Hi! I'm #{name}"惯例很相似,但是即时评估使它的功能更少.

请不要#{var}在这个编辑之前提供有关技术的答案.(随意的内核:如果一个问题作者将它们标记为"过时",也许应该保护答案免受投票......?)

ruby python string printf

9
推荐指数
3
解决办法
3841
查看次数

PHP中的"内联"类实例化?(为了方便链接)

在Python和Ruby等OO语言中常用的习惯用法是实例化一个对象和链接方法,这些方法返回对象本身的引用,例如:

s = User.new.login.get_db_data.get_session_data
Run Code Online (Sandbox Code Playgroud)

在PHP中,可以像这样复制此行为:

$u = new User();
$s = $u->login()->get_db_data()->get_session_data();
Run Code Online (Sandbox Code Playgroud)

尝试以下结果syntax error, unexpected T_OBJECT_OPERATOR:

$s = new User()->login()->get_db_data()->get_session_data();
Run Code Online (Sandbox Code Playgroud)

看起来这可以使用静态方法完成,这可能是我最终要做的,但我想检查一下lazyweb:实际上有一种干净,简单的方法来实例化"内联"PHP类(如图所示)上面的片段)为此目的?

如果我决定使用静态方法,那么让一个类的静态方法返回类本身的实例化是否过于愚蠢?(有效地编写我自己的构造函数 - 那不是构造函数吗?)感觉有点脏,但如果没有太多可怕的副作用,我可能会这样做.

我想我也可以使用get_user()方法预先实例化一个UserFactory,但我很好奇我上面提到的解决方案.

php oop static-methods

8
推荐指数
4
解决办法
6924
查看次数