书接上文:当我做 hackathon 时我在做什么(1)。 前文中提到,我做的第二个项目是个可视化的项目,名字叫 deneb。deneb 是天鹅座的一等星,也是夏季大三角和北十字两个星群的端点之一。...嗯,deneb - vega - altair,聪明的你一定想到了我为什么起这样一个名字: ? 为什么是 vega-lite? 在数据可视化这块,我自己走了不少弯路。...如果你需要能够对可视化的图表做简单的动画,plotly 也能胜任。 我一度以为 plotly 是我的真命天子,直到有一天我敲开了 altair [4] 这个潘多拉魔盒。...在 3 的基础上提供数据校验和足够清晰的出错信息。...这也是为什么我在做 ExPolars 时, 在 Jupyter notebook 里,一切操作都正常,因为那些输出都是简单的 text;而当我想输出 deneb 生成的包含 vega-lite spec
我的方法论 清晰可见的目标 我喜欢在做一件事情前把目标能够表达清楚,然后脑海里有一个当我成功达到后这东西该长什么样的草图。...每次阶段性做完一些东西,编译时,就是我写 slides 的时间。我在 ex_polars 里用了太多的宏,所以它的编译速度奇慢无比。...我的开发工具箱 所谓「工欲善其事,必先利其器」,好的工具是提升效率的保证。 Marp 这两年我做 slides,基本都是使用 Marp。...其实我们在绘制很多图形时,所使用的元素无非 excalidraw 包含的这几种:方形,圆形,线段,以及文字,我们欠缺的,更多的是把脑袋中的思想可视化出来,这跟工具无关。比如我做的这个: ?...其实像 excalidraw 这样的好工具反而能解放我的大脑,因为我不再需要焦虑用什么样的图形才能更好地表达(使用 visio 或者类似工具时我总有类似焦虑),我也不再需要焦虑该为图形配什么样的颜色,因为
我本来计划为 quenya 项目支持 GRPC backend,之前已经有了思路,但一直没时间做。...当我写到 groupby_apply 时,我发现:额错了,额真滴错了。...这是个非常合理的需求,然而 rustler 并不允许我这么做。...几经试探后,我发现,如果 $type:ty 被用在函数的参数里,会出错,用在返回值里,不会出错。...我这辈子也没写过这么多无趣的代码。什么 TMD 叫搬砖,这 TMD 就叫 TMD 搬砖。
在普通的web项目中,调用接口返回数据,如下,不出错返回一种,出错了,返回另外一种。前端是直接可以拿到返回的信息的。...你这个是用于显示的,但是SpringCloud更倾向于代表一个服务一个接口 比如我这个,一个服务调用了2个服务,其中一个出错了,我需要给前端一个反馈,但是我在这里没法拿到出错的那个服务的错误信息 那这种一般怎么处理呢...这是ByteTCC在rollback过程中也碰到异常了,抛出的是SystemException 说错了,是在commit过程中 HTTP接口一般返回500码就能标识错误了,当然,如果你想在应用层面设置自己的业务异常码...你这种做法不是不可以,只是说:在参与事务处理的controller中这样做不可以,不参与事务处理的controller中这样做是没问题的。...,那所有事务就都commit再也没有rollback了”这句话,大概理解了,我try catch后,发现即使出错了,事务也commit了,导致数据变更了 这是spring声明式事务的机制,根据异常来判断是否需要回滚
不是所有函数都可以被使用,我将带你深入研究其中的几个。...第一个$max_char是必需的,用于设置从多少个字符后开始裁剪内容,即保留多少个字符。后两个是可选的,如果没有传递,则是默认值。...这很重要,虽然这可能会有些走样,但这样可以防止出错并提供准确的字符数统计。如果不这样做可能会导致的错误是html标签没有关闭。...例如,如果你在文本被截断的位置中间正好有一个链接,那么这个链接可能就会出错。其他html元素也是如此。...我希望这有助于你理解这些函数。接下来我将深入讲下图像函数。
但是这种情况下,如果第二个事务提交的时候出错了,第一个事物就无法回滚,因为他已经提交完成了。 链式事务,就是将多个事务,包装在一个链式事务管理器当中,在提交事务的时候,一次提交里面的事务。...在这种情况下,一个服务提供的接口,不可能实现事务,也就是先操作数据,再Commit,如果出错了再Rollback。但是,我们可以借鉴事务的这种处理思路,来自己提供类似事务的方法,这就是TCC模式。...首先是减库存的Try接口,在这里,我们要检查业务数据的状态、检查商品库存够不够,然后做资源的预留,也就是在某个字段上设置预留的状态。然后在Confirm接口里,完成库存减1的操作。...这可能听着有点繁琐,感觉可以一次完成的事情,为什么要分成2步,首先这么做是为了能够在出错的时候正确的重置库存数据,其次这个预留操作跟Confirm操作是两个请求,中间可能会有其他并发请求。...从理论上说,只要我们在Try接口里面预留资源的逻辑是正确的,那么,即使Confirm的时候出错了,我也可以通过重试Confirm请求来完成 使用数据库保存事务状态 这其实不是一种模式,只是一种方式。
事务传播特性是什么?...就是有两个方法A和B方法,两个方法都有事务,A方法如果调用B方法,A方法出错了,A方法的事务回滚了,那么B方法的需要回滚嘛?反之,B方法出错了,他进行了回滚,A方法需要回滚嘛?...所以就有了不同的传播特性,有的业务里面,都需要回滚,有的就不需要,看业务进行设置 7 有7个传播特性 分为两大类 propagation_never : 就是A方法调用B方法 的时候,两个都没有事务...,就是告诉其他事务,我不归你管,我出错了,也不会回滚 7.3 propagation_supported A调用B,B上面写这个传播特性,那么这个时候,如果A有事务,B就加进去,如果A没有事务,那么B也没有...的传播特性是propagation_nested A和B都有事务,当B 出错,A没有,那么A不会回滚,B会回滚 当A出错,B没有出错,A和B都会回滚 就是外面的大环境出错,会影响里面的多有,里面的某一个出错
我在上一篇文章中提到过,我将略过几个文件并直接跳到 genesis/lib/functions/image.php 文件。我建议阅读的同时打开这个文件,这样你就可以看到我正在谈论的函数。...要传的是该尺寸的名称(比如verysmall),而不是使用长乘以宽做参数。 num:要返回哪一个的图片。 默认值是0,如果文章未设置特色图像,将返回第一个图片附件。...控制什么都不输出。...这将返回第二个附加图像的缩略图,并设置居左class ="alignleft"。很酷。 注:涉及图片的函数都不如文字那么直观,一图胜千言,请看我在开发环境下做的截图。特色图像算作是第一张。...genesis_get_image_sizes() 这将返回具有图片所有尺寸大小的数组。这在构建窗口小部件或设置主题选项时非常有用,你可以获取到可用的图像大小并将其与你需要的尺寸进行匹配。
悟空:福袋没发出来,那为什么订单状态还一直是已支付?你这小儿,可不要瞒我! 小黑熊:大圣,我们数据库用的是MongoDB 3.0,不支持事务啊。 悟空:你说的事务是什么意思?...优点:前四步的业务逻辑处理任意一步如果出错了,并不会影响数据库的记录 缺点:后三步的保存如果出错了,和最开始的方案一样,存在数据不一致的问题。 那如何进行解决这种问题? 五、如何解决无事务的问题?...分别有什么优点和缺点?怎么优化? 问题3.如果第三步更新库存失败,那又该怎么做呢? 问题4.如何退款失败,那又该怎么做呢? 围绕上面几个问题,我们展开来论述。...方案1:第二步失败时,立即重试几次(第一次3s,第二次间隔8s,第三次间隔20s,为什么间隔时间不一样?...常见方案: 1.退款失败后主动报警通知运维人员或开发人员 2.手动退款(缺点:人工操作,容易出错,比如找订单找错了) 或 3.加入队列,自动退款(缺点:一般退款失败都是代码级别问题或微信侧问题,所以还是需要排查问题原因
事务的好处?...事务的好处在于,当你需要对多个表进行相关性操作时,使用BeginTrans()开启事务,然后操作,如果中间哪个表更新出错了,或者数据有问题,你可以用RollBack()方法在取消之前的相关性操作,如果没有错...另外,在这个过程中,所有你改动的内容只对你自己有效,别人不能知道你改了什么,也不能对你正在改的表做修改,直到你提交之后,别人才能修改这些表,检索出你修改过的内容。...--打开一个事务 begin tran --定义临时变量 declare @num int = 0; 你的SQL语句 set @num = @num + @@error; --上一条语句出错次数 你的...SQL语句 set @num = @num + @@error; --上一条语句出错次数 if @num 0 begin --回滚事务 rollback tran end else begin
悟空:福袋没发出来,那为什么订单状态还一直是已支付?你这小儿,可不要瞒我! 小黑熊:大圣,我们数据库用的是 MongoDB 3.0,不支持事务啊。 悟空:你说的事务是什么意思?...优点:前四步的业务逻辑处理任意一步如果出错了,并不会影响数据库的记录 缺点:后三步的保存如果出错了,和最开始的方案一样,存在数据不一致的问题。 那如何进行解决这种问题? 五、如何解决无事务的问题?...分别有什么优点和缺点?怎么优化? 问题 3:如果第三步更新库存失败,那又该怎么做呢? 问题 4:如何退款失败,那又该怎么做呢? 围绕上面几个问题,我们展开来论述。...方案1:第二步失败时,立即重试几次(第一次 3s,第二次间隔 8s,第三次间隔 20s,为什么间隔时间不一样?可以留言讨论哦!...常见方案: 1.退款失败后主动报警通知运维人员或开发人员 2.手动退款(缺点:人工操作,容易出错,比如找订单找错了) 3.加入队列,自动退款(缺点:一般退款失败都是代码级别问题或微信侧问题,所以还是需要排查问题原因
在这篇文章的中,我将继续讲解如何使用自定义的函数、在添加动作时使用既有函数的技巧,以及怎样使用Genesis函数。...使用自定义的函数 Genesis的函数是很好用,但是如果当你想在网站上添加其他内容时呢?你要自己写一个函数,并使用add_action()把它挂载到某一个钩子上。...我可以随便写一个处理标题输出的函数叫child_function_a,只要其他函数没有叫这个名字,它就可以用,但是当我需要调用它的时候,我可能记不住这个名字,而且很可能会忘记什么它是干什么用的了。...在这个例子里,我设置了一个参数的“默认”值,但是在调用该函数时可以用别的值来替换它。如果没有参数,就写成 function generic(){} ,可能大部分时候你都会这么用。...可以这样做 add_action( 'genesis_after_post_content', 'child_do_add_to_any' ); /**add the add to any function
在使用Genesis时这是非常有帮助的,因为你可以为每个各个单独的文章、页面和其他分类选择不同的布局。这意味着你独立于模板创建全新的布局。...在开始之前,我想快速介绍一下默认布局。...同时,在取消注册布局或者要基于当前布局设置一些按条件触发的动作时需要用到的ID,也可以知道要用到哪些ID。...genesis_register_layout 如果你想,你还可以在数组中添加其他字符串。这些字符串将被回已被不时之需。理论上可以做到这一点,但一般我不这样做。...默认布局只会在首次激活主题或在设置中按下“重置”按钮时被应用。 那么我们如何使用它呢?
tp的事务开启是非常简单的, 只需要M()->startTrans();//开启事务,M()可以是M('xxx') $m->rollback();//事务回滚 $m->commit();//提交事务...下面是我代码实例; $order_model = M('order'); $order_model ->startTrans();//开启事务 $id = $order_model->add...$id) { $result['status'] = false; $result['info'] = '增加订单时出错了!'...order_model->rollback(); $result['status'] = false; $result['info'] = '处理详细信息时出错了...下单成功,但是扣款失败,那么就会把下单成功的记录回滚回去,回到了没有下单时候的状态 提交事务,也就是关闭了监视器 当然,事务中断是不会终止程序运行的.它还会继续运行下去,所以得好好判断出错状态和回滚,提交位置
注意:当Connection遇到一个未处理的SQLException时,系统会非正常退出,事务也会自动回滚,但如果程序捕获到了异常,是需要在catch中显式回滚事务的。...---- savapoint 我们还可以使用savepoint设置中间点。如果在某地方出错了,我们设置中间点,回滚到出错之前即可。 应用场景:现在我们要算一道数学题,算到后面发现算错数了。...B跟A说,我已经收到钱了。A回滚事务【rollback】,等B再查看账户的钱时,发现钱并没有多。...注:和不可重复读类似,但虚读(幻读)会读到其他事务的插入的数据,导致前后读取不一致 ---- 简单总结:脏读是不可容忍的,不可重复读和虚读在一定的情况下是可以的【做统计的肯定就不行】。...对我个人理解,策略模式就是我们在使用别人API时,可以使用匿名内部类的时候。别人用的就是策略模式。 至于调用者会传递什么对象过来,该对象要实现什么方法。我们可以使用接口来对其规范
什么是区块链? 在编写任何应用软件之前的第一步总是需要找出你的数据结构。不管是 Haskell、Perl、C 或者 SQL 都是如此。...我们为什么选择这个奇怪的 MerkleF 类型而不是下面这个简单类型呢?...我们需要一种方法来挖掘新的块来做任何有趣的事情。...这没什么 — 数字也只是字节字符串,所以这也仅需要几行代码。...这意味着我将在我们在采矿时使用的顶部放置一个常量globalTransactionLimit = 1000,但是我们不会使用它来验证过去的块。
事务是为了保证所处理数据的完整性,如n个相关表被同时修改,在保存数据时,要么全部保存,要么都不保存,这只有用事务来实现。 举例: 入库单增加了一个物料,库存表的相应也应该增加。...而加上事务之后,如果库存表没有保存成功,入库单的数据也会回滚,便不保存。 用try结构来处理事务,比用IF每句判断要简单明快得多,我见过许多人写的事务,那个就复杂,看得头晕晕的。...End Transaction &&临时表事务结束 Catch To ex ROLLBACK Sqlrollback(nDatasource) &&出错了,则事务回滚 SQLSetprop...ROLLBACK Sqlrollback(nDatasource) &&出错了,则事务回滚 SQLSetprop(nDatasource,'transactions',1) &&自动事务处理 *Throw...ROLLBACK Sqlrollback(nDatasource) &&出错了,则事务回滚 SQLSetprop(nDatasource,'transactions',1) &&自动事务处理 *Throw
Designs By Nick the Geek ---- 在Genesis Explained系列的上一篇文章中,我解释了Genesis的图像函数 。...在这篇文章中,我将介绍 genesis/lib/functions/options.php 文件。...例如,如果我想获取到管理后台里Genesis配置的“特色图片”的尺寸,那就要使用“image_size”作为$key。...默认是在GENESIS_SETTINGS_FIELD中查找。你还可以使用GENESIS_SEO_SETTINGS_FIELD来做一些其他的设置。...你甚至可以创建自己的设置字段并使用此函数来获取该字段的值。 比如你在WordPress后台中设置了Genesis的一些配置: ? 如果想在自己的子主题中使用关于特色图像的一些选项,可以这样用: ?
翻译的系列文章我已经放到了 GitHub 上:blockchain-tutorial,后续如有更新都会在 GitHub 上,可能就不在这里同步了。...它的 API 并不多,并且仅关注值的获取和设置。仅此而已。 听起来跟我们的需求完美契合!...而现在,我们希望它做的事情有: 打开一个数据库文件 检查文件里面是否已经存储了一个区块链 如果已经存储了一个区块链: 创建一个新的 Blockchain 实例 设置 Blockchain 实例的 tip...有两种类型的事务:只读(read-only)和读写(read-write)。这里,打开的是一个读写事务(db.Update(...)),因为我们可能会向数据库中添加创世块。...main() { bc := NewBlockchain() defer bc.db.Close() cli := CLI{bc} cli.Run() } 注意,无论提供什么命令行参数
以下是文件中所有函数的列表: genesis_register_widget_area: 注册新的侧边栏 genesis_register_sidebar: genesis_register_default_widget_areas...genesis_sidebar_title 在我们深入研究之前,我想先讨论一些名词术语。...小部件放入侧边栏后,你还可以对其进行各种设置。如果窗口小部件无法找到它应该归属的侧边栏位置,则会被归入到非活动窗口小部件。当ID发生变化时会发生这种情况。后面我将再次讨论这个问题。...你甚至可以省略ID,但我不推荐这么做。如果你的小部件有ID,那么它会呆在它该呆的地方。否则,如果侧边栏的顺序发生变化,那么你的窗口小部件将移动到其他侧边栏或非活动窗口小部件。 ID应为小写且没有空格。...我将在下一次涉及layout.php文件时讨论这个问题。
领取专属 10元无门槛券
手把手带您无忧上云