Seaside 刚刚发布了即将推出的3.0版本的候选版本,所以它再次出现在我的雷达上.由于我正在考虑将来用于未来项目的Web框架,我想知道是否需要考虑这个问题.唉,Seaside的大部分宣传都来自'07,这可能是网络的一代或两代.所以我希望这里的社区可以回答一些问题
当您的大部分工作流程主要使用HTML时,基于延续的框架非常好,例如表单提交.对于今天的JavaScript环境来说,这几乎不值得.
Squeak能够处理合理的工作量吗?从这里和其他地方的其他问题来看,似乎对于适当的扩展,另一种实现(Gemstone等)从长远来看可能会更好,但我不知道它有多远.会议似乎相当昂贵.
我知道比较很难,但是你在网上找到的大多数文章都将海边和Rails并列.像Scala/Lift,Clojure/Compojure或Erlang/Nitrogen这样的组合会如何呢?
在完成整个"企业"编程一段时间之后,我对语言本身感到非常失望,如果我不得不回到它,我总是感到非常受阻.你的普通Android应用程序的项目大小并不太吓人,而且库的编码风格实际上相当不错,但如果我能避免使用Java,我肯定会这么做.
这就是问题:我可以避免吗?虽然桌面和服务器上有很多JVM语言可供选择,但Dalvik VM和设备本身也有一些限制.在JIT中2.2这似乎有点好一点,但限制自己到最前沿将是一个相当苛刻的决定.
我所知道的唯一替代方案似乎是Scala.我有可能失踪吗?Clojure似乎完全符合我在Dalvik上面所说明的问题,但由于AppInventor是基于Kawa构建的,因此移动平台上的Lisp可能有希望吗?
还有哪些其他语言可以使用或朝这个方向迈进?
我正在尝试为一个更大的应用程序创建一个小型Web服务来处理一些常见的运输操作(费率,包创建,标签),因此我在选择一种语言来编写它时非常灵活(Python,Ruby) ,Java,Perl,甚至PHP,如果有必要的话).但我还没有找到任何支持该愿望清单的一个不错的子集的库或模块.shopify的Active Shipping仅支持跟踪和获取费率.大多数CPAN模块都很古老......我可以自己做标签打印,只是一个ZPL模板的例子.但实际上创造出货的东西真的非常有用.许多不同的API调用,运输方法之间的差异等.
如果它足够灵活,也许可以从某些网店软件中取出一些东西.我不敢相信没有人为此写过一个全面的包装器.
是否有可能将块传递给Moose方法?在标准的Perl中,我可以使用这样的原型定义一个函数
sub fn (&) {
my $code =\&{shift @_};
$code->();
}
Run Code Online (Sandbox Code Playgroud)
然后将一个块传递给函数而没有显式sub
引用,即fn { say "Hi there, world" }
.
我认为这只有在子程序是第一个参数的情况下才有可能,并且因为这总是$self
使用Moose方法,所以它似乎不可能存在,迫使我以稍微更明确的方式做到这一点:
sub wrapper {
my ($self, $code) = @_;
$code->()
}
Wrapper->wrapper(sub { say "Hi there, world" });
Run Code Online (Sandbox Code Playgroud)
现在,这将是一个非常方便的方式来包装一些块,即提供一些额外的文本或有条件地执行代码或围绕一些代码,其中错误处理保持不变(例如,eval一些代码和日志错误,记录用户等. ).
如果我没有遗漏某些东西,是否有一些半便捷的解决方法或替代方法来实现这样的事情而没有太多的线路噪音?
我有一些问题从另一个表批量插入数据到一个新表.目标看起来有点像这样:
CREATE TABLE TEST_T (
T_GUID RAW(16) DEFAULT SYS_GUID() NOT NULL,
T_VAL1 NUMBER(10) NOT NULL,
T_VAL2 VARCHAR2(10) NOT NULL,
PRIMARY KEY (T_GUID)
)
Run Code Online (Sandbox Code Playgroud)
我打算用数据填充它的语句的简化版本:
INSERT INTO TEST_T (T_VAL1, T_VAL2)
SELECT DISTINCT
CAST(SUBSTR(zip_code, 1,1) AS NUMBER) as t_val1,
zip_code as t_val2
FROM OTHER_TABLE_T
WHERE ...
ORDER BY t_val1
Run Code Online (Sandbox Code Playgroud)
由于我没有提供T_GUID
有价值的,我会假设我SYS_GUID
为每个新行提供了一个函数.但是出了点问题,我得到了主键的唯一性约束违规.
如果我删除了DISTINCT
,语句成功,但我得到了很多重复的条目.当然,如果我明确地SYS_GUID()
在我的电话中提供呼叫SELECT
,则结果完全相同.
现在我发现如果我只是把另一个放在我的SELECT
周围,它可以正常工作,没有约束违规并且插入了不同的行:
INSERT INTO ...
SELECT x.* FROM (
SELECT DISTINCT ...
) x
Run Code Online (Sandbox Code Playgroud)
那么重复的guids来自哪里?如果完整的行集没有问题,为什么通过不同的方法删除行会造成麻烦?由于SYS_GUID为每个调用创建了一个唯一的标识符,我只能想象在不同的情况下,它只会被整个子句调用一次,这是由周围的包装解决的SELECT
.如果有人可以解释在这种情况下执行的不同,我会很高兴.
我有一个数据库,其中每个表都有一个所有列的公共前缀(可能是为了避免别名).像这样:
CREATE TABLE
PERSON
(
PER_GUID RAW(16) DEFAULT SYS_GUID() NOT NULL,
PER_FIRSTNAME NVARCHAR2(50),
PER_LASTNAME NVARCHAR2(50),
PRIMARY KEY (PER_GUID)
)
Run Code Online (Sandbox Code Playgroud)
现在,当将此模式映射到SQLAlchemy ORM(使用declarative_base
)时,我想在将其映射到对象时删除前缀.
我当然可以手动完成:
class Person(Base):
__tablename__ = 'person'
guid = Column('per_guid', RAW, primary_key = True)
firstname = Column('per_firstname', String)
lastname = Column('per_lastname', String)
Run Code Online (Sandbox Code Playgroud)
但除了所有冗余类型之外,这将绕过声明性映射的一些好处.基本上我需要反转__mapper_args__ = {'column_prefix': 'per_'}
,它的前缀是我的属性.
这样做的恰当方法是什么?我是否必须捕获一些映射事件?用自定义基类做一些事情?前缀的长度各不相同,但它们都以下划线结尾,因此通用的不需要指定的确切表前缀的东西也可以工作.