刚开始我的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)
这里发生了什么?
抓住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)
不知何故,尽管en和ec有不同的类型,但它们都在== 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) 有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 ......
我花了几个小时阅读和研究,但有些东西不在这里,我无法找到它是什么!我怀疑也许有些钩子是负责任的(对它们知之甚少,并且知道有问题的回购确实有一些).感谢您在回答这个问题时的考虑!
我自愿在俄罗斯支持一个新闻网站,该网站是在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问题.
有任何想法吗?
有一个 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 行。
问题:如果我要注意达到秒的时间,我如何估计索引的大小?基本上,在秒而不是一天截断时间戳(我希望应该很容易做到)。
我正在尝试创建一个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) 更新:好的,我似乎找到了一半的答案。如果我使用无参数 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) 仍在使用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) (几周前刚从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) 我正在为一个使用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下无法卸载呢?
我有一个表,其中有一列定义如下:
| 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 ... 查询,它(显然)会按预期工作。 …
通过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对单个字节完全满意?