我正在为一个促进手语的慈善机构工作,他们希望每天将视频发布到他们的FB页面.视频数量很大(且不断增长),因此他们希望以编程方式安排上传.我真的不介意我最终在做什么编程语言,但是我尝试了以下内容并没有走得太远:
Perl使用WWW::Facebook::API
(旧的REST API)
my $res = $client->video->upload(
title => $name,
description => $description,
data => scalar(read_file("videos/split/$name.mp4"))
);
Run Code Online (Sandbox Code Playgroud)
身份验证没问题,这正确地发布了一个facebook.video.upload
方法https://api-video.facebook.com/restserver.php
.不幸的是,这会返回"方法未知".我认为这与弃用的REST API有关.
Facebook::Graph
在Perl或fb_graph
Ruby中的gem.(OAuth API)
我甚至无法进行身份验证.这两个都面向网络而不是OAuth的桌面应用程序,但我认为我应该能够做到:
my $fb = Facebook::Graph->new(
app_id => "xxx",
secret => "yyy",
postback => "https://www.facebook.com/connect/login_success.html"
);
print $fb->authorize->extend_permissions(qw(publish_stream read_stream))->uri_as_string;
Run Code Online (Sandbox Code Playgroud)
在我的浏览器中转到该URL,捕获code
返回的参数,然后
my $r = $fb->request_access_token($code);
Run Code Online (Sandbox Code Playgroud)
不幸:
Could not fetch access token: Bad Request at /Library/Perl/5.16/Facebook/Graph/AccessToken/Response.pm line 26
Run Code Online (Sandbox Code Playgroud)同样在Ruby中,使用fb_graph
,
fb_auth = FbGraph::Auth.new(APP_ID, APP_SECRET)
client = fb_auth.client
client.redirect_uri = "https://www.facebook.com/connect/login_success.html" …
Run Code Online (Sandbox Code Playgroud)Perl有一个名为像文件句柄字符串被带到特征是一个文件句柄:
# let this be some nice class I wrote
package Input {
sub awesome { ... }
}
Run Code Online (Sandbox Code Playgroud)
因此,当我们做Input->awesome
或非常小心:'Input'->awesome
,该方法将被调用.除非:
# now somewhere far, far away, in package main, somebody does this:
open Input, "<&", \*STDIN or die $!; # normally we'd open to a file
Run Code Online (Sandbox Code Playgroud)
甚至不必执行此代码,但只有解析器才能看到此代码,以便Perl 'Input'
从现在开始将字符串解释为文件句柄.因此,方法调用'Input'->awesome
将会死亡,因为表示文件句柄的对象没有很棒的方法.
由于我只控制着我的班级而不是其他代码,我不能简单地决定只在每个地方使用词法文件句柄.
有什么方法可以强制我Input->awesome
永远是一个方法调用Input
包,但从来没有文件句柄(至少在我控制的范围内)?我认为不应该有任何名称冲突,因为Input
包实际上是%Input::
藏匿.
完整代码重现问题(另请参阅此ideone):
use strict;
use warnings;
use feature 'say';
say "This is …
Run Code Online (Sandbox Code Playgroud) 我想要一个struct包含一个类型别名到另一个类型用于元编程目的:
struct Foo {};
struct WithNestedTypeAlias {
using Foo = Foo;
};
Run Code Online (Sandbox Code Playgroud)
然后我可以像WithNestedTypeAlias::Foo
模板等那样做.
据我所知,这种类型的别名是有效的,因为它不会改变Foo
类型的含义.Clang愉快地编译了这个.
然而,海湾合作委员会抱怨:
test-shadow-alias.cpp:4:20: error: declaration of ‘using Foo = struct Foo’ [-fpermissive]
using Foo = Foo;
^
test-shadow-alias.cpp:1:8: error: changes meaning of ‘Foo’ from ‘struct Foo’ [-fpermissive]
struct Foo {};
^
Run Code Online (Sandbox Code Playgroud)
现在我很困惑,因为我明确没有改变Foo
from 的含义struct Foo
.
C++ 14的正确行为是什么?我知道我可以通过重命名来解决这个问题struct Foo
,但是我想知道GCC的错误是否正确.
笔记:
使用clang ++ 3.8和gcc 5.4进行测试,但Godbolt建议在最近的GCC版本中没有改变.
我查看了decltype和类成员名称之间的交互阴影外部名称,其中变量的名称可以指外部作用域中的变量或类成员.相比之下,我的问题是关于类型别名.由于Foo
总是::Foo
在类范围内引用,因此没有歧义.我看不出那里的答案如何适用于我的问题.
这可能是由于误解了实际上是什么类型的别名.
我正在写一个XS模块.我分配了一些资源(例如malloc()
或者SvREFCNT_inc()
),然后执行一些涉及Perl API的操作,然后释放资源.这在普通的C中很好,因为C没有例外,但是使用Perl API的代码可能会croak()
阻止正常的清理和泄漏资源.因此,除了相当简单的情况外,似乎不可能编写正确的XS代码.
当我croak()
自己可以清理到目前为止分配的任何资源时,我可能会调用croak()
直接的函数来回避我编写的任何清理代码.
伪代码来说明我的担忧:
static void some_other_function(pTHX_ Data* d) {
...
if (perhaps) croak("Could not frobnicate the data");
}
MODULE = Example PACKAGE = Example
void
xs(UV n)
CODE:
{
/* Allocate resources needed for this function */
Data* object_graph;
Newx(object_graph, 1, Data);
Data_init(object_graph, n);
/* Call functions which use the Perl API */
some_other_function(aTHX_ object_graph);
/* Clean up before returning.
* Not run if above code croak()s!
* …
Run Code Online (Sandbox Code Playgroud) 如果我在远程服务器上有一个git客户端并且只有X用户具有SSH访问权限,那么我是否应该专注于更新该服务器上的git来修补CVE-2014-9390?在我看来,漏洞严重与.Git/config
在不区分大小写的文件系统上被破坏有关,这需要一个git push
只有已经拥有SSH访问权限的可信用户才能接受(在这种情况下).是这样的吗?我错过了什么吗?
相关阅读:
我有一点理解问题.
在Qt Wiki中写道,我必须:
提示:确保将Perl添加到git前面的路径,因为它发布了一个过时的版本(Perl 5.8),这将导致脚本失败.
但这究竟意味着什么呢?这是指PATH变量吗?它包含以下项目:
C:\Python33\
C:\Perl64\site\bin
C:\Perl64\bin
C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common
C:\Program Files (x86)\AMD APP\bin\x86_64
C:\Program Files (x86)\AMD APP\bin\x86
%SystemRoot%\system32
%SystemRoot%
%SystemRoot%\System32\Wbem
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static
C:\Program Files\Microsoft SQL Server\110\Tools\Binn\
C:\Program Files\Common Files\Autodesk Shared\
C:\Program Files\Microsoft\Web Platform Installer\
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\
C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\
C:\Program Files (x86)\Autodesk\Backburner\
C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\
C:\Program Files\Microsoft SQL Server\100\Tools\Binn\
C:\Program Files\Microsoft SQL Server\100\DTS\Binn\
C:\Python33\Lib\site-packages\PyQt4
Run Code Online (Sandbox Code Playgroud)
有人能告诉我如何在git前面设置路径吗?我不知道这意味着什么
问候
比较这种行为,
df <- data.frame(a11111 = rnorm(5,0), b11111= rnorm(5,0))
df$a # pressing tab at this instance auto-completes a11111
df$a # hitting return at this instance returns the value for a11111
Run Code Online (Sandbox Code Playgroud)
有这种行为:
library(data.table)
dt <- data.table(df)
dt[,a # pressing tab at this instance does not auto-complete a11111
dt[,a # pressing return at this instance returns an 'object not found' error
dt$a # behaves like how it does for the data frame
Run Code Online (Sandbox Code Playgroud)
我认为返回是有效的,因为x$name
相当于x[["name", exact = FALSE]]
?但是,我不了解自动完成行为.由于data.table
语法基于[ …
我试图将原型应用于子程序的副本,而不修改现有的子程序.即这不行:
use Scalar::Util 'set_prototype';
sub foo {};
*bar = \&foo;
set_prototype(\&bar, '$'); # also modifes "foo"
Run Code Online (Sandbox Code Playgroud)
我想要实现的目标可以通过以下方式完成goto &sub
:
sub foo {};
sub bar($) {
goto &foo;
}
Run Code Online (Sandbox Code Playgroud)
但是,这会引入不必要的开销,我并不热衷于此.因此我的问题是:有没有办法制作子程序(CV)的(浅)副本,这样设置副本的原型不会影响原件?就是这样的
use Scalar::Util 'set_prototype';
sub foo {};
*bar = magical_cv_copy(\&foo);
set_prototype(\&bar, '$'); # does not modify "foo"
Run Code Online (Sandbox Code Playgroud)
我看了一下Sub:Clone
,但它看起来已经过时了,不会强制安装在我的系统上.我不想为此编写XS代码.
use strict;
use warnings;
use Test::More tests => 7;
use Scalar::Util qw/refaddr set_prototype/;
sub foo {
my ($x) = @_;
return 40 + $x;
}
*bar …
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置使用HTTPS的node.js服务器.然后,我将在Perl中编写一个脚本,向服务器发出HTTPS请求,并测量往返的延迟.
这是我的node.js:
var express = require('express');
var https = require('https');
var fs = require('fs');
var key = fs.readFileSync('encrypt/rootCA.key');
var cert = fs.readFileSync('encrypt/rootCA.pem');
// This line is from the Node.js HTTPS documentation.
var options = {
key: key,
cert: cert
};
https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world - https\n");
}).listen(8088);
Run Code Online (Sandbox Code Playgroud)
密钥/证书生成如下:
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
Run Code Online (Sandbox Code Playgroud)
这是我的Perl脚本:
#!/usr/bin/perl
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $req = …
Run Code Online (Sandbox Code Playgroud) 在当前的Marpa解析器中的Scanless Interface(SLIF)实现中,词法分析器似乎以以下方式执行最长的令牌匹配(LTM):
当我的语法包含与最长子字符串匹配但无法在当前位置出现的标记时,这将导致令人沮丧的解析失败。考虑以下代码:
#!/usr/bin/env perl
use strict; use warnings; use feature qw/say/; use utf8;
use Marpa::R2;
use Data::Dump;
my @data = ('! key : value', '! key:value');
my $grammar = Marpa::R2::Scanless::G->new({
source => \<<'END_GRAMMAR',
:default ::= action => [values]
:start ::= record
:discard ~ ws
ws ~ [\s]+
record ::= ('!') key (':') value
key ~ [\w]+
value ~ [^\s]+
END_GRAMMAR
});
for my $data (@data) {
my $recce = Marpa::R2::Scanless::R->new({
grammar => $grammar, …
Run Code Online (Sandbox Code Playgroud) perl ×7
git ×2
c ×1
c++ ×1
c++14 ×1
clang++ ×1
data.table ×1
destructor ×1
facebook ×1
filehandle ×1
g++ ×1
https ×1
marpa ×1
method-call ×1
networking ×1
node.js ×1
parsing ×1
perl-xs ×1
qt ×1
r ×1
rstudio ×1
ruby ×1
type-alias ×1
xs ×1