小编Dav*_*ven的帖子

删除root权限

我有一个以root身份启动的守护进程(因此它可以绑定到低端口).在初始化之后,我非常希望出于安全原因让它删除root权限.

任何人都可以指出我在C中已知的正确代码片段会这样做吗?

我已经阅读了手册页,我已经在不同的应用程序中查看了它的各种实现,它们都是不同的,其中一些非常复杂.这是与安全相关的代码,我真的不想重新发明其他人犯的错误.我正在寻找的是一个最佳实践,已知良好的,可移植的库函数,我可以使用它知道它将正确.这样的事情存在吗?

供参考:我是从根本上开始的; 我需要改变以在不同的uid和gid下运行; 我需要正确设置补充组; 之后我不需要改回root权限.

c unix root

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

使用Python sqlite3进行交易

我正在尝试将一些代码移植到使用sqlite数据库的Python,而我正试图让事务工作,我真的很困惑.我真的很困惑; 我在其他语言中经常使用sqlite,因为它很棒,但我根本无法弄清楚这里有什么问题.

这是我的测试数据库的模式(将被输入sqlite3命令行工具).

BEGIN TRANSACTION;
CREATE TABLE test (i integer);
INSERT INTO "test" VALUES(99);
COMMIT;
Run Code Online (Sandbox Code Playgroud)

这是一个测试程序.

import sqlite3

sql = sqlite3.connect("test.db")
with sql:
    c = sql.cursor()
    c.executescript("""
        update test set i = 1;
        fnord;
        update test set i = 0;
        """)
Run Code Online (Sandbox Code Playgroud)

你可能会注意到故意的错误.执行更新后,这会导致SQL脚本在第二行失败.

根据文档,该with sql语句应该围绕内容建立一个隐式事务,只有在块成功时才会提交.但是,当我运行它时,我得到了预期的SQL错误...但是i的值从99设置为1.我希望它保持在99,因为第一次更新应该回滚.

这是另一个测试程序,它显式调用commit()rollback().

import sqlite3

sql = sqlite3.connect("test.db")
try:
    c = sql.cursor()
    c.executescript("""
        update test set i = 1;
        fnord;
        update test set i = 0;
    """)
    sql.commit()
except sql.Error:
    print("failed!")
    sql.rollback() …
Run Code Online (Sandbox Code Playgroud)

sqlite python-2.7 python-db-api

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

Eclipse的任何替代品?

我是一名长期的Linux开发人员,多年来我一直在用Eclipse编写所有代码.它具有良好的语法突出显示,适用于各种语言,良好的项目管理,一流的集成VCS支持,并且其Java支持非常出色.

不幸的是,它也是巨大的,相当笨重的,并且有许多不良习惯,如果你在创建文件后在项目视图中意外撤消,文件会不可逆转地消失,到神秘的锁定,它将坐在100%CPU上思考一分钟,对于一个非常笨拙的包管理器来说,随着它安装的东西越来越多,它看起来越来越脆弱.所以我正在寻找可以尝试的替代Eclipse的建议.

但是,有一些附带条件.

  • IDE有两种主要风格.有Eclipse样式,项目是目录; 在项目中移动文件会移动目录中的文件,因此可以将项目视图视为文件管理器.然后是Visual Studio样式,其中项目是一个抽象的东西,不一定与磁盘上的布局匹配,项目可以包含来自多个目录的文件,并且项目中的移动文件不会触及磁盘.后一种风格我受不了,因为它根本不符合我的工作方式.不幸的是,我发现大多数Linux IDE都像Visual Studio一样工作.例如qtcreator,netbeans,monodevelop等

  • 必须能够创建一个原始的,非托管项目,IDE不会尝试构建内容,调试内容或以任何方式触摸文件,而不仅仅是编辑和管理它们.这是因为我的大多数东西都倾向于从命令行构建.例如,Code :: Blocks,看起来非常好,坚持所有项目都有一个带有构建配置等的托管构建系统,并且不会拒绝答案,即使所述构建系统与我想要的完全无关做.集成构建系统都非常好,但如果我不能只点了IDE在一个完整的文件目录,并对其进行编辑,恐怕这是对我没用.

我工作的语言是C,C++,Java,Lua,shell脚本,Vala以及其他无数的东西,所以具有相当强大的语法突出显示效果会很好.

我意识到我很挑剔,但IDE是一个非常私人的东西,而且,这就是我的工作方式.我不太喜欢Eclipse以保证改变我的工作流程,但我想知道是否有更好的东西我可以使用相同的工作流程......

eclipse linux ide

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

编写窗口管理器的现代方法

我正在尝试写一个窗口管理器.(实际上,我已经编写了一个操作系统和编译器,但这不是重点.)

XLib和xcb并不是完全令人讨厌的,至少不是因为win32标准,但它们肯定是非常古老的,并且不能很好地利用体面的抽象来让我的生活变得更轻松.不仅如此,但现代高级语言明显缺乏良好的绑定.

我的问题是:这几天所有这些低级别的东西真的很必要吗?是否存在能够为我封装所有令人讨厌的东西的库?我有一个模糊的记忆,启蒙人已经做过这样的事情,却找不到任何东西.或者像GDK这样的现代小部件库是否具有足够的功能,我不需要触及Xlib层?

任何带有Java绑定的库都特别有意义......

x11 window-managers xlib

16
推荐指数
2
解决办法
6965
查看次数

循环有向图的遍历

我有一个循环有向图.从叶子开始,我希望将附加到每个节点下游的数据传播到可从该节点到达的所有节点.特别是,我需要在周期稳定的任何周期内继续推送数据.

我完全相信这是一个股票图遍历问题.但是,我在寻找合适的算法时遇到了一些困难 - 我想我缺少一些关键的搜索关键字.

在我尝试编写自己的半O(n ^ 3)算法之前,有人能指出我一个合适的解决方案吗?什么叫这个特殊的问题?

algorithm graph directed-graph

15
推荐指数
1
解决办法
5693
查看次数

二维轨道物理学

我正在为游戏开发2D物理引擎.我有引力和群众工作,使用一种简单的迭代方法(我知道我最终必须升级); 我可以手动推动群众,看着他们移动,这一切都按照我的预期运作.

现在,我正试图通过围绕行星的简单圆形轨道中的卫星提前建立游戏世界.为此,我需要根据行星的质量和所需的距离计算卫星的初始速度矢量; 这应该是微不足道的,但我不能为我的生活让它正常工作.

标准物理教科书告诉我,围绕质量M的圆形轨道中物体的轨道速度为:

v = sqrt( G * M / r )
Run Code Online (Sandbox Code Playgroud)

然而,在应用了适当的矢量后,卫星的速度不够快,并且处于一个尖锐的椭圆轨道上.随机修补显示,在一种情况下,它的关闭时间约为3倍.

我的重力模拟代码使用传统的:

F = G M m / r^2
Run Code Online (Sandbox Code Playgroud)

我的宇宙中G被设置为1.

有人可以向我确认这些方程式仍然存在于2D空间吗?我看不出任何原因,但在这一点上我真的想知道问题是在我的代码还是我的假设......


更新:我的物理引擎的工作原理如下:

for each time step of length t:
  reset cumulative forces on each object to 0.
  for each unique pair of objects:
    calculate force between them due to gravity.
    accumulate force to the two objects.
  for each object:
    calculate velocity change dV for this timestep using Ft / m.
    v = v + dV. …
Run Code Online (Sandbox Code Playgroud)

physics 2d gravity game-physics

15
推荐指数
1
解决办法
7824
查看次数

狡猾的方式画一个星空

我正在开发一款游戏,我想出了一个相当有趣的问题:聪明的方法来绘制星空.

这是一个2D游戏,所以动作可以在X和Y方向滚动.此外,我们可以调整比例以显示更多或更少的游戏区域.我也希望星空有假视差来给人一种深度印象.

现在我以传统的方式做这件事,通过拥有大量的星星,每个星星都被"深度"因子标记.为了绘制,我根据相机位置乘以"深度"来翻译每个星星,因此一些星星会移动很多,有些星星移动一点.这一切都很好,但当然因为我的阵列中有一定数量的星星,所以当相机移动太远或者我们缩小太多时会出现问题.这将全部奏效,但涉及大量代码和特殊情况.

这冒犯了我的优雅感.有一种更好的方法来实现这一目标.

我已经考虑过程序生成我的星星,它允许我拥有无限数量:例如,通过使用固定种子和PRNG来确定坐标.我需要将天空划分为瓷砖,通过散列瓷砖坐标生成种子,然后绘制每个瓷砖100颗星.这允许我无限期地向所有方向延伸我的星空,同时仍然只需要考虑可见的瓦片 - 但这不适用于"深度"因素,因为这允许星星在他们的瓦片外偏离.我可以简单地使用这种算法使用多层非视差星场,但这让我感到作弊.

当然,我需要每一帧完成所有这些,所以它必须快速.

你们都觉得怎么样?

algorithm

14
推荐指数
1
解决办法
3655
查看次数

RTF linter想要

有没有人知道RTF文件的linter?

我正在为文字处理器编写一个简单的RTF导出工具.我已经到了我生成的文件加载到OpenOffice并且似乎工作的阶段 - 除了我刚刚发现如果我在OpenOffice中编辑它,保存它,并将它加载回OpenOffice,它神秘地变化.我的假设是我的样式表和列表没有正确布局,它在OpenOffice中产生了奇怪的变形数据结构.

我真的很喜欢一个工具,它会查看我的RTF文件,将其与规范相匹配,然后告诉我我做错了什么......

我在Linux环境中,但这是一个跨平台的应用程序,所以我愿意使用Windows工具,如果有人有的话.

validation rtf lint

12
推荐指数
1
解决办法
2422
查看次数

从多线程应用程序生成进程

我有一种情况,我需要从一个非常大的多线程应用程序中生成一个帮助程序进程,我没有完全控制.

现在我正在使用fork()/ exec().这在很多时候都有效,但在某些情况下,孩子在exec()发生之前会很奇怪地崩溃.我怀疑这是因为fork()多线程应用程序通常被认为是一个非常糟糕的想法.

我真的非常喜欢以原子方式启动进程的方法,不需要fork()父进程:关闭所有文件描述符,环境按照我想要的方式设置,CWD设置等等.这应该避免fork()我的多线程父应用程序的所有恐怖,处理文件描述符继承等posix_spawn()应该是理想的.不幸的是,在Linux上,posix_spawn()使用fork()和实现exec()...

vfork()被定义为暂停父进程,直到子进程调用exec().这似乎更像我想要的,但我的理解是,vfork()这些日子通常被认为是历史遗迹,相当于fork()---这仍然是这样吗?

处理这个问题的最不好的方法是什么?

注意:

  • 我不能在任何线程启动之前生成我的进程(因为我不能在那时运行代码)
  • 由于外部要求,我无法重新设计我的应用程序而不需要辅助进程
  • 在产生帮助程序进程之前,我无法暂停所有线程,因为它们不属于我

这是在Linux上.涉及Java,但我的所有代码都在C中.

c unix linux fork process

12
推荐指数
2
解决办法
2817
查看次数

IDEA:如何在空项目中看到子目录?

我希望使用IDEA来编辑一个没有特定类型的文件的目录.因此,我创建了一个类型为Empty Project的新项目,并将其指向我的目录.

项目视图现在显示目录中的文件.但是,它没有显示任何子目录.这很奇怪.

更奇怪的是,我仍然可以使用New - > Directory来创建一个新目录.从命令行我可以看到该目录已经创建; 但是,从IDEA内部来看,它仍然没有出现.

这里发生了什么?而且,更重要的是,我怎样才能真正让它向我展示我的子目录?

这是IntelliJ IDEA 12.1.1.我确实发现IntelliJ没有显示项目文件夹,听起来很相似.但是,它指的是IDEA的不同版本,他们没有使用空项目.所以,我不认为这是相关的.

intellij-idea

12
推荐指数
1
解决办法
3939
查看次数