Discourse 中提供了一个 Slow 模式。 这个模式是在一个主题的配置按钮中近设置。 设置的意思是,一个其他的用户只能在给定的时间中对内容进行回复。 上面的配置参数意思为,在这个时间范围内,一个用户只能对这个主题回复 1 次。 下面还有一个配置参数。 这个配置参数的意思是,这个选项激活的时间。 比如说激活 2 个月,或者激活一周等。 等激活时间过了后,这个配置就失效了。 https://www.isharkfly.com/t/discourse-slow/16814
Discourse 中提供了一个 Slow 模式。 这个模式是在一个主题的配置按钮中近设置。 设置的意思是,一个其他的用户只能在给定的时间中对内容进行回复。 上面的配置参数意思为,在这个时间范围内,一个用户只能对这个主题回复 1 次。 下面还有一个配置参数。 这个配置参数的意思是,这个选项激活的时间。 比如说激活 2 个月,或者激活一周等。 等激活时间过了后,这个配置就失效了。 https://www.isharkfly.com/t/discourse-slow/16814
Winthrop quincy ferry 轮渡在冬季并不会提供服务,主要是夏天才有。 虽然到 Boston 的时间只有 15 分钟,但 Boston 确实没有 NYC 那么大。 如果不堵车的话,开车过去也只有 10 多分钟。 可能也是这个原因才让轮渡在冬季并不提供服务。 https://www.isharkfly.com/t/winthrop-quincy-ferry/16265
在本文中让我们来看看在 Java 8 中引入的 2 个新的类: Period 和 Duration. 上面 2 个类可以被用来替换在 determine 和 time 中大量使用用来计算 2 个时间不同的 API。 针对上面 2 个类最主要的不同就是 Period 被用来计算日期的不同,Duration 则是被用来计算时间的不同。 Period 类 Period 使用的单位是 年,月,日来表达 2 个日期之间的不同。 我们可以通过 2 个时期之间不同的 between() 方法来获得 Period 对象。 LocalDate startDate = LocalDate.of(2015, 2, 20); LocalDate endDate = LocalDate.of(2017, 1, 15); Period period = Period.between(startDate, endDate); 当我们获得 Period 对象后,我们可以用 Period 对象中的 *getYears(), getMonths(), getDays() 方法来获得具体的值。 logger.info(String.format("Years:%d months:%d days:%d", period.getYears(), period.getMonths(), period.getDays())); isNegative() 也是 Period 中的一个方法,可以通过这个方法来判断 2 个比较时间的大小关系。 当这个方法返回 True 的时候,表明结束时间要大于起始时间。 assertFalse(period.isNegative()); 相反的 isNegative() 如果返回的为 false,那么表明 startDate* 要早入 endDate 的值。 另外一个可以创建 Period 对象的方法就是使用数字,Period 中提供了一个 of 方法,我们可以用这个方法来构造一个 Period 对象: Period fromUnits = Period.of(3, 10, 10); Period fromDays = Period.ofDays(50); Period fromMonths = Period.ofMonths(5); Period fromYears = Period.ofYears(10); Period fromWeeks = Period.ofWeeks(40); assertEquals(280, fromWeeks.getDays()); 如果 of 方法中只有一个输入参数的话,那么默认调用的是 ofDays() 方法,等于用输入的数字初始化日这个单位。, 基于上面的设计, ofWeeks() 方法使用的是乘以 7 的方式,因为不管一年有多少天,但一周 7 天这个肯定是不会变的。 通过看 JDK 的源代码: public static Period ofWeeks(int weeks) { return create(0, 0, Math.multiplyExact(weeks, 7)); } 上面的构造方法就能说明这个问题了。 同时,还可以使用字符串来创建 Period 对象,这个字符串使用的序列为 “PnYnMnD”: Period fromCharYears = Period.parse("P2Y"); assertEquals(2, fromCharYears.getYears()); Period fromCharUnits = Period.parse("P2Y3M5D"); assertEquals(5, fromCharUnits.getDays()); 当 period 对象创建成功后,可以使用 plusX() 和 minusX() 方法来对创建的 period 对象中的值进行调整: assertEquals(56, period.plusDays(50).getDays()); assertEquals(9, period.minusMonths(2).getMonths()); Duration 类 和 Period 相对,Duration 类是对时间进行操作的。 具体操作的单位为秒(seconds )和纳秒(nanoseconds )。 因可以直接对纳秒进行操作,所以 Duration 能比较精确的对时间进行计算。 另外,要获得 Duration 对象,我们需要从 instants 来进行比较,使用 between() 方法来比较 instants 。 Instant start = Instant.parse("2017-10-03T10:15:30.00Z"); Instant end = Instant.parse("2017-10-03T10:16:30.00Z"); Duration duration = Duration.between(start, end); 上面的方法能够构造一个 Duration 对象,然后从 Duration 对象中使用 getSeconds() 或者getNanoseconds() 方法来获得具体的单位值: assertEquals(60, duration.getSeconds()); 可选的,因为是对时间进行计算机,那么你还可以从 LocalDateTime 实例中来比较构造一个 Duration 对象: LocalDateTime start = LocalDateTime.parse("2020-01-01T08:00:00"); LocalDateTime end = LocalDateTime.parse("2023-01-01T12:00:00"); Duration.between(start, end).getSeconds(); 基于起始时间的不同,Duration 可能会有下面的 3 中情况: Negative: start < end Zero: start = end Positive: start > end 同时,标准的时间 Time API…
温哥华(YVR)中转去美国需要注意的地方是在加拿大通过美国 CBP 的检查。 在加拿大完成检查后进入 E 航站楼后乘飞机进入美国。 如需要乘联程航班去美国,在下飞机后不要选择进入到达进入加拿大的通道,而需要选择联程通道。 看着指示牌走,上面也会显示对应的航站楼。 最后会遇到一个自动扶梯,在自动扶梯的尽头会要求刷护照和联程航班的登机牌。 如果联程航班没给你登机牌的话,就需要找工作人员把你的登机牌打印出来。 这个地方是区分美国和加拿大联程的最后位置,直走就进入 E 航站楼进入美国,否就右转联程进入加拿大。 然后就依次进行安检,最后一步就是美国 CBP 边境海关的检查。 当完成所有检查,并且通过美国 CBP 后,可以看到下面的指示牌。 自动扶梯下来后能看到 E 航站楼登机口的提示。 至此,其实你已经算是完成了进入美国的所有流程和手续了。 当下一个航段到达后,就没有任何海关的检查了。 当然最后上飞机之前,加航还会检查你的护照,确定你能顺利进入美国。 体验 如果文件没有问题,或者你是美国公民或绿卡持有者,通过加拿大转机通常是不会有太大的问题。 只需要注意的是,进入美国的海关检查是在加拿大完成的,不是在美国本土完成的。 温哥华机场的 E 航站楼就是为了给进入美国的航班准备的。 能顺利到达 E 航站楼的登机口就说明已完成了所有的检查程序。 https://www.isharkfly.com/t/yvr/16806/1
仓促的时间并没有把爬山安排成年末的一次行动,无奈架不住孩子们期待的眼神和希望挑战下自己的信心便决定前往。 交通工具的发展让人们有了很多的选择,小朋友们却希望选择效率最低的一种方式 —— 地铁。 都说公共交通是一座城市的窗口,要想更多的了解一座城市更需要放慢脚步来感受一座城市的心跳,公共交通扮演这个角色让来到这个城市的人触摸到城市的脉搏。 虽小朋友的选择只是出于一种好奇,但实在找不到拒绝的理由。 地铁湖南大学 20 多年前,湖南大学校内出发有能过河 立珊专线 和不过河的 305 路,当然还有一班 202 路开往另外的方向。 立珊专线的终点站是中南大学,途径湖南大学和湖南师范大学,把河西的几个高校都串成了一条线,也是学生们去商业区打牙祭的必选线路。 要去长沙火车站,不带行李,305 路转 12 路是不错的选择。立珊专线实在是太挤了。 对踩着末班车回宿舍,又不想打车的穷学生来说,上面 2 条线路是 20 多年前为数不多的选择。 多年前能够过湘江就只有湘江 1 桥,不像现在隧桥一大堆。 地铁的开通,出口就在曾经宿舍的楼下,感叹于时间的飞逝。 地铁口出来没多远就会路过湖南大学体育场,顺着体育场的路往上走很小距离来到了东方红广场,正对东方红广场的右侧是湖南大学图书馆和自卑亭。 自卑亭并没有爱晚亭出名,是一个小亭子并经大门紧锁。 湖南大学没有校门,多年前貌似有提议说弄个校门,最后还是不了了之。为了表示这是一所大学,在湘江入口的地方弄了块大石头写上湖南大学就算完事了,这块石头还是 20 多年前长沙对沿江路进行改造的时候顺便给立上的。 毕业那年还和这块新立上去的石头亲切合影。 出了教学楼就是小卖部和一路吃,随后就可以愉快的边吃边回宿舍。能开心边吃边压马路的体验估计也只有湖南大学才有了。 来美国后也去过不少大学,大部分大学的布局都和湖南大学差不多,也基本上没有校门,更没有保安一说,大学不应该就是这个样子吗? 爱晚亭 爱晚亭坐落在中国湖南省长沙市岳麓区岳麓山清风峡,同安徽省醉翁亭、杭州市湖心亭、北京市陶然亭并称“中国四大名亭”。 现今,游人如织。 要移动下都比较困难,就算拍照想留下比较简单的背景都不容易。 岳麓山景区不收费,也许是来到长沙的人都想来看看的原因吧。 虽学生那些年岳麓山的旅游大巴也很多,但真的没有现在这么多人,上岳麓山都有很多小路可以走。 走爱晚亭的这条路是大路,大学生都喜欢标新立异,不走寻常路,所以爱晚亭这条山上的线路其实走得并不多。 上山小径以爱晚亭为起点,上顶为终点,早已过了学生时代的豪迈。如今携家人漫游小径却成了走在队伍最后的那个人,没有了与人一教高下的心境,多了悠闲的坦然。孩子们却争先恐后的希望自己能第一个等顶,我却成了最后一名,随手拾起孩子们散落在周边的衣物,留下的一句话是:爸爸我们先走了,帮我们带下衣服。 却也只闻其声,不见其踪。 远眺长沙城 岳麓山紧邻古城长沙,自古以来是文人墨客必游之地,山下有四大书院之一的岳麓书院,也是中国现今保存最完好的一座古代书院。 历代留下的文化遗迹以晋初麓山寺、隋舍利塔、唐李邕麓山寺碑、宋岳麓书院、禹王碑、明云麓宫、清爱晚亭最为著名。 在迈向山顶的小路上都能看到一些著名的墓葬。 长沙周边没有什么大山,岳麓山的地理位置和战略地位对长沙城来说极为重要。 中国对日抗战中后期的第三次长沙会战,由薛岳等人率领的中华民国国军即是在此山指挥炮兵团向进犯的阿南惟几率领的日本军攻击,使日军被歼灭甚多。 登顶当天,天气不好,留下了远眺长沙雾蒙蒙的遗憾。 麓山行,20 多年后的深冬,争先恐后的人已慢慢留在队尾。 https://www.isharkfly.com/t/topic/16805
介绍 在我们的这个世界上因为地球是圆的,所以每个国家都会有自己特定的时区。 时区在我们对时间的使用上扮演了非常重要的角色。但又因为时区的存在,又给我们带来了很多的麻烦,比如北美地区使用的夏令时和中国统一使用东 8 区的时间等。 当这些时间在我们计算机中进行体现的时候就会给我们带来不少的麻烦,为了解决这些麻烦,Java 提供了一些 API 来进行处理,比如用到的 Date,Time 和 DateTime。 我们都知道,Java 的时间处理因为 API 的使用会变得非常的繁琐,所以在新的版本 Java 中,Java 尝试解决这个问题,为此开始提供 ZoneId 和 ZoneOffset API 来管理时区。 在本文中,我们将会对 ZoneId 和ZoneOffset 进行一些探讨,同时也对 DateTime 类进行一些探索。 ZoneId 和 ZoneOffset 在 JSR-310 发布的版本中,Java 添加了一些 API 用来管理日期,时间和有时区的时间。 ZoneId 和 ZoneOffset 类做为上面更新的一部分也同时添加到了 Java 中。 ZoneId *ZoneId 在 Java 中被用来表示时区,例如 ‘Europe/Paris‘. 针对 ZoneId 有 2 个实现,第一个实现是针对 GMT/UTC 来计算偏移量。 第二个实现为使用距离的地理区域,这会针对 GMT/UTC 对比来进行一系列的计算。 让我们来创建一个 Berlin, Germany 的 ZoneId 实例。 ZoneId zone = ZoneId.of("Europe/Berlin"); 针对中国可以使用的时间定义为标准北京时间。 ZoneId zoneId = ZoneId.of("Asia/Shanghai"); 但使用的时间字符串为上海。 ZoneOffset ZoneOffset 集成了 ZoneId 同时来定义了当前使用的时区针对 GMT/UTC 的偏移量,例如:+02:00。 这就意味这个这个数字表示的是针对 UTC 标准时间使用的固定小时和分钟数。 LocalDateTime now = LocalDateTime.now(); ZoneId zone = ZoneId.of("Asia/Shanghai"); ZoneOffset zoneOffSet = zone.getRules().getOffset(now); logger.debug("zoneOffSet: {}", zoneOffSet); 上面代码的输出为: 09:13:25.045 [main] DEBUG com.ossez.datetime.DateTimeZoneUnitTest - zoneOffSet: +08:00 因为北京使用的是东八区的时间。 针对同一个国家可能有 2 个针对 UTC 时间的偏移量——这些国家主要是使用夏令时的国家。比如说美国就是一个使用夏令时的国家。 因此,针对这些国家 ZoneOffset 就会有 2 个实现了,具体需要参考 LocalDateTime* API 中的实现。 DateTime 类 下一个,让我们来讨论下 DateTime 类,这个类实际上将会使用 ZoneId 和 ZoneOffset。 ZonedDateTime ZonedDateTime 是不可变(immutable )的实现,这个用来输出一个基于 ISO-8601 表达方式的时间。 例如: 2007-12-03T10:15:30+01:00 Europe/Pari。 一个 ZonedDateTime 将会表达有 3 个部分,分别为LocalDateTime, ZoneId 和 ZoneOffset。 这个类将会保存有所有的日期和时间字段来精确的表达时间,时区和时区偏移量。 我们用这个来处理模糊的本地时间。 例如:, ZonedDateTime 可以保存值 “2nd October 2007 at 13:45.30.123456789 +02:00 in the Europe/Paris time-zone”。 让我们使用 ZonedDateTime 来显示当前的时间。 @Test public void ZonedDateTime_out() { ZoneId zone = ZoneId.of("Asia/Shanghai"); ZonedDateTime date = ZonedDateTime.now(zone); logger.debug("date: {}", date); } 上面程序的输出为: 09:32:04.549 [main] DEBUG com.ossez.datetime.DateTimeZoneUnitTest - date: 2025-01-16T22:32:04.547368100+08:00[Asia/Shanghai] 从实例化的输出来看,保留了非常多的时间信息。 我的计算机是现在东部时间,可以看到获得的实例已经转换成了北京时间。 ZonedDateTime 同时还提供了内置函数来从一个时区转换为另外的一个时区。 ZonedDateTime destDate = sourceDate.withZoneSameInstant(destZoneId); OffsetDateTime OffsetDateTime 是不可变的的一个日期时间,这个日期时间使用的是针对 UTC 的偏移量来进行保存的,同样使用 ISO-8601 格式。 例如:2007-12-03T10:15:30+01:00. 这个类将会保存有所有的日期和时间字段来精确的表达时间,时区和时区偏移量。 例如:OffsetDateTime 可以寸尺值 “2nd October 2007 at 13:45.30.123456789 +02:00”。 让我们来获得针对 GMT/UTC 2 小时偏移量的 OffsetDateTime : ZoneOffset zoneOffSet= ZoneOffset.of("+02:00"); OffsetDateTime date = OffsetDateTime.now(zoneOffSet); OffsetTime OffsetTime 是不可变的的一个时间。 通常这个时间使用 hour-minute-second-offset 来进行表达,在 ISO-8601 日历系统中将会输出为:: 10:15:30+01:00。 这个类只会存储时间,不会对日期进行存储。 可以使用 “13:45.30.123456789+02:00” 来对其初始化。 让我们来获得 OffsetTime 2 个时区的偏离量: ZoneOffset zoneOffSet = ZoneOffset.of("+02:00"); OffsetTime time = OffsetTime.now(zoneOffSet); 结论 ZoneOffset 通常用来处理针对…
本没有想到从加拿大转机的,但 UA 出的里程票让加航飞了。 前年年末的时候为了刷里程从西雅图自驾了一趟温哥华。 有一种从农村到城市的感觉,让这个中国胃总是无法忘怀。 这次是从路过的飞机上看看曾经来过的温哥华。 2 次来到温哥华都匆匆的停留了几个小时,没有时间能够深入了解下这个城市。 如果说去加拿大那个城市,可能蒙特利尔我们去得更多。 如果要问我是喜欢纽约还是蒙特利尔,相信我们的答案应该是显而易见的。 希望下次能有机会停留得更长时间点。 https://www.isharkfly.com/t/topic/16795
以前都知道汽车的蓄电池通常都在发动机舱里面。 这些年不少车的蓄电池不是在座位下就在后备箱里面,怎么感觉这蓄电池现在都需要玩躲猫猫了吗? 随后再来自行脑补下 AGM 蓄电池的概念。 AGM蓄电池是指隔板采用的是超细玻璃棉材料的蓄电池。目前德系,美系主推AGM技术。与普通蓄电池相比,价格贵三倍多,但具有以下优点: (1)循环充电能力比普通铅酸蓄电池高3倍,具有更长的使用寿命。 (2)在整个使用寿命周期内具有更高的电容量稳定性。 (3)低温起动更加可靠。 (4)降低事故风险,无酸液渗漏减少环境污染。 缺点:AGM 电瓶不耐高温,一般不能安装在发动机舱内。 这样就能理解为什么 AGM 蓄电池什么地方都有,就是不在发动机舱内。 查了下手册,才发现需要换的蓄电池居然在后排下面,打开后是这样的。 开始还以为是设计的脑袋被驴给踢了,把一个蓄电池放在这么隐蔽的地方,还不太好拆,原来这一切都和 AGM 蓄电池的特性有关。 用啥品牌 车用蓄电池通常也属于需要维护的一个组件。 尤其是冬天的时候,蓄电池的性能随着气温的变化会下降,会出现启动困难的情况。 这个时候就需要进行更换了,蓄电池的更换通常自己就能完成,当然不想自己动手的,也可以找 4S 店或者其他外面的车行来弄。 其实自己弄比找他们弄还更快,找到型号后自己用扳手拧下螺丝就好。 貌似 Costco 和 山姆会员店都能够提供电池更换的服务,不想弄的找他们弄也行。 以前都是找他们弄得,但总感觉他们给装上去的蓄电池有质量问题还是怎么的,没几年就要换了,原装的蓄电池通常寿命是他们装的 2 倍都不止。 至于用什么品牌其实也纠结过,发现这个东西终究还是消耗品,什么乱七八糟的品牌都有,如果去 AutoZone,技术参数差不多的价格比 Walmart 要贵出去 100 多。 既然是消耗品,这次就抱着差不多能用个 3 年就行的态度挑一个便宜的吧。 选的是 Walmart 的,这牌子也没怎么听过,肯定是没有 duracell 这个牌子有名气。 架不住便宜不是。 安装倒也简单,打几个螺丝就行,安装后的效果也还不错,明显感觉比老的蓄电池启动更加丝滑,至于能丝滑多久,等几年后再来补充吧。 也有可能几年后车就卖掉了,补充的机会都没了。 https://www.isharkfly.com/t/agm/16790
在亚洲几个国际机场都转机过,这次发现香港机场转机和在仁川机场转机同样方便。 需要的条件当然是护照和下一个航班的登机牌。 流程 当到达香港机场后,就跟随大部队走就好了。 在尽头有一个标志上面写着是转机还是入境,这个时候别走错了,选择走转机通道就行。 进来后马上就会看到一个安检设施,需要准备的是你的护照和登机牌。 有工作人员会扫描你的护照后再扫描的你登机牌。 没有问题后,就会引导你进入安检通道,通过安检通道后就会进入候机楼了。 整个过程只要有你护照和后续航班的登机牌即可。 至于是不是同一个预定号还是同一个航司都没有关系。我们这次转机是完全不同的预定号和完全不同的 2 个航司。 整个转机的过程非常丝滑,没有任何问题。 可以说香港机场的转机非常友好。 https://www.isharkfly.com/t/topic/16781
这次飞行还是非常折腾的,从香港到美国的机票是同一个联盟出的 2 个航空公司的票,到香港的机票和从香港出发的机票一点关系都没有,单独出的票。 等于这次飞行有关机票的确认号都有 3 个,还是不同航空公司的。 本没想着要飞国泰的,但从时间上来看,国泰的时间最好,机票虽然只贵了那么一点点,但架不住时间好,飞机大。 这是也第一次飞国泰,想着体验下看看。 浦东机场 因是第一次飞国泰,肯定不是国泰的高卡客户,只是一个普通的白板客户。 浦东机场国泰柜台的地面服务还是比较专业的。 无奈是因为不同联盟的票,还涉及到 2 个国家的转机,国泰航空的地面工作人员也努力的尝试把行李直挂到最后的目的地。 虽然最后也做到了,但国泰的工作人员还是有点担心行李不能直接到最后的目的地,还多次提醒我们在最后一次转机的时候确定下行李是怎么走的。 这些问题其实和国泰的关系不大,但国泰还是努力的尝试帮我们跨联盟来解决这个问题。 感觉浦东机场国泰的地面工作人员的专业素质是可圈可点,而且我们的行程因为行李,因为出入境的问题都需要反复确认。 在浦东机场需要的时间比较长,国泰的地面工作人员都很有耐心的再次确认和帮忙解释,就冲这点就得给他们好好点个赞。 机型 国泰飞香港得飞机从浦东机场起飞选的是 777,飞机上人不多,飞机也比大,乘坐的舒适度上肯定是要比 737 系列的窄体机要好。 建议如果从香港转机的话,能够选择大飞机的话就选择大飞机。 其他国内一些航司会使用 737 来飞,差不多的情况下,多花 100 多点,这个是绝对物有所值。 餐食 虽然飞香港也就 2 个小时多点的时间,吃东西也存粹是打打发下时间。 但国泰的餐食还是比较适合亚洲胃,还给了金属的餐具。 很多航司在餐食上能用塑料的就用塑料的,现在都开始使用一次性的竹子餐具了。 在这个情况下,国泰还能给金属餐具已经很不错了。 而且餐食的口味是这么多年飞的口味很好的,可能主要原因还是这个亚洲胃吧。 体验 这次香港转机的体验要比上次好很多了。 上次香港转机体验不好的原因是需要出机场然后租车到深圳,这感觉实在是太差。 如果能够在香港直接转机,不需要出机场的情况下,香港转机非常便捷和仁川机场转机是一样的,都非常方便,没有任何问题。 指示牌也非常清晰。 国泰航空的体验也非常不错。 唯一需要注意的地方就是在上海打印登机牌的时候最好把所有的登机牌都拿到,因为在转机的时候需要证件确认和再次安检。 如果没有拿到下一程的登机牌的话,转机时候会遇到一些麻烦,所以尽量在第一程开始办票的时候就拿到转机需要的登机牌。 https://www.isharkfly.com/t/topic/16776