小编amo*_*mon的帖子

获取命令行(桌面)应用程序的Facebook身份验证令牌

我正在为一个促进手语的慈善机构工作,他们希望每天将视频发布到他们的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_graphRuby中的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)

ruby perl facebook facebook-graph-api

21
推荐指数
2
解决办法
5157
查看次数

防止将字符串解释为文件句柄

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)

perl filehandle method-call

14
推荐指数
1
解决办法
391
查看次数

我可以使用相同的名称为周围范围中的类型声明成员类型别名吗?

我想要一个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)

现在我很困惑,因为我明确没有改变Foofrom 的含义struct Foo.

C++ 14的正确行为是什么?我知道我可以通过重命名来解决这个问题struct Foo,但是我想知道GCC的错误是否正确.

笔记:

c++ g++ type-alias clang++ c++14

10
推荐指数
1
解决办法
502
查看次数

安全地释放XS代码中的资源(在范围退出时运行析构函数)

我正在写一个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)

c perl destructor perl-xs xs

9
推荐指数
1
解决办法
163
查看次数

如果只有受信任的用户才能访问SSH,那么远程git客户端是否容易受到CVE-2014-9390的攻击?

如果我在远程服务器上有一个git客户端并且只有X用户具有SSH访问权限,那么我是否应该专注于更新该服务器上的git来修补CVE-2014-9390?在我看来,漏洞严重与.Git/config在不区分大小写的文件系统上被破坏有关,这需要一个git push只有已经拥有SSH访问权限的可信用户才能接受(在这种情况下).是这样的吗?我错过了什么吗?

相关阅读:

git

7
推荐指数
1
解决办法
1164
查看次数

构建Qt5 Git/Perl - 路径

我有一点理解问题.

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前面设置路径吗?我不知道这意味着什么

问候

git perl qt

6
推荐指数
2
解决办法
4981
查看次数

data.table和自动完成兼容性

比较这种行为,

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语法基于[ …

r rstudio data.table

5
推荐指数
1
解决办法
242
查看次数

复制子程序

我试图将原型应用于子程序的副本,而不修改现有的子程序.即这不行:

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)

perl

5
推荐指数
1
解决办法
470
查看次数

如何使用LWP :: UserAgent接受自签名证书

我正在尝试设置使用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)

perl https networking lwp-useragent node.js

5
推荐指数
2
解决办法
1184
查看次数

防止在Marpa :: R2 :: Scanless中进行幼稚的最长令牌匹配

在当前的Marpa解析器中的Scanless Interface(SLIF)实现中,词法分析器似乎以以下方式执行最长的令牌匹配(LTM):

  1. 尝试在输入中的当前位置匹配所有端子符号。
  2. 除了最长的匹配项之外的所有匹配项都将被丢弃。
  3. 这些最长的令牌被馈送到解析器,解析器可以接受也可以不接受。
  4. 如果不接受任何令牌,则解析失败。

当我的语法包含与最长子字符串匹配但无法在当前位置出现的标记时,这将导致令人沮丧的解析失败。考虑以下代码:

#!/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 parsing marpa

4
推荐指数
1
解决办法
379
查看次数