2020年4月13日

威廉·斯坦

数据狗:别犯我犯的同样的错误——关于非常不开心的顾客的后续调查和想法

这是后续行动上一篇关于我的狗账单的博客.

日间;夜间:
-我不推荐数据狗,
-与不满意的顾客打交道很难,
-监控数据科学呆子?

黑客新闻评论

谷歌云峰会上的数据狗

我最近在西雅图谷歌云峰会数据狗代表性很好,在主题演讲期间拥有最大的展位和最大的供应商账单。很明显,他们在做正确的事情。我有过去不愉快的经历我刚刚审核了我的记录,发现去年数据狗实际上向我收取了许多比我想象的要多,所以有点恼火。尽管如此,他们还是不断地来和我交谈,服务器监控对我来说是生死攸关的,他们的实际软件在某些方面给人留下了深刻的印象。

尼克·帕里斯开始和我谈论数据狗。他诚恳地想知道我过去在监控和DataDog产品方面的经验,他显然对此非常感兴趣。所以我告诉了他一点,他鼓励我告诉他更多,解释说他去年没有在数据狗工作,他想知道发生了什么。所以他给了我他的电子邮件非常真诚的关心和帮助,所以我给他发了一封邮件,上面有我帖子的链接等等。我没有收到回复,所以一周后我问了原因,然后收到了一封来自数据狗销售总监杰伊·罗比丘的后续邮件。

数据狗电话会议

Jay今天上午10点(2017年9月22日)给我安排了一个电话会议。在打电话之前,我给他发了一份我博客文章的摘要,还要求退款,尤其是在我发帖近6周后他们寄给我的令人惊讶的账单。

在通话中,杰伊解释说,他是在“保护”尼克不让我接触,我主要会和负责客户成功的Michelle Danis交谈。我对这次电话的期望是,我们能找到一些共同点,他们至少会感激有机会把事情做对,和一个不高兴的客户交谈。我也很好奇一家成功的创业公司如何解决一个不快乐的客户(我)的顾虑。

我原以为谈话会很困难,但进展顺利,我写了一篇文章,赞扬了迷人的数据狗销售和客户成功人士。几周前CoCalc.com网站(我的雇主)有一个非常不高兴的客户,他对一个错误的沟通很生气,告诉我们他将不再使用我们的产品,而且绝对不会向任何其他人推荐。我写信给他,想至少继续讨论和帮助他,但他完全不见了。我会尽我所能确保他满意,只要他给我机会。还有,还有最近的一篇博客文章有人不喜欢用CoCalc/Sage做图形,我尽我所能联系他们,至少要澄清一些事情。。。

在任何情况下,由于我们在Kubernetes集群中的几十个容器上运行他们的守护程序,DataDog向我们收取的费用如下(一个不是英语母语的承包商实际上为我们设置了这些监视器):

2016年7月22日449215JWJH87S8N4数据狗866-329-4466纽约639.19美元
2016年8月29日2449215L2JH87V8WZ数据狗866-329-4466纽约927.22美元

我对07/22法案感到震惊,它刺激了我的帖子,后来才发现了8/29法案。我们在7月22日取消了订阅(取消本身就很困难)。

Michelle解释了07年7月29日之前的电话费他们的计费系统滞后了一个多月(即使是在今天,谷歌云平台也不例外)。Michelle和其他人解释了他们的软件所做的许多改变(然后我解释了这些问题?)已经指出了他们的定价说明和帐单。她对我将来是否会成为数据狗的客户非常感兴趣,当我拒绝时,她解释说他们不会退还我的钱,因为账单不是一个错误。

我问他们现在是否像Google云平台(Google cloud platform)那样,提供即将出台的法案的定期摘要。她说今天他们没有,尽管他们正在努力。它们现在确实在管理页面中提供了到目前为止的使用情况摘要。

最后,我毫不含糊地解释说,我觉得他们的定价误导了我。我希望他们能理解,并指出他们刚才向我描述了他们解决这个问题的许多方法。非常令人惊讶的是,米歇尔的回答是,她绝对不会同意一年前他们的定价说明有任何问题,而且他们绝对不会退还我的钱。她不断地提出服务条款。我同意,从法律上讲,我认为他们没有错,只是——正如他们刚刚指出的那样——他们的定价和账单在各个方面都不明确。他们根本不同意。

我不推荐和数据狗做生意。我非常希望在这篇更新的帖子中写下相反的内容。不幸的是,与竞争对手相比,它们的定价和条款至今仍令人费解,而且它们不会原谅错误。这条狗咬人。   

(免责声明:我在通话中做了笔记,但以上大部分都是记忆中的,我可能听错了或误解了什么。我邀请DataDog的评论来澄清事实。)

而且,不管它值多少钱,我肯定推荐谷歌云平台。他们努力做了许多正确的事情关于明确的帐单。

创业公司如何应对不满意的客户?

我很好奇创业公司处理不满意的顾客。在CoCalc,我们很少发生“重大事件”。。。但我要尽可能做好准备。在Google云峰会上,我参加了一些令人惊叹的“SRE的战争故事”会议,他们在会上谈到了多年前的情况,他们的决定决定决定了他们明天是否会有一家公司或一份工作。很明显,这些人对于问题的严重性和严重性有着惊人的直觉。他们“深入”的准备是他们为什么会站在那个舞台上,这也是为什么像谷歌这样的老公司仍然存在的一个重要原因。制定一个应对非常愤怒的客户的策略当然同样重要。


谷歌SRE:这些人是认真的。

我向谷歌的一位长期雇员(16年!)他还说,他最近在谷歌的Stackdriver监控系统中也遇到过类似的情况,仅Stackdriver一个月给客户的账单是8.5万美元。我问谷歌做了什么,他说他们退款,然后和客户合作,更好地使用他们的工具。

当然没有办法一直取悦所有的人。然而,我真的觉得我被数据狗欺骗和误导了,但我的印象是杰伊和米歇尔诚实地认为我是一个混蛋,试图敲诈他们1500美元。他们可能讨厌我告诉你我的经历。

到目前为止,通过CoCalc,我们对客户提供的任何服务都要提前收费,因此很少有人对账单感到惊讶。当一个人在下一个月的订阅中被收费,并且不想继续(例如,因为他们的课程结束了),我们总是全额退还费用。你们公司是做什么的?为什么?我确实担心我们的计费模式意味着我们错过了潜在的收入。

我们都知道像亚马逊和沃尔玛这样成功的大型消费品公司是怎么做的。

监控数据科学呆子?

我想知道是否有人对DataDog这样的服务感兴趣,但它的目标是数据科学的书呆子,它基于CoCalc,提供托管的协作式Jupyter笔记本,其中预装了Pandas、R等。这次谈话在2017年的普罗米修斯大会上,主要讨论了人们使用数据科学工具(如R、Python、Jupyter)从普罗米修斯移动数据进行分析时所面临的摩擦。CoCalc提供了一个协作的数据科学环境,所以如果我们想消除这些摩擦点,也许它对某些人是有用的。以及效率更高。。。


---



作者:威廉·斯坦因([电子邮件保护])2020年4月13日下午1:38

2020年3月27日

塞巴斯蒂安·拉布

维数大于3时MCF算法Lyapunov指数的计算机实验

2015年11月,我想分享我对各种不同多维连分式算法行为的直觉,这些算法是从各种不同的多维连分式算法中获得的,这些算法通常涉及组合数学和数字几何,但也包括前两个李雅普诺夫指数的计算。

由于连分式与Sturmian序列的组合学有着深刻的联系,Sturmian序列可以看作是 网格中直线的数字化(\mathbb{Z}^2\),多维连分式算法与 \(\mathbb{Z}^d\)中直线和超平面的数字化有关。

这就是为什么我在我称之为三维连分式算法备忘单因为它的格式灵感来自网络上的典型备忘单。所有的实验都可以使用可选的SageMath软件包进行复制奴隶分享我的研究代码。有人问我是否打算发布这些备忘单,但我担心这种格式会改变每页中信息和数据的组织结构,因此,最终,我从未在任何地方提交过这些备忘单。

这里我应该说\(d\)代表所涉及矩阵作用的向量空间的维数,\(d-1\)是算法作用的投影空间的维数。

备忘单的一个结果是,它让我们意识到,Julien cassagine提出的算法与Selmer算法具有相同的前两个Lyapunov指数(前3个有效数字相同)。Julien随后发现了原因,因为它的算法与Selmer算法的某些半排序版本共轭。结果是共享在2017年WORDS大会期间。朱利安·勒罗伊、朱利安·卡塞涅和我仍在研究这份报纸的扩展版。我花了很长时间主要是因为我的错,因为我在前两年一直在不定期的王瓷砖上下功夫。

2019年7月,Wolfgang、Valérie和Jörg要求我对大于3的多维连分式算法的前两个Lyapunov指数进行计算。感兴趣的主要问题是第二Lyapunov指数是否随着 维数的增加而保持为负。这一性质与实数固定向量算法所提供的同时丢潘廷近似几乎处处强收敛的概念有关。自从我在2017年秋季开始将我的代码推广到更大的维度后,我没有花太多时间更新我的包。结果证明,所有的算法都是正的。因此,我的计算结果证实了他们最终在预印本2019年11月。

我分享结果的动机是会议多维连分式与欧几里德动力学本周举行(本应于2020年3月23日至27日在洛伦兹中心举行,但由于日冕病毒而取消),视频会议期间的一些讨论与此相关。

下面执行的计算可以在一个图形中进行总结,其中显示了各种 \(d\)维MCF算法的\(1-\theta_2/\theta_1\)相对于\(d\)的值。看起来\(\theta_2\)是负的,Brun的维数为10,Selmer的维数为4,ARP的维数为5。

/文件/2020/lyapunov_exponent_comparison.png

我不得不说,我被结果否定了,因为Valérie和我的算法 Arnoux Rauzy Poincaré(ARP)介绍它的第二个Lyapunov指数对于维数 \(d\geq 6\)似乎变为正。我对ARP有很高的期望值,因为它在备忘单中的计算中达到了最高值(1-\theta_2/\theta_1\),因此比Brun好,比Selmer(d=3\)好。

计算前两个Lyapunov指数的算法是由文森特·德勒克罗瓦提供给我的。它将算法 \((v,w)\映射到(M^{-1}v,M^T w)\)数百万次。向量(v)大小的演化给出了第一个Lyapunov指数。向量(w)大小的演化给出了第二个Lyapunov指数。因为计算是在64位上执行的双重的浮点数,它们的 都是数值问题需要处理。为什么每个向量都要在这个向量上重新定义(为什么要对每个向量执行这个操作)。否则,数值误差累积值和\(\theta_2\)的计算值将与 \(\theta_1\)相同。你可以在线查看算法,从1723号线文件的mult_cont_frac_pyx.pyx从我的可选包。

我不知道文森特是从哪里得到这个算法的。所以,我不知道它有多精确,也不知道是否存在关于正在执行的计算的下界和上界的任何证明。我能说的是,从is一次又一次返回相同值的意义上讲,它是相当可靠的(我的意思是3个常见的最高有效数字)任何固定输入(迭代次数)。

下面,我将演示如何重现结果的代码。

版本0.6(2019年11月)奴隶包括处理某些多维连分式(MCF)算法所需的代码。文档在线提供。它可以安装成这样:

安装SLABPIP

回想一下下面的维数\(d\)是线性的,而\(d-1\)是对应的投影算法的空间的 维。

从可选软件包中导入Brun、Selmer和Arnoux-Rauzy-PoincaréMCF算法:

圣人:  slabbe.mult_cont_压裂 进口 布伦, 塞尔默, ARP公司

在单个轨道上计算前两个Lyapunov指数:

圣人: 布伦(昏暗的=).李雅普诺夫指数(n_迭代=10^7)
(0.3047378296992254, -0.1122095802236805, 1.3682167728713919)

起始点是随机的,但是三元组形式的结果几乎相同:

圣人: 布伦(昏暗的=).李雅普诺夫指数(n_迭代=10^7)
(0.3034501820613232, -0.1117150986772529, 1.3681497170915415)

增加维度\(d\)可以得到:

圣人: 布伦(昏暗的=4).李雅普诺夫指数(n_迭代=10^7)
(0.3263951452273200, -0.0719145656011583, 1.2203297648654456)
圣人: 布伦(昏暗的=5).李雅普诺夫指数(n_迭代=10^7)
(0.3091887734050675, -0.0463930802132972, 1.1500477514185734)

它在0.5秒内完成长度为\(10^7\)的轨道,大约5秒内完成长度为 \(10^8\)的轨道,大约50秒内完成长度为\(10^9\)的轨道:

圣人: %时间 布伦(昏暗的=).李雅普诺夫指数(n_迭代=10^7)
中央处理器 时代: 用户 540 女士, 系统: 0 纳秒, 全部的: 540 女士
 时间: 539 女士
(0.3048879935632522, -0.1123435488013211, 1.3684748208296182)
圣人: %时间 布伦(昏暗的=).李雅普诺夫指数(n_迭代=10^8)
中央处理器 时代: 用户 5.09 s, 系统: 0 纳秒, 全部的: 5.09 s
 时间: 5.08 s
(0.3045547363114875, -0.1121755041186238, 1.3683262505689446)
圣人: %时间 布伦(昏暗的=).李雅普诺夫指数(n_迭代=10^9)
中央处理器 时代: 用户 51.2 s, 系统: 0 纳秒, 全部的: 51.2 s
 时间: 51.2 s
(0.3043875598257702, -0.1121156281682179, 1.368331834035505)

在这里,在下面的内容中,我必须承认我需要对我的 包做一个小的修复,所以下面的代码在版本中无法工作0.6对于我的软件包,我将在未来几天内更新我的软件包,以便可以重现以下计算结果:

圣人:  斯劳比·李亚普诺夫 进口 lyapunov_比较表

对于每一个(3\leq d\leq 20\),我计算出30个轨道,并显示最有效数字和计算出的30个值的标准偏差。

对于Brun算法:

圣人: 阿尔戈斯 = [布伦(d) 对于 d 在里面 范围(,21)]
圣人: %时间 lyapunov_比较表(阿尔戈斯, 纽奥轨道=30, n_迭代=10^7, ncpus公司=8)
中央处理器 时代: 用户 190 女士, 系统: 2.8 s, 全部的: 2.99 s
 时间: 6最小 31s
  算法\#轨道$\theta_1$(标准)$\theta_2$(标准)$1-\theta_2/\theta_1$(标准)
+-------------+----------+--------------------+---------------------+-----------------------------+
  布伦 (d=)    30         0.3045 (0.00040)     -0.1122 (0.00017)     1.3683 (0.00022)
  布伦 (d=4)    30         0.32632 (0.000055)   -0.07188 (0.000051)   1.2203 (0.00014)
  布伦 (d=5)    30         0.30919 (0.000032)   -0.04647 (0.000041)   1.1503 (0.00013)
  布伦 (d=6)    30         0.28626 (0.000027)   -0.03043 (0.000035)   1.1063 (0.00012)
  布伦 (d=7)    30         0.26441 (0.000024)   -0.01966 (0.000027)   1.0743 (0.00010)
  布伦 (d=8)    30         0.24504 (0.000027)   -0.01207 (0.000024)   1.04926 (0.000096)
  布伦 (d=9)    30         0.22824 (0.000021)   -0.00649 (0.000026)   1.0284 (0.00012)
  布伦 (d=10)   30         0.2138 (0.00098)     -0.0022 (0.00015)     1.0104 (0.00074)
  布伦 (d=11)   30         0.20085 (0.000015)   0.00106 (0.000022)    0.9947 (0.00011)
  布伦 (d=12)   30         0.18962 (0.000017)   0.00368 (0.000021)    0.9806 (0.00011)
  布伦 (d=13)   30         0.17967 (0.000011)   0.00580 (0.000020)    0.9677 (0.00011)
  布伦 (d=14)   30         0.17077 (0.000011)   0.00755 (0.000021)    0.9558 (0.00012)
  布伦 (d=15)   30         0.16278 (0.000012)   0.00900 (0.000017)    0.9447 (0.00010)
  布伦 (d=16)   30         0.15556 (0.000011)   0.01022 (0.000013)    0.93433 (0.000086)
  布伦 (d=17)   30         0.149002 (9.5e-6节)    0.01124 (0.000015)    0.9246 (0.00010)
  布伦 (d=18)   30         0.14303 (0.000010)   0.01211 (0.000019)    0.9153 (0.00014)
  布伦 (d=19)   30         0.13755 (0.000012)   0.01285 (0.000018)    0.9065 (0.00013)
  布伦 (d=20)   30         0.13251 (0.000011)   0.01349 (0.000019)    0.8982 (0.00014)

对于Selmer算法:

圣人: 阿尔戈斯 = [塞尔默(d) 对于 d 在里面 范围(,21)]
圣人: %时间 lyapunov_比较表(阿尔戈斯, 纽奥轨道=30, n_迭代=10^7, ncpus公司=8)
中央处理器 时代: 用户 203 女士, 系统: 2.78 s, 全部的: 2.98 s
 时间: 6最小 27s
  算法\#轨道$\theta_1$(标准)$\theta_2$(标准)$1-\theta_2/\theta_1$(标准)
+---------------+----------+--------------------+---------------------+-----------------------------+
  塞尔默 (d=)    30         0.1827 (0.00041)     -0.0707 (0.00017)     1.3871 (0.00029)
  塞尔默 (d=4)    30         0.15808 (0.000058)   -0.02282 (0.000036)   1.1444 (0.00023)
  塞尔默 (d=5)    30         0.13199 (0.000033)   0.00176 (0.000034)    0.9866 (0.00026)
  塞尔默 (d=6)    30         0.11205 (0.000017)   0.01595 (0.000036)    0.8577 (0.00031)
  塞尔默 (d=7)    30         0.09697 (0.000012)   0.02481 (0.000030)    0.7442 (0.00032)
  塞尔默 (d=8)    30         0.085340 (8.5e-6节)    0.03041 (0.000032)    0.6437 (0.00036)
  塞尔默 (d=9)    30         0.076136 (5.9e-6节)    0.03379 (0.000032)    0.5561 (0.00041)
  塞尔默 (d=10)   30         0.068690 (5.5e-6节)    0.03565 (0.000023)    0.4810 (0.00032)
  塞尔默 (d=11)   30         0.062557 (4月4日)    0.03646 (0.000021)    0.4172 (0.00031)
  塞尔默 (d=12)   30         0.057417 (3.6e-6节)    0.03654 (0.000017)    0.3636 (0.00028)
  塞尔默 (d=13)   30         0.05305 (0.000011)   0.03615 (0.000018)    0.3186 (0.00032)
  塞尔默 (d=14)   30         0.04928 (0.000060)   0.03546 (0.000051)    0.2804 (0.00040)
  塞尔默 (d=15)   30         0.046040 (2.0电子-6)    0.03462 (0.000013)    0.2482 (0.00027)
  塞尔默 (d=16)   30         0.04318 (0.000011)   0.03365 (0.000014)    0.2208 (0.00028)
  塞尔默 (d=17)   30         0.040658 (3.3e-6节)    0.03263 (0.000013)    0.1974 (0.00030)
  塞尔默 (d=18)   30         0.038411 (第七章第二节)    0.031596 (9.8电子-6)     0.1774 (0.00022)
  塞尔默 (d=19)   30         0.036399 (2.2e-6节)    0.030571 (8.0电子-6)     0.1601 (0.00019)
  塞尔默 (d=20)   30         0.0346 (0.00011)     0.02955 (0.000093)    0.1452 (0.00019)

对于Arnoux-Rauzy-Poincaré算法:

圣人: 阿尔戈斯 = [ARP公司(d) 对于 d 在里面 范围(,21)]
圣人: %时间 lyapunov_比较表(阿尔戈斯, 纽奥轨道=30, n_迭代=10^7, ncpus公司=8)
中央处理器 时代: 用户 226 女士, 系统: 2.76 s, 全部的: 2.99 s
 时间: 13最小 20s
  算法\#轨道$\theta_1$(标准)$\theta_2$(标准)$1-\theta_2/\theta_1$(标准)
+--------------------------------+----------+--------------------+---------------------+-----------------------------+
  阿诺-邋遢-庞加莱\'e(d=3)30 0.4428(0.00056)-0.1722(0.00025)1.3888(0.00016)
  阿诺-邋遢-庞加莱\'e(d=4)30 0.6811(0.00020)-0.16480(0.000085)1.24198(0.000093)
  阿诺-邋遢-庞加莱\'e(d=5)30 0.7982(0.00012)-0.0776(0.00010)1.0972(0.00013)
  阿诺-邋遢-庞加莱\'e(d=6)30 0.83563(0.000091)0.0475(0.00010)0.9432(0.00012)
  阿诺-邋遢-庞加莱\'e(d=7)30 0.8363(0.00011)0.1802(0.00016)0.7845(0.00020)
  阿诺-邋遢-庞加莱\'e(d=8)30 0.8213(0.00013)0.3074(0.00023)0.6257(0.00028)
  阿诺-邋遢-庞加莱\'e(d=9)30 0.8030(0.00012)0.4205(0.00017)0.4763(0.00022)
  阿诺-邋遢-庞加莱\'e(d=10)30 0.7899(0.00011)0.5160(0.00016)0.3467(0.00020)
  阿诺-邋遢-庞加莱\'e(d=11)30 0.7856(0.00014)0.5924(0.00020)0.2459(0.00022)
  阿诺-邋遢-庞加莱\'e(d=12)30 0.7883(0.00010)0.6497(0.00012)0.1759(0.00014)
  阿诺-邋遢-庞加莱\'e(d=13)30 0.7930(0.00010)0.6892(0.00014)0.1309(0.00014)
  阿诺-邋遢-庞加莱\'e(d=14)30 0.7962(0.00012)0.7147(0.00015)0.10239(0.000077)
  阿诺-邋遢-庞加莱\'e(d=15)30 0.7974(0.00012)0.7309(0.00014)0.08340(0.000074)
  阿诺-邋遢-庞加莱\'e(d=16)30 0.7969(0.00015)0.7411(0.00014)0.07010(0.000048)
  阿诺-邋遢-庞加莱\0.060.0(00014.0.0)英尺
  阿诺-邋遢-庞加莱\'e(d=18)30 0.7952(0.00013)0.7537(0.00014)0.05218(0.000046)
  阿诺-邋遢-庞加莱\'e(d=19)30 0.7949(0.00012)0.7584(0.00013)0.04582(0.000035)
  阿诺-邋遢-庞加莱\'e(d=20)30 0.7948(0.00014)0.7626(0.00013)0.04058(0.000025)

上图的计算使用以下代码完成:

圣人: 布鲁清单 = [1.3683, 1.2203, 1.1503, 1.1063, 1.0743, 1.04926, 1.0284, 1.0104, 0.9947, 0.9806, 0.9677, 0.9558, 0.9447, 0.93433, 0.9246, 0.9153, 0.9065, 0.8982]
圣人: selmer_列表 = [ 1.3871, 1.1444, 0.9866, 0.8577, 0.7442, 0.6437, 0.5561, 0.4810, 0.4172, 0.3636, 0.3186, 0.2804, 0.2482, 0.2208, 0.1974, 0.1774, 0.1601, 0.1452]
圣人: ARPU列表 = [1.3888, 1.24198, 1.0972, 0.9432, 0.7845, 0.6257, 0.4763, 0.3467, 0.2459, 0.1759, 0.1309, 0.10239, 0.08340, 0.07010, 0.06005, 0.05218, 0.04582, 0.04058]
圣人: 布鲁点 = 列表(列举(布鲁清单, 开始=))
圣人: selmer_点 = 列表(列举(selmer_列表, 开始=))
圣人: arp_点 = 列表(列举(arp_列表, 开始=))
圣人: G = 绘图()
圣人: G += 情节(1+1/(-1), , , 20, 图例_标签='最佳算法:$1+1/(d-1)$', 线型='虚线', 颜色=“蓝色”, 厚度=)
圣人: G += 线([(,1), (20,1)], 颜色=“黑色”, 图例_标签=“强收敛阈值”, 线型=“虚线”, 厚度=2)
圣人: G += 线(布伦点, 图例_标签=“布伦”, 颜色='青色', 厚度=)
圣人: G += 线(selmer_点, 图例_标签=“塞尔默”, 颜色=“绿色”, 厚度=)
圣人: G += 线(arp_点, 图例_标签=“ARP”, 颜色=“红色”, 厚度=)
圣人: G.伊敏(0)
圣人: G.轴\u标签(['$d$',''])
圣人: G.显示(标题=前2个Lyapunov指数的计算:值$1的比较-\\θ2/\\西塔1$\n$d和$d的三维算法\\退火窑\\莱克20美元)

作者:Sébastien Labbé,于2020年3月27日下午1:00

2019年5月9日

威廉·斯坦

我是否应该辞去教授的全职工作,在Cocalc全职工作?

差不多3年前,我谈话在哈佛数学会议上宣布“我要离开学术界去建立一家公司”。我真正做的是继续无薪假期从我的终身教授职位起三年。再也不可能再延长休假时间了,所以我不得不决定是回到学术界还是辞职。

我怎么来的?

近20年前,作为一名刚刚获得伯克利数学博士学位的我,被哈佛大学数学系聘为非终身制轨道教师。我在哈佛呆了五年,然后申请了工作,并接受了加州大学圣地亚哥分校数学系的终身副教授职位。数学界非常支持我的数论研究;我跳过了终身教职的轨道,在我30岁时得到了一个一级终身职位。2006年,我从加州大学旧金山分校调到华盛顿大学数学系的终身副教授职位,主要是因为我妻子是那里的研究生,华盛顿大学在数论和代数几何方面有很强的研究能力,他们有良好的文化支持本科生的研究。

在我离开哈佛之前,我开始开源软件SageMath,最初的长期目标是创建一个免费的开源可行的替代Mathematica、Maple、Matlab和Magma。因此,除了出版几十篇数学研究论文以及一些书,我也开始花大量时间编写软件和组织圣日研讨会.

威斯康星州大学数学招生

在威斯康星州,我招募了一支由本科生和研究生组成的团队,他们对Sage的发展产生了重大影响。我被学生们(包括本科生和研究生)的素质震惊了,我能够参与到Sage开发中。我很期待在接下来的几年里,我会有足够的资源雇佣这些学生来全职研究Sage。他们编写了Sage的大部分核心功能的第一个版本(例如图论、符号演算、矩阵等等)。

当我申请威斯康星州大学正式教授的申请被推迟一年时,我很惊讶,因为我被告知我没有发表足够多的研究论文。这是因为我一直在努力打造Sage,当时进展非常顺利。我认真对待反馈,把更多的时间花在传统的研究和出版上;这是我有生以来第一次研究数学,而不仅仅是因为我热爱数学。

我很努力的想雇佣比尔·哈特作为威斯康星州大学的终身教职员工。然而,有人告诉我他的出版数量是“有点轻”,我没有成功地雇用他。如果你把他写的软件源代码打印出来,那将是一大堆纸。不管怎么说,我在政治上完全失败了,这让我很沮丧。我意识到我个人在部门政治方面的不足意味着我可能无法雇佣我急需的那种同事。
威斯康星州大学也非常支持我教授一门关于开放源代码数学软件的本科课程(它演变成). 我曾经在研究生阶段教过一门类似的课程,而且非常顺利,在我看来这是我在威斯康星州教过的最好的课程。当我再次申请教授这门研究生课程的申请被拒绝时,我感到非常惊讶,而且我被告知研究生应该上我的本科课程。我想,“这真的很奇怪”,而不是游说教授课程,更好地展示我的案例。

说清楚,我不是要批评数学系。威斯康星州大学数学系已经非常认真和系统地思考了他们的优先事项以及他们如何融入威斯康星州大学。他们是传统的纯净的数学系在全国排名一般在25位左右,有一套特殊的优势。校园里有一个独立的应用数学系,几个统计系,还有一个庞大的计算机科学学院。也许我在错误的地方试图雇用一个主要资质是世界一流的数学软件编写人员。这篇博文是关于威斯康星州大学数学系是否适合我的问题。

外部资助?

我的数论研究得到了国家科学基金会难以置信的支持,我是首席执行官六项国家科学基金资助. 还有岩浆(与Sage类似,但来源不公开)设法找到了足够的政府资金,因此我仍然保持乐观。也许我可以通过拨款资助人们建立Sage,甚至成立一个研究所!我申请了助学金,以支持更大规模的萨基数学研究,并取得了一些初步成功(半个博士后和一些研讨会,等等)。

为什么Sage的资金如此重要?Mathematic是一个由Mathematic公司和Matlab公司联合开发的一个免费的Mathematic软件的替代品,它是Matlab公司开发的一个免费的Mathematic软件的替代品,它是Matlab公司开发的一个完全可行的软件。虽然最初的进展令人鼓舞,但很明显,我迫切需要大量的资金来真正参与竞争。例如,一个Sage开发人员有一个非常棒的Sage开发项目,他想在一个夏天全职工作大约2万美元,而我找不到钱;结果他放弃了Sage的工作。这个项目涉及实现一些深入的算法,需要更直接地与Mathematica竞争解决符号不等式。这种事一次又一次地发生,我开始非常沮丧。我可以为每个人提供足够的免费工作坊,但我可以为每个人提供足够的费用。

我一直听说,在“未来一两年”的某个时候,美国国家科学基金会(NSF)将举办一场为期10年的大型研究所竞赛。人们向我暗示这将是一件值得注意的事情,我梦想着我能找到这样一个研究所,并肩负着使之成为数学界最终拥有教学和研究基础的深层软件的使命。这个研究所将为计算数学带来同样的开放性和稳健性,正如一个世纪前严谨的证明给数学本身带来的一样。

唉,这并没有发生。我记得当我发现国家科学基金会研究所竞赛的时候乔·西尔弗曼在喝咖啡休息时站在我身后亚利桑那冬季学校2010告诉人们他对冰原的提议刚刚在国家科学基金会研究所比赛中获胜。我转过身来祝贺他,因为我听到在过去的一年里,我完成了大量的工作;内心深处,我的心都沉了下来。我不仅没有赢,我甚至不知道比赛已经发生了!我想我正忙着研究Sage。无论如何,我建立一个由国家科学基金会资助的研究所的幻想在那一刻破灭了。当然,ICERM已经成为一个非常棒的研究所,并且它已经举办了几次支持开发开放源码数学软件的研讨会。

大约在这个时候,我也开始了我的资助计划被否决了因为我不明白的原因。这让我很困惑,因为我以前收到了这么多国家科学基金会的资助。2012年,西蒙斯基金会(Simons Foundation)发出了一个呼吁,希望通过国家科学基金会(NSF)资助的研究所来实现我原本希望实现的目标。我又很兴奋,但是结果并不像我希望的那样. 所以接下来我做了一件我从没想过在一百万年后我会做的事情…

威斯康星州商业化

由于种种原因,我没能让国家科学基金会或其他基金会按照我需要的水平资助Sage,因此在2013年,我决定尝试销售一种商业产品,并用利润资助Sage的发展。我第一次尝试在华盛顿大学商业化办公室(C4C)出售Sage在线访问权。只要业务和产品只是抽象的想法(例如,让我们编个名字和商标吧!让我们写一些服务条款!)一切顺利。然而,当事情变得更加具体时,使用C4C对我来说变得奇怪和沮丧。我显然漏掉了什么。

例如,在我们坐在一起的第一天,C4C告诉我的第一件事是,如果我为这个开源软件开发了一个软件,他们就不会和我合作了,而大学将拥有这个软件。考虑到当时还没有软件,我想象着我会迅速开发出一个基于网络的现代前端给Sage,赚一大笔钱直接进入UW账户,用来资助Sage,这对我来说似乎很好。然而,我没有一个纯粹的问题困扰着我,没有一个纯粹的问题困扰着我。

天真乐观的我发现自己在UW全职工作,同时也试图自己开发一个复杂的web应用程序,许多重要的早期用户都依赖它来完成他们的课程。这很有压力,花了大量的时间和精力。我觉得我只是软件的一部分,经常收到一些东西坏了或坏了的警告,然后手动修复它们。劳动强度很高,而且随着使用软件的人越来越多,情况变得更糟。我整晚都会被吵醒。我不能去旅行,因为事情经常出岔子。

每次我在web应用程序中遇到一些非常困难的问题而不是放弃,我都会更加坚决地不放弃。

上面描述的web应用程序经过6年的发展,现在已经发展成现在的样子了https://CoCalc.com;功能从第一天开始就非常相似,但是质量和可伸缩性已经有了很大的进步。CoCalc可以让你协同使用乳胶、Sage、终端、Jupyter笔记本等进行教学和研究。

2014年,我开始休假,全职开发这个web应用程序,我上面描述的反馈循环变得更加激烈:解决问题,解决难题,更坚定地不放弃。幸运的是,我有一些剩余的国家科学基金会的赠款基金,并且能够用它们来雇用几个学生来帮助发展。我找不到我可以雇来做后台工作的学生(而且可以在白天或晚上的任何时间都可以使用),这意味着保持网站运行的大部分压力仍然直接落在我的肩上。随着网站的普及度(和功能性)的增长,来自它的压力也越来越大。

我的假期结束了,我被要求回到威斯康星州全职工作一年,或者归还我休假期间支付的所有钱。到目前为止,CoCalc已经越来越受欢迎,但我没有被“商业化办公室”允许将其商业化,所以它仍然是一个免费的网站。
我在威斯康辛州大学教书的同时,也是试图运行这个非常复杂和痛苦的生产性web应用程序的主要人员。根据用户的反馈,我也很有动力改进CoCalc。我通常会睡几个小时,凌晨3点起床,写代码到早上8点,然后准备教学,希望上课前不要有任何网站问题,等等。一天,CoCalc在我上课前几分钟遭到了一次大规模的DDoS攻击,当时我正在和数学系的一位潜在捐赠者交谈。

我是那种一次只专注于一件事的人。如果有机会长时间专注于一件事,我有时甚至会做一些真正重要、有影响的事情。我不擅长同时做很多不同的事情。

但与此同时,圣人的成长与我无关。例如,格雷格·穆斯克尔把IMA大项目,以圣人日研讨会的形式出现。还有,这个大型ODK项目,这是一个欧盟资助的支持开放源码数学软件的提议将得到全额资助。在离家更近的地方,摩尔和斯隆资助了重大新举措这也有可能支持Sage的研究。我被邀请去参加一些研讨会和活动,包括这些和其他的赠款,但我经常要么说不,要么在最后一刻取消,因为这是为了维持CoCalc的运转而付出的辛劳。而且,我相信如果我可以开始向客户收费,那么我会有更多的钱,并可以聘请更多的帮助。
我在威斯康星州的C4C与更多的资深人士会面,最终向人们收取使用CoCalc的费用。他们想让我与他们的许可证管理系统进行一些集成,并销售“快速”软件许可证。这对我来说毫无意义,我们绕来绕去。然后,我问到是否真的成立了一个独立的公司(一个法律实体),大学将拥有一些所有权,以便公司可以接受付款等等。这是事情变得非常奇怪的时候。因为“利益冲突”,他们不会和我谈创建公司的事。

我搜索了其他威斯康辛州大学的教师,他们已经将远程相似的产品商业化,找到了一个。他告诉我这是他一生中最糟糕的经历。UW拥有该公司50%的股份,以及该公司所有的软件,这些软件是他们根据苛刻条款授权的。他们拒绝与他谈判任何事情,而是要求他的分拆公司聘请外部谈判代表。由于这一切,我尽可能多的教育自己有关的规则和法律,并咨询了律师。

原来,我用来资助CoCalc工作的NSF拨款明确规定,由这些拨款资助的代码必须是GPL许可的这意味着CoCalc的所有代码都必须是开源的。后来校方甚至以书面形式同意发布BSD许可证下的所有CoCalc代码的快照,而且从发布之日起,我还没有收到过一分钱的报酬,所以没有可能声称该公司不能使用该代码。

建立公司

我在哈佛时的一个同事在城里呆了一天,我们一起喝咖啡。他以为我们会谈论圣人和数论,但我却告诉了他CoCalc和我在商业化和创办公司方面的尝试。他马上给我提出了一个解决问题的办法,那就是和他一个既在公司工作经验丰富又在数学方面有深厚联系的朋友谈谈。我有信心在最坏的情况下我可以辞去在威斯康星州大学的工作,从头开始重写所有的软件,所以我接受了他的邀请。
2015年,我成立了一家公司,并接受了一些外部投资,并利用这一点(并大幅削减了我本来就很小的学术收入)来“离开学术界”。更准确地说,在2016年(在威斯康星州全职工作一年之后),我终于从威斯康星州休了100%的无薪假期,以便完全专注于CoCalc的发展,并使业务起步。而且,当你可以休假的时候,没有理由辞掉终身教授的工作;CoCalc也支持在数学系教书,所以这与我的学术工作密切相关。我唯一的学术责任是对我的两个博士生,我每周至少和他们一对一见面。两年后,我申请了第三年的无薪假期,威斯康星州大学同意了(这不是惯例)。在整个过程中,威斯康星州大学数学系非常支持。
在这三年的无薪假期里,我雇佣了其他三个人在CoCalc全职工作。我们一起极大地改进了软件,并与成千上万的付费客户建立了业务关系。公司仍然没有盈利,尽管如果我们继续目前的做法,未来显然非常光明。CoCalc已经成为一个平台,越来越多的可扩展产品(如)正在建设中,明年有巨大的增长潜力。

此时它在社区看来是理所当然的我已经离开了SageMath development,专注于将CoCalc打造成一个独立的企业。事实上,我并没有花太多时间为Sage做贡献,我甚至改为每天都要做一些关于Sage的摘要sage devel邮件列表.
另外,在市场开发方面,也提到了客户对产品质量的要求。最重要的是,我和其他三个在CoCalc全职工作的人真的,真的很喜欢这份工作,并有可能产生重大影响。我仍然不知道CoCalc是否会获得丰厚的利润并为Sage的发展提供大量资金。如果我执著于这个目标,我将不得不放弃在CoCalc的工作(因为它花费了太长的时间),并寻求其他机会为Sage提供资金。

回想起来,我7年前从零开始创建一家基于网络的软件公司,并将其打造成一家成功的盈利企业,但迄今为止,我的想法完全没有为Sage提供资金。

充分利用基金会的资金来写作会更容易公认的成功到目前为止。考虑到我最初的目标,我走错了路。令人惊讶的是我真的很享受我现在所做的事情!

我的无薪假期到了——我该怎么办?

我第三年的无薪假期到了。还是要辞职。如果我回来了,我就不得不至少有50%的预约. 我目前有50%的一年的教学“学分”,这意味着我不会被要求在我回去的第一年,作为一个50%的任命。此外,现任系主任(johnpalmieri)理解并欣赏Sage–他是其中之一Sage源代码的前10位贡献者!

我已决定辞职。我担心知识产权的问题;如果我持有50%的UW头寸,后来又被UW起诉,这对我的员工、投资者和客户都是极不公平的。在威斯康星州有50%的带薪约会会使人面临很多法律风险,这正是我在过去三年中一直100%无薪休假的原因。但更重要的是,我对继续100%专注于CoCalc的发展感到非常高兴,这将是一个令人难以置信的一年。我真的很喜欢建立这家(非风投基金)的公司,感觉很好。

作者:威廉·斯坦因([电子邮件保护])2019年5月9日下午2:21