在最近的一个问题中,我问我被引导到这个网站:http://developer.android.com/design/index.html
令人惊叹的网站,但它没有回答一个特定问题:在应用程序代码设计中应用的最佳实践/设计模式是什么?
我对MVC/MVP等进行了查找,虽然这会产生结果,但它只是关于所述模式的实际实现,而不是其他可用选项等.
我尝试反编译和分析Android安装的各种应用程序,例如Market,但我无法在Google的代码中找到结构.有没有人有关于如何以可维护,可扩展等方式设置Android应用程序的提示.我知道这些单词的广泛含义,并且它们对程序员来说纯粹是主观的,但我不能用不同的方式表达它.
我已经遇到的一个最佳实践是每个Activity有一个视图,并且在应用程序中有很多活动可以使背板正常工作,但除此之外,我不知道如何实际设置Activity本身.
我正在创建一个严重依赖图节点树的工具.当前的实现是用Java完成的,我将它移植到C#上的通用代码库中,因此它可以被各种渲染实现使用,也因为我想使用WPF的强大功能来实现用户友好的界面.
浏览了一天之后,我遇到了各种方法来通过WPF绘制矢量图形.
这个人讲的是WPF开发人员可以选择的不同层.因为我想首先使用WPF PURELY进行渲染,所以我想开发"Visual Layer".
然后我遇到了类似的东西: DrawingVisual, GeometryDrawing, FrameworkElement/UIElement/Shapes
所以,我对所有不同的实现有点不知所措,这些实现最终以完全不同的方式完成相同的操作.
Graph-Node库已经用它的所有逻辑(包括碰撞检测和用鼠标拖动)移植到C#.因为它是用图形渲染器(如XNA,SlimDX,OpenTK等)制作的,所以在性能方面实现WPF渲染器的最佳方式(如同,它将绘制图形库告诉它的任何东西)画画?
基本上,生成的WPF控件充当画布,但它必须是SUPER轻量级,除了为我提供绘制我的圆圈,线条和其他形状的方法之外,没有任何简洁的WPF功能:)
编辑:
我基本上想知道:要走的路是什么?我是否将Canvas扩展为我的图形的"主机",然后添加我的UIElement的自定义实现?或者我可以拥有一个可以绘制一切的课程(例如,一个超级超级超级图形).就像在GDI中覆盖OnPaint或在Java中覆盖Paint-method(它使Graphics对象可以完成所有操作).
我有一个 Git 存储库,它使用第三方库的子模块。这个第三方库也使用子模块。
实际上,我在第 3 方子模块之一中发现了一个非常隐蔽的错误,这实际上是一个 2 行修复程序,以使其适合我的情况。
如何在我的实际 Git 存储库中保留此更改,而无需分叉第 3 方库、更新子模块 URL 并将其指向另一个分叉,以便我可以提交并修复错误?我可以覆盖 Git 存储库中的第 3 方子模块 URL 吗?
如果不可能的话,我可能最终会进行一个预构建事件,将我的文件版本复制到正确的位置,但这感觉非常老套……但我不喜欢为了一个文件而维护两个分叉。总体来说第三方库也运行得很好。
我知道我可以提出拉取请求来修复错误,但假设作者对仅针对我的特定情况修复某些内容的修复不感兴趣,这并不是不合理的 - 然而,我仍然想要这个在我的存储库中修复。
对于我的一年级学生,我提供了一个使用 Revealing Module Pattern 编写的基于 ES5 的简单库。这是“主”模块/命名空间的一个片段,它将容纳其他扩展:
window.Library = (function ($) {
if (!$) {
alert("The Library is dependent on jQuery, which is not loaded!");
}
return {};
})(window.jQuery);
Run Code Online (Sandbox Code Playgroud)
这适用于几乎 99.9% 的 Web 开发新手,并且没有将 ES6 等花哨的东西与 Webpack 或 Babel 结合使用。
0.1% 现在要求我提供基于 ES6 的版本,可以正确导入。我很乐意提供这个,但我有点坚持如何最好地解决这个问题。
我显然想保持 ES5 的方式,所以我的学生可以使用脚本标签包含文件并Library.SomeExtension.aFunction();
在任何他们喜欢的地方输入。最重要的是,一些扩展依赖于 jQuery,它以与上面的代码片段类似的方式注入。
我现在正在寻找一些可维护的方法来获得两全其美的方法,使用一个代码库,将 jQuery 作为依赖项。我想给 99.9% a window.Library
,而我想给 0.1% 一种使用import Library from 'library'
.
我可以用一个 JS 文件来完成这两个任务吗?或者我需要一个特殊的 ES6 版本(不是问题)?最重要的是:我将如何以可以支持两种情况的方式重新调整我的代码(都类似于上面的代码段)?
任何和所有指针将不胜感激!
编辑:正如一个方面说明,我已经有一个gulpfile.js
在其中贯穿这个库的地方Babel
,minifiers
和其他的东西。所以必须扩展它来解决上述问题不是问题!
我的任务是修改一个使用DirectShow进行视频渲染的应用程序.旧的应用程序工作正常,但它开始显示年龄.
由于我有游戏背景,我想我应该这样做.在使用不同的技术制作了一堆原型之后,我非常确定我可以提取视频到纹理的渲染并使用DirectX来满足所有客户的请求.
但是,我现在已经到了必须选择一种技术的地步,我不能再迷失了......
DirectShow显然是最古老的,但仍然运行良好,也主要是因为可用的大量编解码器.
媒体基金会已经推出了Windows Vista,直到Windows 8还有一个名为"媒体会话"的东西,之后他们推出了"媒体引擎".如果我是正确的编解码器被称为MFT?实际上有哪些网站可以像free-codecs.com一样提供这些网站?
除了这两种技术之外,还有DXVA,它允许您将视频解码卸载到GPU.目前,我遇到了3种不同的类型.DXVA1是自XP以来一直存在的实现,DXVA2是更新的API.但什么是DXVA-HD?它比DXVA2更新还是同等名称?
我真的想转向媒体基金会,开箱即用的编解码器非常适合客户想要使用的格式.我所关心的是为它获取编解码器是多么容易...... Windows 8+默认媒体播放器是否仍然具有DirectShow和MF渲染路径并且可以即时交换它们还是微软完全逐步淘汰DirectShow?
我也无法完全理解DXVA应该如何工作.鉴于我想基本上在游戏中渲染视频,只有让所有渲染实际发生在GPU上并将应用程序逻辑保留在CPU上才有意义,但我真的找不到任何关于如何使用Media的好例子基础.这主要是因为我不知道DXVA2和DXVA-HD之间的区别.Windows 7 SDK附带了所有3个实现的示例......
如果有人能够以粗体回答我的问题,请纠正我的错误信息,并指出我正确的方向(DirectX + Media Foundation + DXVA-无论如何),我将非常感激!它可以像"结合Windows 7 SDK的这3个示例来获得您想要的"一样简单.
整个任务的目标是再次获得顶级形式的应用程序,我想绝对肯定我会选择像DirectShow已经拥有的下一个十年的技术:P
我做了一个非常简单的Yes/No RadioBox控件.
在它的代码背后我有以下内容BindableProperty
:
public static readonly BindableProperty SelectedValueProperty = BindableProperty.Create(
"SelectedValue",
typeof(int),
typeof(YesNoView),
0,
BindingMode.TwoWay);
Run Code Online (Sandbox Code Playgroud)
它的属性:
public int SelectedValue
{
get { return (int) GetValue(SelectedValueProperty); }
set { SetValue(SelectedValueProperty, value); }
}
Run Code Online (Sandbox Code Playgroud)
此属性使用以下内容绑定在ContentView-XAML中:
<DataTrigger Binding="{Binding SelectedValue}" Value="0" TargetType="Image">
<Setter Property="Source" Value="radiobutton_checked.png" />
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)
每当我在某个页面中使用我的ContentView并将其设置SelectedValue
为常量值时,一切正常!
但是,当我使用{Binding SomeValue}
而不是常量值时,在SomeValue
我使用ContentView的页面上的属性(带有通知),它将简单地拒绝做任何事情.每当我设置SomeValue
一些值时,它永远不会到达ContentView,它让我疯狂为什么它不起作用.
即使我调整BindableProperty也指定了propertyChanged事件,除非我恢复到Xaml中的常量值而不是绑定,否则它永远不会被触发.
任何人都可以解释为什么会发生这种情况并且不像我期望的那样工作吗?
编辑:我应该在页面和视图中添加,BindingContext设置为此.
我已经用Javascript编程了一段时间.最近我制作了一个非常庞大的jQuery项目并应用了这篇精彩文章中描述的模块模式:http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
这一切都很好,花花公子,代码看起来光滑,易于管理,但我觉得它可能会更好.我花了一天时间寻找一些Javascript框架,主要是:
我偶然发现了像AngularJS,KnockOutJS,SpineJS,JavascriptMVC等框架.真正引人注目的 - 并且备受赞誉的是EmberJS.
我决定尝试一下,但这并不容易.EmberJS教程的可用性非常有限.经过很长一段时间的努力,我设法让一些东西运转起来,我喜欢EmberJS的作品!只有一件事我似乎无法弄清楚 - 这也是我的问题:如何扩展Ember命名空间(使用Ember.Application.create制作)?
为了澄清:我的项目的旧版本有一个Core-namespace和一个Util-namespace.两者都包含其所有其他类可以使用的各自的功能.如何在初始命名空间之上使用具有函数的Core-和Util-命名空间?
我只是这样做:
MyNamespace = Ember.Application.create();
MyNamespace.Core = Ember.Application.create();
MyNamespace.Util = Ember.Application.create();
Run Code Online (Sandbox Code Playgroud)
或者是其他东西?
这是我在StackOverflow上的第一个问题,欢呼!老实说,我每天都会使用StackOverflow来处理我的工作和个人编程之谜.99.9%的时间我实际上也找到了我需要的答案,这太棒了!
我当前的问题实际上让我感到困惑,因为我似乎找不到任何实际可行的东西.我已经阅读了GameDev.net上的几篇帖子,并在网络上找到了其他资源,但无法对其进行排序.
我正在将我为XNA编写的小型2D引擎移植到SlimDX(目前只是DirectX9),这是一个很好的举措,因为我在短短几天内学到了更多关于DirectX内部工作的知识.与XNA合作六个月.我完成了大部分基本渲染功能,并且实际上设法重新创建了XNA SpriteBatch,其中包含大量额外功能(我在XNA中真的很想念).
我正在努力工作的最后一件事是从给定纹理中提取源矩形并将其用于平铺.原因:当没有平铺时,您可以随意使用UV来获取您想要显示的源(例如:0.3; 0.3到0.5; 0.5),但是当平铺时需要UV来平铺(0; 0到2; 2)表示平铺图像两次)因此需要剪切纹理.
总而言之,我尝试使用以下内容:
DataRectangle dataRectangle = sprite.Texture.LockRectangle(0, LockFlags.None);
Format format = sprite.Texture.GetLevelDescription(0).Format;
byte[] buffer = new byte[4];
dataRectangle.Data.Read(buffer, ([y] * dataRectangle.Pitch) + ([x] * 4), buffer.Length);
texture.UnlockRectangle(0);
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的像素,但似乎都给出了伪造的数据.例如,我实际上尝试使用我当前的头像来查看我从DataRectangle获得的缓冲区是否与图像中的实际像素匹配,但没有运气(甚至检查格式是否正确,它是什么).
我究竟做错了什么?有没有更好的方法呢?或者我的紫外线故事是错误的,它可以解决比平铺之前切割源矩形更简单吗?
感谢您的时间,
Lennard Fonteijn
更新#1
我实际上设法使用以下来自字节数组的转换将像素数据导出到Bitmap:
int pixel = (buffer[0] & 0xFF) | ((buffer[1] & 0xFF) << 8) | ((buffer[2] & 0xFF) << 16) | ((255 - buffer[3] & 0xFF) << 24);
Run Code Online (Sandbox Code Playgroud)
所以数据似乎并不像我想象的那样虚假.然而,我的下一个问题是抓取源矩形中指定的像素并将它们复制到新纹理.我试图剪切的图像是150x150,但由于某种原因,它被拉伸到256x256图像(2的幂),但是当实际尝试访问超过150x150的像素时,它会抛出OutOfBounds异常.此外,当我实际尝试创建大小为256x256的第二个空白纹理时,无论我放入什么,它都会变成完全黑色.
这是我目前的代码:
//Texture texture = 150x150
DataRectangle dataRectangle = texture.LockRectangle(0, LockFlags.None);
SurfaceDescription surface …
Run Code Online (Sandbox Code Playgroud) 这让我感到困惑了一段时间,但我设法继续向前推进.不幸的是,时机已到,我真的需要这个.
我的问题是:EmberJS/Handlebars是否提供了一个在DOM中更新和显示视图时调用的事件?
我需要使用此事件来运行一些jQuery的东西,如addClass,sortable等.我尝试过使用Live jQuery插件,但它不适用于Handlebars.最重要的是我认为所说的事件已经存在于某个地方,我似乎无法找到它.
我正在开发一个允许导入文件本地化为其他语言的系统.
这主要是一个私有项目,可以获得MVC3,EntityFramework,LINQ等等.因此,我喜欢做一些疯狂的事情来为最终结果增添趣味,其中一件事就是识别相似的字符串.
想象一下,你有以下的字符串列表 - 从我过去曾经使用过的游戏中借来的:
正如您所看到的,一旦用户翻译了前4个字符串,以下4个字符串就有很多相似之处,在这种情况下:
考虑前4个字符串确实已经翻译,当用户从列表中选择第5个字符串时,我可以使用什么样的算法或技术向用户显示"类似"的子标题下的第1个字符串(可能还有其他字符串)字符串"?
编辑 - 关于Levenshtein距离的一点评论:我目前正在瞄准数据库中的10k字符串.Levenshtein Distance比较每串的字符串,因此在这种情况下10k x(10k -1)可能的组合.我将如何以可行的方式处理这个问题?这个特定算法有更好的解决方案吗?
在花了无数个小时来了解错误的核心后,我最终将问题归结为在 .NET 5 中使用string.Compare
with的问题StringComparison.InvariantCultureIgnoreCase
。
考虑以下两个 dotnetfiddle:
运行 .NET 4.7.2 时,结果为 -1,运行 .NET 5 时,结果为 1。
经过一番浏览,这导致了以下通知:
所以,按照这个,-1 的结果是 NLS 版本,而 1 的 .NET 5 结果是 ICU 版本。
但是,当我在 .NET 5 模式下启动 Azure 应用服务时,上述代码在 Razor 页面中的结果是 -1,也就是:NLS 版本。
这可能会导致各种奇怪的问题,因为两个不同的系统会导致意想不到的结果。
当我将以下内容添加到我的项目文件中时,如上一篇文章所述,我的本地环境也输出 -1。
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
无论我在 Azure 中使用什么样的配置,它都会一直输出 -1。
说来话长,Azure 出了点问题。根据文档,我的 Windows 版本足够新,可以启用 ICU。看起来 Azure 应用服务要么使用强制 NLS 模式,要么正在运行我的本地机器没有的某些 ICU 版本。
任何人都知道我如何确定 Azure 正在使用哪个 …
我慢慢开始了解EmberJS.不幸的是,我遇到了一个似乎无法解决的问题.
我有一个复杂的数据结构,我通过JSON检索,有多个嵌套数组,我似乎无法嵌套#each帮助器.
我设置了我的模板如下(缩短):
{{#each Servers}}
<div class="server">
<h1>{{unbound Name}}</h1>
Time: {{jsonDate CurrentTime}}<br />
<table>
{{#each Processes}}
<tr>
<td>{{unbound Name}}</td>
<td>{{unbound Location}}</td>
</tr>
{{/each}}
</table>
</div>
{{#/each}}
Run Code Online (Sandbox Code Playgroud)
第二个循环似乎没有运行,当我修改Ember以记录消息时,#第二个循环被调用,但似乎它不知道该怎么做.
当我用#Queue替换第二个#each时,它可以工作,但是在-element之前,为列表中的每个元素插入一个"undefined"-text(减1).
当我将#each移动到另一个循环之外并放入Queue的直接路径(例如Servers.0.Queue)时,它工作正常,所以它肯定不是数据.
我该如何解决?如果无法嵌套#each,我如何为其他方法保护"undefined"-text?还有其他可能吗?
PS.我出于性能原因使用unbound,我一次更新Servers对象并观察它,因此不需要使用绑定属性 - 因为我注意到它显着降低了浏览器性能(13%CPU使用率,而未绑定给了我0 %).不确定是否相关.
编辑
请参阅:http://jsfiddle.net/PTC9B/7/
ServerOverview2a方法毕竟工作,显然ServerOverview2b生成我之前描述的"未定义"文本 - 可能应该为此提交错误报告?
我现在的问题是:为什么嵌套#each不起作用而#Processes呢?
我在基于 Canvas 的 WPF 中制作了一个非常漂亮的 NodeGraph,现在我正在通过右键单击菜单添加一些漂亮的功能。
这些菜单是上下文相关的。这意味着右键单击图形的背景将显示图形 ContextMenu,而右键单击图形中的节点将显示节点 ContextMenu,或者如果该节点有任何带菜单的子控件,则显示这些。
我已经推迟这个特定问题一段时间了,但不能再忽视它了。如标题所述:当我右键单击节点时,将显示图形的上下文菜单。如果我禁用图表的上下文菜单,节点就会正常显示。
这让我相信这是父控件优先打开上下文菜单的问题。我已经尝试过重写父控件和子控件中的鼠标事件并将它们设置为处理,但我就是不明白!
谁能帮助我摆脱这个非常烦人的问题?
c# ×5
javascript ×4
ember.js ×3
directx ×2
jquery ×2
wpf ×2
xaml ×2
android ×1
android-4.0-ice-cream-sandwich ×1
azure ×1
contextmenu ×1
directshow ×1
directx-9 ×1
dxva ×1
ecmascript-6 ×1
es6-modules ×1
git ×1
graph ×1
graphics ×1
icu ×1
java ×1
localization ×1
nls ×1
similarity ×1
slimdx ×1
video ×1
xamarin ×1