小编ale*_*pov的帖子

这个匿名函数语法有什么用呢?

刚开始我的Elixir之旅.在书中读到这个:

"&运算符将后面的表达式转换为函数."

好吧,我想我明白了......

iex(70)> f = &(&1 * &2)
#Function<12.80484245 in :erl_eval.expr/5>
iex(72)> f.(2,3)
6
Run Code Online (Sandbox Code Playgroud)

好的,&符号是匿名函数的简写及其参数.但是,为什么下次通话不起作用?!

iex(73)> &(&1 * &2).() 
#Function<12.80484245 in :erl_eval.expr/5>
Run Code Online (Sandbox Code Playgroud)

......我可以继续这样看待永远:

iex(76)> &(&1 * &2).().().()
#Function<12.80484245 in :erl_eval.expr/5>
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

elixir

16
推荐指数
1
解决办法
5948
查看次数

Haskell中的类型和类型变量

抓住Haskell类型系统的表面,运行:

Prelude> e = []
Prelude> ec = tail "a"
Prelude> en = tail [1]
Prelude> :t e
e :: [a]
Prelude> :t ec
ec :: [Char]
Prelude> :t en
en :: Num a => [a]
Prelude> en == e
True
Prelude> ec == e
True
Run Code Online (Sandbox Code Playgroud)

不知何故,尽管enec有不同的类型,但它们都在== e上测试True .我说"某种程度上"不是因为我感到惊讶(我不是),而是因为我不知道允许这个的规则/机制的名称是什么.就好像表达式"[] == en"中的类型变量 "a"被允许采用值"Num"进行评估.同样,当用"[] == ec"测试时,它被允许变成"Char".

我不确定我的解释是否正确的原因是:

Prelude> (en == e) && (ec == e)
True
Run Code Online (Sandbox Code Playgroud)

,因为直觉上这意味着在同一个表达式中,e"同时"假设Num和Char的值(至少我用来解释&&的语义).除非Char的"假设"仅在(ec == e)的评估期间起作用,并且(en == e)是独立评估的,在单独的......减少中?(我在这里猜测一个术语).

然后来了:

Prelude> en == …
Run Code Online (Sandbox Code Playgroud)

haskell types type-systems

13
推荐指数
1
解决办法
301
查看次数

"致命:ref HEAD不是一个象征性的参考"在交互式git rebase期间

有3个提交 - 一个正确,然后两个愚蠢的清理,错别字等.所以我想要压扁它们.消防:

git rebase -i HEAD~3
Run Code Online (Sandbox Code Playgroud)

听起来很简单,它应该可以工作 - 我在遇到问题之后尝试过它,在一个全新的回购中,它按预期工作.编辑显示3个提交,选择顶部,挤压另外两个,保存并退出,完成.如果我在详细模式下运行,我会看到更多细节 - git通过检查我选择的第一个提交进入分离的HEAD状态,然后执行'Rebasing 2/3'和'Rebasing 3/3',显然创建了一些临时提交一路走来 - 然后成功的消息; 编辑器在某些时候再次弹出,让我改变提交消息.一切都很好.

但同样的命令在工作回购中消失了!3在一个编辑器中提交,选择南瓜壁球......但是这一次,我没有看到'Rebasing 2/3',而是'HEAD现在在my-SHA-1'之后的第一行,它遇到了致命的!

HEAD is now at 48a6c3d... <commit message>
fatal: ref HEAD is not a symbolic ref
Run Code Online (Sandbox Code Playgroud)

但是,为什么 Git的期待HEAD是一个象征性的裁判?Rebase进程确实分离了HEAD - 就像我在探索性示例中看到的那样 - 那么为什么然后在第二个例子中致命,而不是在第一个例子中呢?cat .git/HEAD给我我已经选择的提交的SHA1 ......

我花了几个小时阅读和研究,但有些东西不在这里,我无法找到它是什么!我怀疑也许有些钩子是负责任的(对它们知之甚少,并且知道有问题的回购确实有一些).感谢您在回答这个问题时的考虑!

git rebase

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

来自特定国家/地区的Chrome中的wordpress err_connection_reset

我自愿在俄罗斯支持一个新闻网站,该网站是在2002年至2004年间用PHP手工制作的.毋庸置疑,当编辑们聘请一些人来构建基于WordPress的新版本时,我感到非常兴奋.旧网站正在mydomain.press上运行.我在subdomain.mydomain.press上添加了新的WordPress版本,用于替换旧版本.

它有一个神秘的问题.

当编辑试图通过subdomain.mydomain.press访问该站点时,她的浏览器(俄罗斯的Chrome)会立即报告err_connection_reset,其中9个案例中的10个.不会尝试加载站点 - 报告即时错误.在我的机器(加拿大)上,同一个网站没有问题.嗯,有点慢(因此我提到她甚至没有看到延迟 - 错误是即时的),但它在10个试验中有10个打开.当她的Chrome获取内容时(在1/10的情况下),它也显示出轻微的延迟.只有错误情况是即时的.mydomain.press的旧网站100%开放.

通过TeamViewer远程连接到她的Windows机器(我使用的是Mac OS X),我确实观察了使用Chrome时所描述的行为.有趣的是,IE没有显示这个问题 - 它一直加载,除了一次在~10重新加载页面加载乱码样式.好像某个css没有正确加载(但显然没有使它成为无效文档的方式).

我完全超出了我的深度.我试图禁用她的Windows Defender,看看它是否是罪魁祸首 - 不.我试图重置她的IP地址(正如提供早期方法尝试修复err_connection_reset的同一页所示) - 没有骰子.

我没有看到来自我自己的Chrome的错误,也没有看到乱码的css(虽然我没有尝试过来自加拿大的IExplorer).

我知道他们在俄罗斯有一些互联网服务供应商过去阻止他们(愚蠢的政治原因,AFAIK) - 但这看起来并不像阻止; 她百分之百无法查看.她没有任何防火墙(也不是网站).

还有什么... nginx是使用的服务器,设置是"基本的",我想(我不是那么精通配置它来尝试任何花哨的东西).

并且让事情变得更加神秘 - mydomain.press(旧版本,php-hand-craft)的网站开放得很好,100%的试用.

使用IP地址打开不会更改图片,因此看起来不像DNS问题.

有任何想法吗?

php wordpress internet-explorer google-chrome http

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

postgres - 估计时间戳列的索引大小

有一个 postgres 表,ENTRIES,有一个类型为 'made_at' 的列timestamp without time zone

该表在该列和另一列(USER_ID,外键)上都有一个 btree 索引:

btree (user_id, date_trunc('day'::text, made_at))
Run Code Online (Sandbox Code Playgroud)

如您所见,日期在“天”处被截断。以这种方式构建的索引的总大小为 130 MB —— ENTRIES 表中有 4,000,000 行。

问题:如果我要注意达到秒的时间,我如何估计索引的大小?基本上,在秒而不是一天截断时间戳(我希望应该很容易做到)。

postgresql indexing

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

Ansible没有看到已安装的Python模块

我正在尝试创建一个Ansible剧本,该剧本将设置本地 Postgres数据库,以用于某个应用程序的本地/开发测试。

postgresql_db似乎是我需要的Ansible模块,并且psycopg2是作为依赖项列出的Python模块。

因此,在安装Ansible的同一virtualenv中,我还安装了psycopg2(我在使用pipenv的Mac上运行)。

但是当我使用以下命令运行剧本时:

ansible-playbook pg_local.yml --connection=local
Run Code Online (Sandbox Code Playgroud)

我得到错误:

“ msg”:“需要python psycopg2模块”

该剧本很小:

---
- hosts: my_ws

  tasks:
    - name: create a db
      postgresql_db:
        name: mynewdb
Run Code Online (Sandbox Code Playgroud)

所以是/etc/ansible/hosts

[my_ws]
localhost
Run Code Online (Sandbox Code Playgroud)

我怀疑“远程”计算机(实际上是本地计算机)试图导入psycopg2,该计算机在没有模块的python环境中运行。该--connection=local怪吗?

我已经添加了它来解决ssh: connect to host localhost port 22: Connection refused错误,并且因为我确实打算仅在本地运行它。我认为这没错-但我确实想知道这是否会扰乱Ansible的环境。


我在剧本中添加了“测试和报告”任务,未发现任何问题:

changed: [localhost] => {
    "changed": true,
    "cmd": [
        "python",
        "-c",
        "import psycopg2; print(psycopg2.__version__)"
    ],
    "delta": "0:00:00.087664",
    "end": "2018-08-22 13:36:17.046624",
    "invocation": {
        "module_args": {
            "_raw_params": "python -c 'import psycopg2; print(psycopg2.__version__)'",
            "_uses_shell": …
Run Code Online (Sandbox Code Playgroud)

ansible

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

WEEK_OF_YEAR 在不同机器上不一致

更新:好的,我似乎找到了一半的答案。如果我使用无参数 getInstance 创建我的日历,我会得到 WEEK_OF_YEAR = 52。但是,如果我通过向 getInstance 提供 Local.getDefaul() 来创建它,我会得到 WEEK_OF_YEAR = 1。完全没想到这个......我想需要重新阅读日历文档。

根据时间戳构建日历,对应于Sat, 01 Jan 2011 00:00:00 GMT

相同的代码,使用 java.util.Date、Calendar 和 TimeZone,在不同的机器上(使用相同的语言环境)表现不同;日历中的所有字段都相同,除了 WEEK_OF_YEAR。在我的机器上它是 52(实际上在我的两台机器上)。在我同事的机器上它是 1(这似乎是正确的)。

import java.util.Date;
import java.util.TimeZone;
import java.util.Calendar;
import java.util.Locale;

public class CalendarTest {

    public static void main(String[] args) {

        Locale l = Locale.getDefault();
        System.out.println(l);
        Long d = new Long(1293840000000l);

        Calendar c = Calendar.getInstance();
        c.setTimeZone(TimeZone.getTimeZone("UTC"));
        c.setTime(new Date(d));

        System.out.println(c.toString());
}
Run Code Online (Sandbox Code Playgroud)

.. locale 是 en_US,但 Calendar 是:

>java.util.GregorianCalendar[time=1293840000000,
areFieldsSet=true,
areAllFieldsSet=true,
lenient=true,
zone=sun.util.calendar.ZoneInfo[
id="UTC",
offset=0,
dstSavings=0, …
Run Code Online (Sandbox Code Playgroud)

java jvm calendar

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

正确使用erlang spawn_monitor

仍在使用Joe的书,并且很难完全理解一般的监视器,特别是spawn_monitor.这是我的代码; 练习要求编写一个函数,该函数将启动一个进程,其工作是每5秒打印一次心跳,然后是一个监视上述进程并重新启动它的函数.我没有进入重启部分,因为我的显示器甚至无法检测到过程中的过程.

% simple "working" loop
loop_5_print() ->
    receive
    after 5000 ->
            io:format("I'm still alive~n"),
            loop_5_print()
    end.

% function to spawn and register a named worker
create_reg_keep_alive(Name) when not is_atom(Name) ->
    {error, badargs};
create_reg_keep_alive(Name) ->
    Pid = spawn(ex, loop_5_print, []),
    register(Name, Pid),
    {Pid, Name}.

% a simple monitor loop
monitor_loop(AName) ->
    Pid = whereis(AName),
    io:format("monitoring PID ~p~n", [Pid]),
    receive
        {'DOWN', _Ref, process, Pid, Why} ->
            io:format("~p died because ~p~n",[AName, Why]),
            % add the restart logic
            monitor_loop(AName)
    end.

% function to …
Run Code Online (Sandbox Code Playgroud)

erlang

3
推荐指数
1
解决办法
260
查看次数

从Scala中的Option [..]获取java.io.Serializable

(几周前刚从Scala开始,所以请多多包涵)

在这里阅读/尝试这篇小文章,遇到了一些惊喜

http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to-scala-part-5-the-option-type.html

按照说明定义案例类User之后:

case class User(
  id: Int,
  firstName: String,
  lastName: String,
  age: Int,
  gender: Option[String])

object UserRepository {
  private val users = Map(1 -> User(1, "John", "Doe", 32, Some("male")),
                          2 -> User(2, "Johanna", "Doe", 30, None))
  def findById(id: Int): Option[User] = users.get(id)
  def findAll = users.values
}
Run Code Online (Sandbox Code Playgroud)

,这是我观察到的:

> scala> UserRepository.findById(1)
> res34: Option[User] = Some(User(1,John,Doe,32,Some(male)))
> 
> scala> UserRepository.findById(1).get
> res35: User = User(1,John,Doe,32,Some(male))
> 
> scala> UserRepository.findById(1).getOrElse("N/A")
> res36: java.io.Serializable = User(1,John,Doe,32,Some(male))
>
> scala> UserRepository.findById(3).getOrElse("N/A") …
Run Code Online (Sandbox Code Playgroud)

null scala scala-option

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

pip卸载失败,"由OS拥有" - 即使在sudo下也是如此

我正在为一个使用Python的客户开发一个DevOps项目.虽然我从来没有专业地使用它,但我知道一些事情,比如使用virtualenv和pip - 虽然不是很详细.

当我查看我试图为运行功能测试套件准备的分段盒时,我看到了混乱.全局安装了大量的软件包,以及安装在与项目的requirements.txt不匹配的virtualenv中的软件包.好吧,我想,有很多清理工作.从全局包开始.

但是,我立即遇到了一个问题:

?  ~ pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS
Run Code Online (Sandbox Code Playgroud)

好吧,有人必须做了'sudo pip install PyYAML'.我想我知道如何解决它:

?  ~ sudo pip uninstall PyYAML
Not uninstalling PyYAML at /usr/lib/python2.7/dist-packages, owned by OS
Run Code Online (Sandbox Code Playgroud)

呃,显然我没有.搜索显示用户安装绕过pip的软件包引起了一些类似的冲突,但我不相信 - 为什么会知道它们,如果是这样的话?除非"其他"方式将它们放在同一位置,否则pip会使用 - 但如果是这样的话,为什么在sudo下无法卸载呢?

python pip virtualenv python-2.7

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

mysql LOAD DATA LOCAL INFILE 具有默认时间戳列值

我有一个表,其中有一列定义如下:

| Field       | Type          | Null | Key | Default           | Extra          |
+-------------+---------------+------+-----+-------------------+----------------+
| created_at  | timestamp     | NO   |     | CURRENT_TIMESTAMP |                |
Run Code Online (Sandbox Code Playgroud)

我使用以下命令插入数据:

LOAD DATA LOCAL INFILE '<path_to_the_file>' INTO TABLE my_table FIELDS TERMINATED BY '|' (<some_columns>,created_at,<more_columns>)
Run Code Online (Sandbox Code Playgroud)

来自文件,其中每一行如下所示:

822202|NETGEAR|||||1448ce8f-efc5-7b07-6982-1ff991bf967e||||||||1|||

注意:created_at是第五列,因此该文件没有任何值,因此我期望 CURRENT_TIMESTAMP

相反,这就是我所看到的:

mysql> select distinct created_at from my_table;
+---------------------+
| created_at          |
+---------------------+
| 0000-00-00 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

据推测,运行该命令的代码使用标准 JDBC,它是 jdbc.clj Clojure 库。

注意 2:如果我手动运行 INSERT INTO ... 查询,它(显然)会按预期工作。 …

mysql jdbc load-data-infile

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

UTF8,代码点及其在Erlang和Elixir中的表示形式

通过Elixir的unicode处理:

iex> String.codepoints("abc§")
["a", "b", "c", "§"]
Run Code Online (Sandbox Code Playgroud)

非常好,其中的byte_size / 2不是4而是5,因为最后一个char占用2个字节,我明白了。

?运算符(或者是宏?找不到答案)告诉我

iex(69)> ?§
167
Run Code Online (Sandbox Code Playgroud)

大; 因此,我查看了UTF-8编码表,并将值c2 a7视为char的十六进制编码。这意味着两个字节(由byte_size / 1见证)是c2(十进制为94)和a7(十进制为167)。167是我之前评估?§时得到的结果。确切地说,我不明白的是..为什么根据“ ”的描述,该数字是“代码点” 操作员。当我尝试向后工作并评估二进制文件时,我得到了想要的:

iex(72)> <<0xc2, 0xa7>>
"§"
Run Code Online (Sandbox Code Playgroud)

为了使我完全香蕉,这就是我在Erlang shell中得到的:

24> <<167>>.
<<"§">>
25> <<"\x{a7}">>.
<<"§">>
26> <<"\x{c2}\x{a7}">>.
<<"§"/utf8>>
27> <<"\x{c2a7}">>.    
<<"§">>
Run Code Online (Sandbox Code Playgroud)

!! 而Elixir只对上面的代码感到满意...我不了解什么?考虑到Elixir坚持char占用2个字节,而Unicode表似乎同意,为什么Erlang对单个字节完全满意?

unicode erlang elixir

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