使用gRPC向客户端发送有关错误的更多详细信息的模式是什么?
例如,假设我有一个用于注册用户的表单,用于发送消息
message RegisterUser {
string email = 1;
string password = 2;
}
Run Code Online (Sandbox Code Playgroud)
电子邮件必须格式正确且唯一,密码长度必须至少为8个字符.
如果我正在编写JSON API,我将使用以下正文返回400错误:
{
"errors": [{
"field": "email",
"message": "Email does not have proper format."
}, {
"field": "password",
"message": "Password must be at least 8 characters."
}],
}
Run Code Online (Sandbox Code Playgroud)
并且客户端可以向用户提供好的错误消息(即通过突出显示密码字段并特别告诉用户他们输入的内容有问题).
有了gRPC有没有办法做类似的事情?似乎在大多数客户端语言中,错误会导致抛出异常,无法获取响应.
例如,我喜欢类似的东西
message ValidationError {
string field = 1;
string message = 2;
}
message RegisterUserResponse {
repeated ValidationError validation_errors = 1;
...
}
Run Code Online (Sandbox Code Playgroud)
或类似的.
我有多个BlockingQueues包含要发送的消息.是否可以减少消费者而不是队列?我不想循环遍历队列并继续轮询它们(忙等待)并且我不希望每个队列都有一个线程.相反,我希望有一个线程在任何队列上有消息时被唤醒.
几个星期前,我和我的钢琴老师正在互相提出关于元音乐软件的想法.这个想法是这样的:
有一个系统从一堆乐器输入midi输入,并将输出推送到扬声器和灯.该系统上运行的软件分析它所获得的midi数据,并根据作曲家设置的触发器确定要使用的声音(当我在2秒钟内演奏F7和弦3次时,从大键琴声音切换到钢琴声音),踏板或音乐的实时实时分析.它将以类似的方式根据乐器的性能和声音控制灯光 - 音乐家只需模糊地指定他们想要的东西 - 并且他们演奏的实时分析将完成其余的工作.在程序上,程序生成的音乐也可以与音乐家一起播放.从本质上讲,该软件将与表演者一起演奏,其中一个指导另一个.
我是即兴爵士乐的忠实粉丝.其他艺术形式缺乏的即兴的一个特征是它的时间性.一幅画可以在画完10或1000年后欣赏,但音乐(特别是演奏音乐)与表演有关,因为它是创作.我认为我所描述的软件会对性能产生很大的影响,因为播放完全相同的部分每次都会导致完全不同的节目.
所以,现在提出问题.
我疯了吗?
是否存在可以执行任何或所有这些操作的软件?我做了一些研究,但没有发现任何事情.该系统的关键是它在性能期间运行.
如果我写这样的东西,像Python这样的脚本语言是否足够快以进行我需要的计算?据推测,它将在一个相当快速的系统上运行,并且可以利用英特尔不断发布的2 ^ n核心处理器.
你们中的任何人都可以分享你们与乐器和灯光等接口的经验和建议吗?
有任何想法或建议吗?冷酷而严厉的批评?
感谢您花时间阅读本文,以及任何建议!(对不起标签中的笑话,我无法抗拒.)
我有一个代表颜色的MxN数组(比如RGBA格式,但这很容易改变).我想将它们转换为MxN位图或其他可以渲染到屏幕的其他东西(例如OpenGL纹理).有没有快速的方法来做到这一点?循环遍历数组并将它们绘制到画布上太慢了.
我在myenum.h中有一个简单的枚举:
enum MyEnum {
ONE,
TWO,
THREE
};
Run Code Online (Sandbox Code Playgroud)
问题是,当我将它映射到Python时,我只能通过模块名称访问枚举,而不是通过MyEnum.因此值ONE,TWO,THREE包含在我定义的任何其他函数中,而不是包含在MyEnum中.
我的api.i文件是:
%module api
%{
#include "myenum.h"
%}
%include "myenum.h"
Run Code Online (Sandbox Code Playgroud)
我用SWIG生成
swig -builtin -python api.i
Run Code Online (Sandbox Code Playgroud)
并将其导入Python
import _api
Run Code Online (Sandbox Code Playgroud)
现在我必须使用_api模块中的枚举值:
_api.ONE
_api.TWO
_api.THREE
Run Code Online (Sandbox Code Playgroud)
虽然我想像他们一样使用它们
_api.MyEnum.ONE
_api.MyEnum.TWO
_api.MyEnum.THREE
Run Code Online (Sandbox Code Playgroud)
有谁知道我怎么能做到这一点?
我试图使用ListView创建ListView滚动的背景.我的方法是基于货架上的这个课程,但在货架上一切都有相同的高度,我无法做出同样的保证.
我有这样的活动:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView) findViewById(R.id.listView);
List<String> items = new ArrayList<String>();
for(int i=0; i < 100; ++i) {
items.add("Hello " + i);
}
CustomArrayAdapter adapter = new CustomArrayAdapter(this, items);
listView.setAdapter(adapter);
}
}
Run Code Online (Sandbox Code Playgroud)
CustomArrayAdapter的位置是:
public class CustomArrayAdapter extends ArrayAdapter<String> {
private List<Integer> mHeights;
public View getView(int position, View convertView, ViewGroup parent) {
//snip
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是在适配器中使用视图行的高度填充mHeights.
我的主要尝试是在getView()中执行此操作:
if(row.getMeasuredHeight() == 0) {
row.measure(
MeasureSpec.makeMeasureSpec(0, MeasureSpec.EXACTLY), …Run Code Online (Sandbox Code Playgroud) 我在Windows上安装了PyCharm 2.7.3,我正在尝试在Linux机器上远程开发应用程序.
到目前为止,我可以运行简单的程序,但是我正在尝试设置我的PYTHONPATH,而且似乎PyCharm特别忽略了这个配置.
在我的运行配置下,我尝试过设置PYTHONPATH=/path/to/my/libs,但是如果我从Python打印这个环境变量os.environ,它会被忽略.例如ASDF=42,如果我设置了另一个环境变量,则按预期打印该值 - 因此它与PYTHONPATH特别相似.
在解释器下,我尝试在"路径"选项卡下添加它,但此选项卡仅支持Windows路径,因此它似乎只是本地的.
import os
if __name__ == '__main__':
print os.environ['PYTHONPATH']
print os.environ
Run Code Online (Sandbox Code Playgroud)
该程序第一行的输出根据运行配置中的复选框进行更改,全部使用 PYTHONPATH=/path/to/my/libs
使用Add content roots to PYTHONPATH和Add source roots to PYTHONPATH检查,并且PYTHONPATH=/path/to/my/libs,第一行输出是我的项目的远程根目录 - 但仍然不是我的lib目录.
如果取消选中源根框,则路径保持为空(但变量设置为空字符串).
我究竟做错了什么?
我们的想法是拥有一个项目列表,在单击项目后,ProgressBar将在任务完成时慢慢填充.例如,列出文件列表,每个文件都有一个"下载"按钮.单击下载按钮时,将在后台下载文件,并填写进度条,显示文件完成的接近程度.
为了实现这一点,我创建了一个AsyncTask,偶尔会在适配器上调用notifyDataSetChanged来重绘它.虽然单击一个按钮后可以正常工作,但在AsyncTask完成之前,我无法单击ListView中的其他按钮.有人可以告诉我我做错了什么吗?
我在冰淇淋三明治上的模拟器(x86)上运行它.
我有一个DownloadItem来表示下载的进度(为简洁起见,下面的代码是简化的):
class DownloadItem {
public String name; // Name of the file being downloaded
public Integer progress; // How much is downloaded so far
public Integer length; // Size of the file
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个ArrayAdapter,它为ListView调整DownloadItem列表:
class DownloadArrayAdapter extends ArrayAdapter<DownloadItem> {
List<DownloadItem> mItems;
public DownloadArrayAdapter(List<DownloadItem> items) {
mItems = items;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null) {
// Inflate
Log.d(TAG, "Starting XML inflation");
LayoutInflater inflater = (LayoutInflater) …Run Code Online (Sandbox Code Playgroud) 我发现我几乎总是希望在路由更改中保留范围,因此,我发现我几乎停止使用控制器,除了将所有内容转发到服务之外.我的控制器最终看起来像这样:
app.factory('CtrlAService', function() {
return {
scope: {},
};
});
function CtrlA($scope, CtrlAService) {
$scope.data = CtrlAService.scope;
}
Run Code Online (Sandbox Code Playgroud)
也就是说,我的控制器所做的就是将变量绑定到服务变量,而不是绑定一个或两个函数 - 我不使用控制器来做任何事情.
这种方法是否正确,如果没有,有什么更好的方法来实现这一目标?
我在这里做了一个示例应用程序:http://jsfiddle.net/Wc22k/1/
我很好奇Google Python样式指南中有关属性的建议之一.
在其中,他们给出了以下示例:
class Square(object):
"""A square with two properties: a writable area and a read-only perimeter.
To use:
>>> sq = Square(3)
>>> sq.area
9
>>> sq.perimeter
12
>>> sq.area = 16
>>> sq.side
4
>>> sq.perimeter
16
"""
def __init__(self, side):
self.side = side
def __get_area(self):
"""Calculates the 'area' property."""
return self.side ** 2
def ___get_area(self):
"""Indirect accessor for 'area' property."""
return self.__get_area()
def __set_area(self, area):
"""Sets the 'area' property."""
self.side = math.sqrt(area)
def ___set_area(self, area): …Run Code Online (Sandbox Code Playgroud) python properties decorator google-style-guide python-decorators
android ×3
python ×3
java ×2
algorithm ×1
android-4.0-ice-cream-sandwich ×1
angularjs ×1
c ×1
composition ×1
concurrency ×1
decorator ×1
grpc ×1
midi ×1
opengl-es ×1
properties ×1
pycharm ×1
swig ×1