我正在为Intranet应用程序设计基于HTTP的API.我意识到这是一个非常小的问题,在宏观方案中,但是:我应该使用连字符,下划线或camelCase来分隔URI中的单词吗?
以下是我最初的想法:
骆驼香烟盒
连字符号
下划线
对于一切我都倾向于下划线.大多数大型玩家使用它们的事实令人信服(参见/sf/answers/42592091/).
我正在试验PHP的Doctrine ORM(v1.2).我已经定义了一个班级"酒",有两个孩子类"杜松子酒"和"威士忌".我使用具体的继承(大多数文献中的类表继承)将类映射到三个单独的数据库表.
我试图执行以下操作:
$liquor_table = Doctrine_Core::getTable('liquor');
$liquors = $liquor_table->findAll();
Run Code Online (Sandbox Code Playgroud)
最初,我预计$ liquors是一个包含所有酒类的Doctrine_Collection,无论它们是威士忌还是杜松子酒.但是当我执行代码时,我得到一个空集合,尽管在威士忌和杜松子酒数据库表中有几行.基于生成的SQL,我理解为什么:ORM查询"酒"表,而不是存储实际数据的威士忌/杜松子酒表.
请注意,当我将继承类型切换到列聚合(简单表继承)时,代码可以正常工作.
获取包含所有酒的Doctrine_Collection的最佳方法是什么?
更新
经过一些研究后,看起来我期待Doctrine UNION在幕后执行SQL 操作来组合"威士忌"和"杜松子酒"表中的结果集.
这称为多态查询.
根据此票证,Doctrine 1.x中不提供此功能.它注定要发布2.0版本.(另见CTI的 Doctrine 2.0文档).
因此,根据这些信息,解决这一缺陷的最简洁,最有效的方法是什么?切换到单表继承?执行两个DQL查询并手动合并生成的Doctrine_Collections?
我正在开发一个Web应用程序,它将广泛使用AJAX技术进行客户端/服务器通信......特别是JSON-RPC.Zend Framework正在服务器端使用,它提供了一个很好的JSON-RPC服务器,我想使用它.
我的目标是构建一个可维护的系统,将大量服务器端功能暴露给客户端(javascript),而不会产生不必要的代码重复.我已经看过很多关于如何使用ZF的JSON-RPC服务器的博客文章和教程(见这里和这里),但它们似乎都面向暴露一个小型的公共可用API.代码重复很常见,例如一篇博文有以下暴露方法:
public static function setTitle($bookId, $title) {
$book = new Nickel_Model_Book($bookId);
$book->setTitle($title);
$book->update();
return true;
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢有两种setTitle方法的事实.如果一个方法签名发生变化,另一个必须保持同步...如果你的API很广泛,似乎是一个可维护性的噩梦.在我看来应该有一个Book类,有一种setTitle方法.
我最初的想法是为@export我想要暴露的方法/类添加一个docblock注释.当我决定公开setTitle方法时,我只是添加注释而不是新方法.
我看到的一个潜在问题涉及对象持久性.在服务器端,setTitle设置对象的title属性是有意义的......但是在update()调用之前不会将其保留在数据库中.客户端,调用setTitle应立即影响数据库.一种可能的解决方案是修改所有访问器,使得它们采用可选的第二个参数,表示修改应立即更新数据库:
function setTitle($title, $persist = false) {
$this->title = $title;
if ($persist) $this->update();
}
Run Code Online (Sandbox Code Playgroud)
某种代理类可以确保$persist为所有客户端RPC调用设置标志.
另一个问题是PHP对象的序列化.在服务器端,进行OO风格的$book->setTitle("foo")调用book.setTitle(1234, "foo")是有意义的,但由于缺乏状态,客户端是有意义的(其中1234是本书的ID).我的解决方案是让上述代理类负责以某种方式book.setTitle(1234, "foo")变成:
$book = new Book();
$book->load(1234);
return $book->setTitle($title);
Run Code Online (Sandbox Code Playgroud)
我觉得这个问题必须先解决或讨论过......但我在网上找不到很多资源.这看起来像是一个理智的解决方案吗?
考虑一个PHP Web应用程序,其目的是接受用户启动通用异步作业的请求,然后创建一个工作进程/线程来运行该作业.作业不是特别占用CPU或内存,但预计会经常阻塞I/O调用.每秒应该启动不超过一个或两个作业,但由于运行时间长,可能会同时运行许多作业.
因此,工作并行运行至关重要.此外,每个作业都必须由负责杀死挂起的工作人员,根据用户请求中止工作人员等的经理守护程序进行监控.
实现这样的系统的最佳方法是什么?我可以看到:
我想通过使某些类可观察来促进我的PHP代码中的松散耦合.Symfony的EventDispatcher组件看起来很有前途,SPL SplObserver/SplSubject对也是如此.
最好的方法是什么?我可以看到几种不同的可能性:
(1)将EventDispatcher实例注入每个可观察类(跟踪全局EventDispatcher实例):
class Foo
{
public function __construct($dispatcher)
{
$this->dispatcher = $dispatcher;
}
public function bar()
{
$this->dispatcher->dispatch(...);
}
}
Run Code Online (Sandbox Code Playgroud)
(2)让observable类扩展EventDispatcher类:
class Foo extends EventDispatcher
{
public function bar()
{
$this->dispatch(...);
}
}
Run Code Online (Sandbox Code Playgroud)
(3)使用SplObserver/SplSubject - 直截了当,但不如EventDispatcher组件灵活
考虑这个课程:
class Widget
{
Widget::Widget();
bool initialize();
}
Run Code Online (Sandbox Code Playgroud)
A Widget具有以下特征:
initialize() 必须调用才能完全构造initialize() 可能会失败initialize() 太贵了鉴于此,我在工厂函数中封装创建,始终返回相同的Widget实例:
Widget* widget() {
static auto w = new Widget;
static auto initialized = false;
if (!initialized) {
if (!w->initialize()) {
return nullptr;
}
initialized = true;
}
return w;
}
Run Code Online (Sandbox Code Playgroud)
返回类型应该widget()是什么?
特别是,我想以某种方式明确表示返回的生命周期Widget将超过任何调用者,但不会引用内部实现.
std::shared_ptr<Widget>.这是自我记录的,但我不喜欢它会引入完全不必要的引用计数开销.std::unique_ptr<Widget>使用自动删除功能返回a .我认为如果调用者将其转换为#,则它与#2具有相同的感知问题shared_ptr.从Eclipse CDT(Juno)中,如何快速导航到函数/方法声明的实现?
该ctrl-click键盘快捷键可以让我从实施(在浏览.cxx文件)的声明(.h文件).我想要相反的行为.
Apache Spark 据称从 Spark 2.3.0 开始支持 Facebook 的 Zstandard 压缩算法(https://issues.apache.org/jira/browse/SPARK-19112),但我无法实际读取 Zstandard 压缩文件:
$ spark-shell
...
// Short name throws an exception
scala> val events = spark.read.option("compression", "zstd").json("data.zst")
java.lang.IllegalArgumentException: Codec [zstd] is not available. Known codecs are bzip2, deflate, uncompressed, lz4, gzip, snappy, none.
// Codec class can be imported
scala> import org.apache.spark.io.ZStdCompressionCodec
import org.apache.spark.io.ZStdCompressionCodec
// Fully-qualified code class bypasses error, but results in corrupt records
scala> spark.read.option("compression", "org.apache.spark.io.ZStdCompressionCodec").json("data.zst")
res4: org.apache.spark.sql.DataFrame = [_corrupt_record: string]
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能读取这样的文件?
环境是 AWS EMR 5.14.0。
我正在开发一个需要向远程服务器发送命令的应用程序.使用大量SSH客户端库可以轻松发送命令.
但是,我希望在每个命令之间保留shell状态(即当前工作目录,环境变量等).我见过的所有客户端库都没有这样做.例如,以下是不能执行我想要的代码示例:
use Net::SSH::Perl;
my $server = Net::SSH::Perl->new($host);
$server->login($user, $pass);
$server->cmd('cd /var');
$server->cmd('pwd'); # I _would like_ this to output /var
Run Code Online (Sandbox Code Playgroud)
在发送命令之间将执行其他任务,因此组合命令$server->cmd('cd /var; pwd')是不可接受的.
请考虑以下HTML标记.在我测试过的大多数浏览器中,第二个列表的显示方式不同(每个列表项都缩进).
两个列表之间的唯一区别与CSS font-style属性有关,我不希望更改列表布局.这种行为有解释吗?
<!DOCTYPE html>
<html>
<head>
<style>
body {font-family: sans-serif}
span {float: left}
ul.bad span {font-style: italic}
</style>
</head>
<body>
<ul>
<li><span>foo</span></li>
<li><span>foo</span></li>
<li><span>foo</span></li>
<li><span>foo</span></li>
</ul>
<ul class="bad">
<li><span>foo</span></li>
<li><span>foo</span></li>
<li><span>foo</span></li>
<li><span>foo</span></li>
</ul>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) php ×3
c++ ×2
ajax ×1
amazon-emr ×1
apache-spark ×1
api ×1
asynchronous ×1
c++11 ×1
css ×1
doctrine ×1
eclipse ×1
eclipse-cdt ×1
factory ×1
gearman ×1
hadoop2 ×1
html ×1
javascript ×1
json-rpc ×1
lifetime ×1
oop ×1
openssh ×1
perl ×1
rest ×1
restful-url ×1
rpc ×1
ssh ×1
symfony1 ×1
task-queue ×1
uri ×1
url ×1
zstandard ×1