小编ben*_*ith的帖子

Java中的KDTree实现

我正在寻找Java中的KDTree实现.
我做了谷歌搜索,结果似乎很随意.实际上有很多结果,但它们大多只是一点一点的实施,而我宁愿找到一些具有更多"生产价值"的东西.像apache集合或.NET的优秀C5集合库.我可以看到公共错误跟踪器并检查上次SVN提交的时间.此外,在理想的世界中,我会找到一个设计良好的空间数据结构API,而KDTree只是该库中的一个类.

对于这个项目,我只会在2维或3维工作,而我大多只对一个好的最近邻实现感兴趣.

java kdtree data-structures

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

为什么GCC-Windows依赖于cygwin?

我不是C++开发人员,但我一直对编译器感兴趣,而且我对修改一些GCC(特别是LLVM)感兴趣.

在Windows上,GCC需要POSIX仿真层(cygwin或MinGW)才能正常运行.

这是为什么?

我使用许多其他软件,用C++编写并交叉编译用于不同的平台(Subversion,Firefox,Apache,MySQL),并且它们都不需要cygwin或MinGW.

我对C++最佳实践编程的理解是,您可以编写合理的平台中立代码,并在编译过程中处理所有差异.

那么GCC的交易是什么?为什么它不能在Windows上本机运行?


编辑:

好的,到目前为止,这两个回复说,"GCC使用posix层,因为它使用了posix标题".

但这并没有真正回答这个问题.

假设我已经为我最喜欢的标准库提供了一组标题.为什么我仍然需要posix标题?

GCC是否要求cygwin/mingw实际运行

或者它只需要头部和库的仿真层?如果是这样,为什么我不能只给它一个带有所需资源的"lib"目录?


再次编辑:

好的,我会再次尝试澄清这个问题......

我还用D编程语言编写代码.官方编译器名为"dmd",Windows和Linux都有官方编译器二进制文件.

Windows版本不需要任何类型的POSIX仿真.Linux版本不需要任何类型的Win32仿真.如果编译器对其环境有假设,那么它很好地隐藏了这些假设.

当然,我必须告诉编译器在哪里找到标准库以及在哪里找到静态或动态链接的库.

相比之下,GCC坚持假装它在posix环境中运行,它要求ME通过设置仿真层来幽默这些假设.

但是,GCC内部究竟依赖于那层?它只是在寻找stdlib头,它假设它会在"/ usr/lib"中找到那些头文件吗?

如果是这种情况,我不应该只是告诉它查看"C:/ gcc/lib"来查找这些头文件吗?

或者GCC本身是否依赖POSIX库来访问文件系统(并做其他低级别的东西)?如果是这样,那么我想知道为什么他们不只是静态地链接他们喜欢的Windows POSIX库.为什么要求用户设置依赖项,何时可以将这些依赖项直接构建到应用程序中?

windows compiler-construction gcc cygwin posix

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

绘制地形图

我一直致力于二维连续数据的可视化项目.这是您可以用来研究2D地图上的高程数据或温度模式的类型.从本质上讲,它实际上是一种将三维平面化为二维加彩色的方法.在我的特定研究领域,我实际上并没有处理地理高程数据,但这是一个很好的比喻,所以我会在这篇文章中坚持下去.

无论如何,在这一点上,我有一个"连续颜色"渲染器,我很满意:

连续颜色渲染器

渐变是标准色轮,其中红色像素表示具有高值的坐标,紫色像素表示低值.

底层数据结构使用了一些非常聪明的(如果我自己这么说的话)插值算法,可以任意深度缩放到地图的细节.

在这一点上,我想绘制一些地形轮廓线(使用二次贝塞尔曲线),但我还没有找到任何描述找到这些曲线的有效算法的好文献.

为了让您了解我正在考虑的内容,这里是一个穷人的实现(渲染器只要遇到与轮廓线相交的像素就使用黑色RGB值):

连续颜色与贫民窟地形线

但是,这种方法存在一些问题:

  • 具有更陡峭斜率的图形区域导致更薄(并且经常断裂)的拓扑线.理想情况下,所有拓扑线应该是连续的.

  • 具有更平坦斜率的图形区域导致更宽的拓扑线(并且通常是整个黑度区域,尤其是在渲染区域的外周边处).

因此,我正在研究一种矢量绘制方法,以获得那些漂亮,完美的1像素厚曲线.算法的基本结构必须包括以下步骤:

  1. 在我想要绘制地形线的每个离散高程处,找到一组坐标,其中该坐标处的高程非常接近(给定任意epsilon值)到所需高程.

  2. 消除冗余点.例如,如果三个点处于完全直线,则中心点是多余的,因为可以在不改变曲线形状的情况下消除它.同样,对于贝塞尔曲线,通常可以通过调整相邻控制点的位置来消除cetain锚点.

  3. 将剩余的点组装成序列,使得两个点之间的每个段近似于高程中性轨迹,并且使得没有两个线段跨越路径.每个点序列必须创建一个闭合多边形,或者必须与渲染区域的边界框相交.

  4. 对于每个顶点,找到一对控制点,使得结果曲线相对于步骤#2中消除的冗余点呈现最小误差.

  5. 确保在当前渲染比例下可见的地形的所有要素都由适当的拓扑线表示.例如,如果数据包含高海拔的尖峰,但直径极小,则仍应绘制拓扑线.如果垂直特征的特征直径小于图像的整体渲染粒度,则只应忽略垂直特征.

但即使在这些限制条件下,我仍然可以想到几种不同的启发式方法来寻找线条:

  • 在渲染边界框中找到高点.从那个高点开始,沿着几条不同的轨迹下坡.只要遍历线超过高程阈值,请将该点添加到特定于高程的存储桶.当遍历路径达到局部最小值时,改变航向并向上行驶.

  • 沿着渲染区域的矩形边界框执行高分辨率遍历.在每个海拔阈值处(以及在拐点处,斜坡反转方向的任何位置),将这些点添加到特定于海拔的铲斗中.完成边界遍历后,从这些桶中的边界点开始向内追踪.

  • 扫描整个渲染区域,以稀疏的规则间隔进行高程测量.对于每次测量,使用它与高程阈值的接近度作为决定是否对其邻居进行插值测量的机制.使用这种技术可以更好地保证整个渲染区域的覆盖范围,但是很难将结果点组合成一个合理的构造路径的顺序.

所以,这些是我的一些想法......

在深入研究实现之前,我想看看StackOverflow上是否有其他人遇到过这类问题的经验,并且可以为准确有效的实现提供指导.

编辑:

我对ellisbben提出的"Gradient"建议特别感兴趣.而我的核心数据结构(忽略一些优化插值快捷键)可以表示为一组2D高斯函数的总和,这是完全可微的.

我想我需要一个数据结构来表示一个三维斜率,以及一个用于计算任意点的斜率矢量的函数.在我的头顶,我不知道该怎么做(虽然它看起来应该很容易),但如果你有一个解释数学的链接,我会非常感激!

更新:

由于ellisbben和Azim的出色贡献,我现在可以计算场中任意点的轮廓角.绘制真正的地形线将很快跟随!

这里有更新的渲染图,有和没有我一直在使用的基于ghetto栅格的topo-renderer.每个图像包括一千个随机采样点,由红点表示.该点处的轮廓角由白线表示.在某些情况下,在给定点处不能测量斜率(基于插值的粒度),因此红点在没有相应的轮廓线的情况下发生.

请享用!

(注意:这些渲染使用与之前渲染不同的表面形貌 - 因为我在每次迭代时随机生成数据结构,而我是原型 - 但核心渲染方法是相同的,所以我相信你会得到这个想法.)

替代文字

替代文字

这是一个有趣的事实:在这些渲染的右侧,你会看到一堆完美的水平和垂直角度的奇怪轮廓线.这些是插值过程的伪像,它使用插值器网格来减少执行核心渲染操作所需的计算次数(约500%).所有这些奇怪的轮廓线出现在两个插值器网格单元之间的边界上.

幸运的是,这些文物实际上并不重要.尽管在斜率计算期间可检测到伪像,但最终渲染器将不会注意到它们,因为它在不同的位深度处操作.


再次更新:

Aaaaaaaand,作为我睡觉前的最后一次放纵,这里是另一对效果图,一个是老式的"连续色彩"风格,另一个是20,000个渐变样本.在这组渲染中,我已经消除了点样本的红点,因为它不必要地使图像混乱.

在这里,由于插补器集合的网格结构,您可以真正看到我之前提到的那些插值工件.我应该强调的是,这些伪像在最终轮廓渲染中将是完全不可见的(因为任何两个相邻内插器单元之间的幅度差异小于渲染图像的位深度).

好胃口!!

替代文字

替代文字

language-agnostic algorithm bezier visualization topographical-lines

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

有人对OLAP Internals有所了解吗?

我对数据库内部有一点了解.我之前实际上已经实现了一个小而简单的关系数据库引擎,使用磁盘上的ISAM结构和BTree索引以及所有类似的东西.这很有趣,也很有教育意义.我知道我更加认识到仔细设计数据库模式和编写查询,因为我对RDBMS如何工作有了更多了解.

但我对多维OLAP数据模型一无所知,而且我很难在互联网上找到任何有用的信息.

如何将信息存储在磁盘上?多维数据集包含哪些数据结构?如果MOLAP模型不使用表,列和记录,那么......什么?特别是在高维数据中,哪种数据结构使MOLAP模型如此高效?MOLAP实现是否使用类似于RDBMS索引的东西?

为什么OLAP服务器在处理即席查询时要好得多?可以在OLTP多维数据集中以毫秒为单位处理在普通关系数据库中可能需要数小时处理的相同类型的聚合.该模型的基本机制是什么使这成为可能?

theory algorithm olap cubes data-structures

28
推荐指数
2
解决办法
3550
查看次数

地理定位与IPv6?

我正在开发一个IP地理定位库,它使用IPv4地址的前三个八位字节来确定用户的国家,城市,纬度,经度等.就像一个魅力.

但它不处理IPv6地址,我希望它能够这样做.

有没有办法转换IPv6地址以获得相当于IPv4地址的前三个八位字节,或者它们是否采用完全不同的编号方案,需要完全不同的ipgeo映射?

ipv4 ipv6 geolocation

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

使用Adobe AIR构建插件体系结构

我正在考虑选择Adobe AIR作为即将推出的项目的客户端实现技术.(之前的选择是C#和WPF,但最近我对Flash/Flex/AIR印象非常深刻.)

但是我的产品最重要的功能之一将是它的插件架构,允许第三方开发人员以有趣的方式扩展功能和GUI.

我知道如何在C#中设计架构:插件加载器将枚举本地"app/plugins /"目录中的所有程序集.对于每个程序集,它会枚举所有类,寻找"IPluginFactory"接口的实现.对于工厂创建的每个插件,我会询问它的MVC类,并将其GUI元素(菜单项,面板等)捕捉到现有GUI布局中的相应插槽中.

我想在AIR中完成同样的事情(从本地文件系统加载插件,而不是从Web加载).阅读本文之后,我的理解是,它是可能的,并且基本架构(将SWF加载到沙盒ApplicationDomains等中)与您在.NET中的方式非常相似.

但我对这些陷阱感到好奇.

如果您有任何人使用Flash播放器进行任何动态类加载(最好是在混合flash/flex应用程序中,特别是在AIR主机中),我很想知道您构建插件框架的经验以及遇到棘手情况的地方使用Flash播放器,以及flash,flex和AIR API.

例如,如果有人问我同样的问题,但考虑到Java平台,我肯定会提到JVM没有"模块"或"程序集"的概念.最高级别的聚合是"类",因此在插件系统中创建用于管理大型项目的组织结构可能很困难.我还将讨论多个类加载器的问题,以及每个类加载器如何维护自己独立的加载类实例(具有自己独立的静态变量).


以下是一些仍未解决的具体问题:

1)actionscript"Loader"类可以将SWF加载到ApplicationDomain中.但该appdomain究竟包含什么?模块?类?MXML组件是如何表示的?如何找到实现我的插件界面的所有类?

2)如果您已将插件从主应用程序加载到单独的ApplicationDomain中,从其他应用程序域调用代码是否更加复杂?关于可以通过app -main域间编组层的数据类型是否有任何重要的限制?编组是否过于昂贵?

3)理想情况下,我想将自己的大部分主代码作为插件开发(主应用程序只是一个插件加载shell)并使用插件架构将该功能提升到应用程序中.这会让你内心感到害怕吗?

air flash flex3 plugin-architecture dynamic-loading

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

用于Java的软件Synth库

我最近一直在思考一个我想要研究的音乐导向项目.有点像游戏......有点像工作室工作站(FL Studio,Reason).

我想描述它的最佳方式是:像"吉他英雄",但没有罐头轨道.所有原创音乐 - 由您即时创作 - 但软件将使用其音乐理论知识(以及一些监督学习算法)来确保您的输入变成听起来很棒的东西.

这听起来有点傻,这样解释,但是你去了.这是我认为会成为一个有趣的侧面项目的东西.

无论如何,我正在寻找一个用于生成实际音频的Java库.在sourceforge上浏览,有无数的软件合成器,我不知道该选择哪个.

我的首要任务是它应该听起来令人难以置信......真正丰富,分层,有纹理的合成器,配有大量可配置参数.声学仪器的仿真对我来说并不重要.

我的第二个优先事项是,它应该直接严格地用作库,而不涉及任何GUI.(如果有一个真正令人惊叹的输出的合成器,但它与GUI紧密耦合,那么我可能会考虑从应用程序中删除音频部分,但我宁愿从一个包含很好的库开始).

我知道我可以将MIDI发送到一个独立的合成器,但我认为阅读实际的合成代码并在我学习时学习一点DSP会很酷.

有什么建议?

哦,是的,我在Windows上,所以posix-only的东西是不行的.

谢谢!

java audio

13
推荐指数
1
解决办法
5344
查看次数

敏捷:机器学习项目的用户故事?

我刚刚完成了一个监督学习算法的原型实现,自动为我们公司数据库中的所有项目分配分类标签(大约500万个项目).

结果看起来不错,我已经获得了计划生产实施项目的批准.

我以前做过这种工作,所以我知道软件的功能组件如何.我需要一组网络抓取工具来获取数据.我需要从已爬网文档中提取功能.需要将这些文档分成"训练集"和"分类集",并且需要从每个文档中提取特征向量.这些特征向量自组织成簇,并且簇通过一系列重新平衡操作.等等等

因此,我制定了一个计划,其中包含大约30个独特的开发/部署任务,每个任务都有时间估算.第一阶段的发展 - 忽略了我们希望长期拥有的一些先进功能,但尚不足以将其纳入开发计划中 - 预计将进行大约两个月的工作.(请记住,我已经有了一个工作原型,所以最终的实现比项目从头开始要简单得多.)

我的经理说这个计划看起来不错,但他问我是否可以将任务重新组织成用户故事,原因如下:(1)我们的项目管理软件完全是围绕用户故事组织的; (2)我们的所有调度都是基于将整个用户故事编入sprint,而不是单独调度任务; (3)其他团队 - 比如Web开发人员 - 已经充分利用了敏捷方法,并且他们从将所有软件功能建模为用户故事中受益.

所以我在项目的顶层创建了一个用户故事:

作为系统的用户,我想按类别搜索项目,这样我就可以在庞大而复杂的数据库中轻松找到最相关的项目.

或者这个功能的更好的顶级故事可能是:

作为内容编辑器,我想自动为数据库中的项目创建分类标识,以便客户可以在我们庞大而复杂的数据库中轻松找到高价值数据.

但这不是真正的问题.

对我来说,棘手的部分是弄清楚如何为机器学习架构的其余部分创建从属用户故事.

举个例子......我知道该算法需要两个主要的架构细分:(A)训练和(B)分类.我知道架构的培训部分需要构建一个集群空间.

我读过的所有敏捷开发文献似乎都表明用户故事应该是"提供任何商业价值的最小可能实现".在设计一个最终用户软件时,这很有意义.从小处开始,然后在用户需要其他功能时逐步增加值.

但是,集群空间本身就是零业务价值.爬虫或特征提取器也不是.在部分系统中没有商业价值(不适用于最终用户,也不适用于公司内部的任何角色).只有爬虫和特征提取器才能使用经过训练的集群空间,并且只有在我们开发了附带的分类器时才能使用.

我想可以创建用户故事,其中系统的从属组件充当故事中的用户:

作为一个监督学习的集群空间构建例程,我想要使用特征提取器中的数据,以便我可以存在.

但这似乎很奇怪.作为开发人员(或我们的用户,或任何其他利益相关者),我为这样的用户故事建模有什么好处?

虽然主要故事可以很容易地沿着架构组件边界(爬行器,训练器,分类器等)划分,但我不能从用户的角度考虑任何有用的分解.

你们有什么感想?您如何为复杂,不可分割,非面向用户的组件规划敏捷用户故事?

agile scrum machine-learning user-stories task

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

可复合语法

有很多编程语言支持包含迷你语言.PHP嵌入在HTML中.XML可以嵌入JavaScript中.Linq可以嵌入C#中.正则表达式可以嵌入Perl中.

// JavaScript example
var a = <node><child/></node>
Run Code Online (Sandbox Code Playgroud)

想想看,大多数编程语言都可以建模为不同的迷你语言.例如,Java可以分为至少四种不同的迷你语言:

  • 类型声明langauge(包指令,导入指令,类声明)
  • 成员声明语言(访问修饰符,方法声明,成员变量)
  • 语句语言(控制流,顺序执行)
  • 表达语言(文字,作业,比较,算术)

能够将这四种概念语言实现为四种不同的语法肯定会减少我在复杂的解析器和编译器实现中经常看到的许多意义.

我之前已经为各种不同类型的语言实现了解析器(使用ANTLR,JavaCC和自定义递归下降解析器),当语言变得非常庞大和复杂时,你通常会得到一个huuuuuuge语法,并且解析器实现得到非常难看真的很快.

理想情况下,在为其中一种语言编写解析器时,最好将它作为可组合解析器的集合实现,在它们之间来回传递控制.

棘手的是,通常,包含语言(例如,Perl)为包含的语言(例如,正则表达式)定义其自己的终点标记.这是一个很好的例子:

my $result ~= m|abc.*xyz|i;
Run Code Online (Sandbox Code Playgroud)

在此代码中,主perl代码定义了一个非标准的终端"|" 用于正则表达式.实现与perl解析器完全不同的正则表达式解析器将非常困难,因为正则表达式解析器不知道如何在不咨询父解析器的情况下找到表达式终结符.

或者,假设我有一种允许包含Linq表达式的语言,但不是用分号终止(如C#所做的那样),我想强制Linq表达式出现在方括号内:

var linq_expression = [from n in numbers where n < 5 select n]
Run Code Online (Sandbox Code Playgroud)

如果我在父语言语法中定义了Linq语法,我可以轻松地使用语法前瞻为"LinqExpression"编写一个明确的生成来查找括号外壳.但是我的父语法必须吸收整个Linq规范.这是一个阻力.另一方面,单独的子Linq解析器将很难确定停止的位置,因为它需要为外部令牌类型实现前瞻.

这几乎排除了使用单独的lexing/parsing阶段,因为Linq解析器将定义一组完全不同于父解析器的标记化规则.如果您一次扫描一个令牌,您如何知道何时将控制权传递回母语词法分析器?

你们有什么感想?今天有哪些最佳技术可用于实现不同的,解耦的和可组合的语言语法,以便在较大的父语言中包含迷你语言?

dsl grammar parsing mini-language

8
推荐指数
1
解决办法
826
查看次数

Stripe 优惠券持续时间和订阅计费间隔

我试图了解优惠券在 Stripe 中的工作原理,当应用于具有不同计费间隔的订阅时,官方文档非常不清楚。

条纹可以让你创建订阅plans的是在不同的账单intervalS( ,dailymonthlyyearlyweeklyevery 3 monthsevery 6 monthscustom)。

订阅可以(可选)有试用期,以天为单位。

条纹也可以让你创建coupons,适用于一定的订阅计划durationoncerepeating,或forever)。如果选择repeating,您还可以传递一个数字duration_in_months参数,用于设置折扣的持续时间。

好的,所以令人困惑的部分是订阅和优惠券可以有完全不同的时间间隔:我可以创建一个 25 天免费试用、每周计费周期和为期两个月的优惠券的订阅。如果客户在试用的第 9 天使用优惠券,有多少发票会包含折扣?

判断优惠券是否仍然有效的逻辑是如何工作的?

stripe-payments

8
推荐指数
1
解决办法
1566
查看次数