小编Qqw*_*qwy的帖子

AJAX请求和常规浏览器请求之间的区别

AJAX请求和直接浏览器请求之间是否存在差异(就如何调用和加载网页而言)?

换句话说,我的意思是:是否以与客户端请求(由浏览器发起)不同的方式处理直接服务器端请求?

javascript ajax xmlhttprequest

36
推荐指数
2
解决办法
2万
查看次数

设计:创建没有密码的用户

在我们的应用中,我们有普通用户.但是,我们希望能够发出邀请,邀请某些人.请注意,邀请直接与用户相关联,因为我们希望能够为这些用户设置某些设置.(我们正在将客户从旧软件缓解到新软件).

所以:

  • 管理员应该能够创建新用户并更改其设置.
  • 当有人跟随他们的链接时invitation_token,他们应该看到一个表格,他们可以为他们的帐户设置密码.

我遇到的问题是如何让管理员创建用户帐户,绕过正常的密码验证.如果需要设置默认密码,这将是一个可怕的解决方案,因为这会产生严重的安全漏洞.

如何在没有提供密码的情况下在Devise中创建新用户?

ruby-on-rails devise

19
推荐指数
2
解决办法
1万
查看次数

寻找一种在图像上进行按位异或的方法

我正在寻找一种在命令行上获得两个图像的Bitwise XOR的方法(或者以可以在程序或脚本中实现的另一种方式).

这应该导致与支持它的图片编辑器中使用XOR混合模式相同的最终图片(Paint.NET,Photoshop等)

举个例子,假设我有图像A:

图片A(西雅图,来自paint.net文档

和图像B:

ImageB(Apple,来自paint.net文档)

那么结果应该是这样的:

图像C(以上图像的Xor结果,来自paint.net文档)

当然,有趣的是,当您再次使用图像B对图像C进行异或时,您将获得图像A的精确副本.

现在,我一直在互联网上查找以编程方式执行此操作的方法,但我一无所获.甚至ImageMagick也不支持对图像进行按位异或.

sombebody知道这样做的方法吗?

image imagemagick image-processing xor

18
推荐指数
3
解决办法
2万
查看次数

有没有办法让 Rust 闭包只将一些变量移入其中?

我有一个通用struct设置和一个额外的变量设置,我想调整和使用。

对于整数范围内的所有可能值,我想启动一个(作用域)线程,并将此变量设置为该值。根据这个值,它们做的工作略有不同。

这些线程中的每一个都应该能够读取常规设置结构。

use crossbeam; // 0.7.3

struct Settings {
    // ... many fields
}

const MAX_FEASIBLE_SCORE: u8 = 10;

fn example(settings: Settings) {
    crossbeam::scope(|scope| {
        for score in 0..MAX_FEASIBLE_SCORE {
            scope.spawn(|_| {
                let work_result = do_cool_computation(&settings, score);
                println!("{:?}", work_result);
            });
        }
    })
    .unwrap();
}

fn do_cool_computation(_: &Settings, _: u8) {}
Run Code Online (Sandbox Code Playgroud)

这不编译:

use crossbeam; // 0.7.3

struct Settings {
    // ... many fields
}

const MAX_FEASIBLE_SCORE: u8 = 10;

fn example(settings: Settings) {
    crossbeam::scope(|scope| {
        for score in …
Run Code Online (Sandbox Code Playgroud)

multithreading closures lifetime move-semantics rust

15
推荐指数
2
解决办法
3073
查看次数

依靠has_many关系排序

这是我经常遇到的问题.关于这个问题有一些类似的问题,但是没有一个是非常完整的(并且它们可能已经过时了,因为Rails 4可能引入了有助于解决这个问题的新功能)

让我举一个问题的简单例子和解决问题的已知方法:


说我有一个User模型和一个Post模型,和一个User has_many :posts

现在,我希望得到帖子最多的前五名用户.

以下是我所知道的选项,但它们都有各自的缺点:

1)

users = User.all
@top_users = users.sort {|a,b| a.posts.count <=> b.posts.count}.take(5)
Run Code Online (Sandbox Code Playgroud)

缺点:为每个用户创建一个DataBase请求,使得此解决方案非常慢.

2)直接使用SQL代码加入(参见例如这个问题和答案)

select('users.*, COUNT(posts.id) AS posts_count').joins(:posts).group('users.id').order('posts_count DESC').take(5)
Run Code Online (Sandbox Code Playgroud)

这将运行DataBase中的所有排序逻辑.然而:

  • 我们使用了很多特定于数据库的代码(例如在PostgreSQL中我们需要其他语法).如果可能的话,最好使用ActiveRecord方法.
  • 使用内部联接意味着永远不会返回没有任何帖子的用户.当我们想要返回没有帖子的用户时,这是一个问题.

3)直接使用SQL与外部联接(例如,请参阅此问题和答案)

User.select("users.*, COUNT(posts.id) as posts_count").joins("LEFT OUTER JOIN posts ON posts.user_id = users.id").group("posts.id").order("posts_count DESC")
Run Code Online (Sandbox Code Playgroud)

这也会返回没有帖子的用户.缺点:

  • 更多特定于数据库的代码作为#2,甚至更难阅读.

4)使用计数器缓存列(有关此技术的完整说明,请参阅此Railscasts剧集)

基本上,创建一个新列,通过在每次创建或删除新帖子时更改字段中的值来User跟踪posts该用户的当前计数.

这非常快速且可读.缺点是我们只能在我们定义了一个新字段后使用它User.对于许多情况,这是可以接受的,但是更难以灵活,因为需要更改用户表,以便按照我们可能想要创建前五的关联工作.此外,由于这是一个缓存字段,因此存在不会触发字段更新的数据库操作.

有没有更好(可读和有效)的方法来实现这一目标?优选使用内置ActiveRecord方法的东西.

ruby mysql activerecord ruby-on-rails ruby-on-rails-4

12
推荐指数
2
解决办法
2918
查看次数

Rails:猴子修补ActiveRecord :: Base与创建模块

我正在阅读The Rails 4的方式(由Obie Fernandez撰写),一本关于Rails的着名书籍,从我到目前为止所阅读的内容,我强烈推荐它.

但是,有一个示例部分9.2.7.1:一个类中的多个回调方法让我困惑:

忍受我,为了让每个人都明白这个问题,我已经复制了本书在这个问题中描述的步骤.


关于活动记录的回调(本节谈判before_create,before_update等等),并且它可以创建一个能处理多种回调为你的类.列出的代码如下:

class Auditor
   def initialize(audit_log)
      @audit_log = audit_log
   end

   def after_create(model)
      @audit_log.created(model.inspect)
   end

   def after_update(model)
      @audit_log.updated(model.inspect)
   end

   def after_destroy(model)
      @audit_log.destroyed(model.inspect)
   end
end
Run Code Online (Sandbox Code Playgroud)

该书说,要将此审核日志记录添加到Active Record类,您将执行以下操作:

class Account < ActiveRecord::Base
   after_create Auditor.new(DEFAULT_AUDIT_LOG)
   after_update Auditor.new(DEFAULT_AUDIT_LOG)
   after_destroy Auditor.new(DEFAULT_AUDIT_LOG)
   ...
end
Run Code Online (Sandbox Code Playgroud)

然后,本书指出这段代码非常难看,不得不在三行上添加三个审核员,而且它不干.然后继续告诉我们,要解决这个问题,我们应该将一个acts_as_audited方法修补到Active Record::Base对象中,如下所示:

(这本书建议把这个文件放进去/lib/core_ext/active_record_base.rb)

class ActiveRecord::Base
   def self.acts_as_audited(audit_log=DEFAULT_AUDIT_LOG)
      auditor = Auditor.new(audit_log)
      after_create auditor
      after_update auditor
      after_destroy auditor
   end
end …
Run Code Online (Sandbox Code Playgroud)

ruby inheritance activerecord callback ruby-on-rails-4

11
推荐指数
1
解决办法
1591
查看次数

为什么`const`在它之前的东西上工作?

我正在学习C++.在我的课程中,它被解释为最好const立即放在你想要改变的东西之后,因为这是const有效的.

许多人,包括比如Bjarne Stroustrup本人,都喜欢const在前面写作.但这有时会导致问题:

const int *foo; //modifiable pointer to a constant int. 
int const *bar; //constant pointer to a modifiable int? No! It's a modifiable pointer to a constant int. (So the same type as foo)
Run Code Online (Sandbox Code Playgroud)

一个显示此操作的示例:

int fun(int const *mypointer)
{
    *mypointer = 5; //Won't compile, because constant int.
    mypointer = 0; // Is okay, because modifiable pointer.
}
Run Code Online (Sandbox Code Playgroud)

是什么让这个更加混乱,是编译器,如G ++想改写int const bar到const int bar他们的错误消息.

现在,这种行为让我非常困惑.为什么这样const …

c c++ syntax const

11
推荐指数
1
解决办法
355
查看次数

Haskell:如何为依赖于参数的东西编写一个`Monoid`实例

我正在为大学开设一个小型图书馆,在一个循环组中进行整数计算; 像:

(3 (% 11)) + (10 (% 11))
--> (2 (% 11))
Run Code Online (Sandbox Code Playgroud)

'整数(%n)'明显形成一个幺半群,加上'0(%n)'作为同一性元素.但是,只有当添加的两个操作数的模数相同时,a (% n) + b (% n)才有意义:有意义,而a (% n) + b (% m)不是.

有没有办法用Haskell的类型系统强制执行此操作?对于mempty身份元素当然也是如此:如何0 (% n)构建?可以n以某种方式保存在类型系统中?

或者像这样的结构是否需要使用依赖类型?

haskell monoids dependent-type

9
推荐指数
3
解决办法
515
查看次数

为什么存在"未定义的行为"?

某些常见的编程语言,尤其是C和C++,具有未定义行为的强烈概念:当您尝试执行某些操作之外的某些操作时,这会导致未定义的行为.

如果发生未定义的行为,则允许编译器执行任何操作(包括任何内容,'时间旅行'等).

我的问题是:为什么存在这种未定义行为的概念?据我所知,如果不是导致未定义的行为,使用超出其预期用途的操作会导致大量的错误,使用一个版本的编译器停止工作的程序,等等将被阻止一个编译错误.

为什么这不是事情的方式?

c c++ compiler-errors compilation undefined-behavior

9
推荐指数
2
解决办法
642
查看次数

为什么std :: queue使用std :: dequeue作为底层默认容器?

正如cplusplus.com上所读,std::queue实现如下:

队列实现为容器适配器,它是使用特定容器类的封装对象作为其底层容器的类,提供一组特定的成员函数来访问其元素.元素被推入特定容器的"后面"并从其"前面"弹出.

底层容器可以是标准容器类模板之一或其他一些专门设计的容器类.该底层容器应至少支持以下操作:

......

标准容器类deque和list满足这些要求.默认情况下,如果没有为特定队列类实例化指定容器类,则使用标准容器双端队列.

我很困惑为什么deque(类固醇上的双端队列)在这里被用作默认值,而不是list(这是一个双向链表).

在我看来,这std::deque是非常矫枉过正:它是一个双端队列,但也有恒定时间元素访问和许多其他功能; 基本上是一个功能齐全的std :: vector bar'元素在内存中连续存储'保证.

正常情况下std::queue只有极少数可能的操作,在我看来,双向链表应该更有效率,因为需要在内部发生的管道要少得多.


为什么然后std::queue使用std::deque默认值而不是std::list?

c++ queue stl c++11 stddeque

8
推荐指数
2
解决办法
1830
查看次数