最近阅读-2024-05-12

by kevin 12. 五月 2024 09:39 >
工具 简单易用的视频清除水印工具 https://github.com/lxulxu/WatermarkRemover 学习 一个程序员的自我修养 https://github.com/doocs/source-code-hunter/blob/main/docs/LearningExperience/EncodingSpecification/%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E8%87%AA%E6%88%91%E4%BF%AE%E5%85%BB.md 资源分享 运输大亨开源版 https://wiki.openttd.org/zh/ 言论 在任何战争中,最终占主流的必定不是温和派,而是极端派。 如果一个人系统地接受过某个学科的训练,了解所有基本的准则,了解历史与人类经验,然后担任领导人,那就更好了。 对于强烈不满现存社会秩序这一或那一方面的几乎所有不同人来说, 战争一下子把他们从日常的厌烦无奈中解脱出来, 使他们能转而投身到似乎有望带来欢欣前景的新环境中去。 债务原本是多种社会关系的往来,后来逐渐转为“数字”上的会计账目,慢慢变成道德上不可动摇的律则和罪恶。在这个时代,“日常生活的金融化”,不管我们愿不愿意,都已经卷入这场债务的绵密关系中。生活中的社会债务计算,已经抽离人类生活的脉络,更多是用价格来计算而不是人与人的价值。 虚拟货币正是货币的原始形式。信贷系统、账款甚至账单等和人类文明一样古老,它们的出现要远远早于现金。

最近阅读-2024-04-06

by kevin 6. 四月 2024 21:35 >
工具 图片生成音乐 https://imagetomusic.top/ Audacity,一款免费、开源的音频编辑工具。 https://github.com/audacity/audacity veracrypt一款开源的磁盘加密软件。 https://veracrypt.fr/en/Home.html 免费在线的PDF工具箱 https://www.pdfpai.com/ 学习 各种协议的详细解析 https://github.com/ByteByteGoHq/system-design-101 言论 物理是上帝的法律,数学是上帝的语言。 人们建立那些稀奇古怪的政权,往往不是因为他们本性邪恶,而是因为他们对现实不满,并拥有强烈 的自信,以为能够改造世界,让世界更好。但大部分时候,他们留下的只是狂妄和灾难。 长大是一个过程,成长是一段历程,成熟之后开启旅程。 痛苦能滋养勇气。如果只有美好的事情发生在你身上,你就不可能变得勇敢。 个人的财务管理,其实只有两条原则:一是支出小于收入,二是做对投资,投资对象可以是能够获利的资产,也可以是你的个人技能。

最近阅读-2024-03-09

by kevin 9. 三月 2024 09:17 >
工具 开源的邮件列表和营销平台。这是一个开箱即用的邮件营销平台,可以帮助你管理邮件订阅者、创建和发送邮件、分析营销数据。 https://github.com/knadh/listmonk Bandizip,最大的好处是不用解压文件就可以统计压缩包里面的文件数量。 https://www.bandisoft.com/bandizip/ 资源分享 这个网站提供2000多种生物的 3D 模型 https://sketchfab.com/ffishAsia-and-floraZia 言论 经理们对员工的要求,就是一句话:做你们昨天做过的事情,但是速度更快,成本更低。 对骄傲的人不要谦逊,对谦逊的人不要骄傲 。 君子贤其贤而亲其亲,小人乐其乐而利其利。 宗教的方法是信仰,哲学的方法是思想。 现在这个社会,是人类历史上第一个越来越以人类为中心的社会。 历史可能是以三种形式存在的,一是作为事件,一是作为神话,一是作为经验,而后两种正是时时可以被当作“记忆”。 利率是引导经济的钝器,货币政策工具具有“漫长而易变”的滞后性。 你可以逃避现实,但你无法逃避“逃避现实”的后果。 寇小则为盗,大则为戎。 安全有两种方式:常规的安全指的是尽可能多的发现并消除错误的部分,达到绝对安全,这是理想。另一种则是弹性安全,即使发生错误,只要及时恢复,也能正常工作,这是现实。 优异的判断来自于经验,而经验来自于拙劣的判断。 有些人很像 ChatGPT,ChatGPT 不理解任何材料,但可以利用这些材料,快速找到问题的合理答案。它会综合和模仿,有时表现得非常令人信服,就像某个知识渊博的人在谈论某个主题。如果你问一个探索性的问题,就会发现他们的理解很少,一切侃侃而谈都是表面的,没有深度。这都是模仿而不是真正的思想,他们只是故意让别人觉得似乎有道理。或许这就是ChatGPT受欢迎的原因。 任何傻瓜都能写出计算机能理解的代码。优秀程序员写人类能理解的代码。

springboot-同名class注入

by kevin 21. 二月 2024 14:30 >
springboot注入默认使用className作为注入的key,如果两个className一样,无法注入   添加配置CoreConfiguration package com.statcore; import com.xmeport.statcore.util.AnnotationBeanNameGenerator; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(nameGenerator = AnnotationBeanNameGenerator.class) @MapperScan(value = "com.xmeport.statcore.mapper" ,nameGenerator = AnnotationBeanNameGenerator.class) public class CoreConfiguration { }   创建AnnotationBeanNameGenerator类 package com.statcore.util; import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.type.AnnotationMetadata; import org.springframework.util.StringUtils; import java.util.Map; import java.util.Set; public class AnnotationBeanNameGenerator implements BeanNameGenerator {     private static final String COMPONENT_ANNOTATION_CLASSNAME = "org.springframework.stereotype.Component";     @Override     public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {         if (definition instanceof AnnotatedBeanDefinition) {             String beanName = determineBeanNameFromAnnotation((AnnotatedBeanDefinition) definition);             if (StringUtils.hasText(beanName)) {                 // Explicit bean name found.                 return beanName;             }         }         return definition.getBeanClassName();     }     /**      * Derive a bean name from one of the annotations on the class.      *      * @param annotatedDef the annotation-aware bean definition      * @return the bean name, or {@code null} if none is found      */     protected String determineBeanNameFromAnnotation(AnnotatedBeanDefinition annotatedDef) {         AnnotationMetadata amd = annotatedDef.getMetadata();         Set<String> types = amd.getAnnotationTypes();         String beanName = null;         for (String type : types) {             AnnotationAttributes attributes = AnnotationAttributes.fromMap(amd.getAnnotationAttributes(type, false));             if (isStereotypeWithNameValue(type, amd.getMetaAnnotationTypes(type), attributes)) {                 Object value = attributes.get("value");                 if (value instanceof String) {                     String strVal = (String) value;                     if (StringUtils.hasLength(strVal)) {                         if (beanName != null && !strVal.equals(beanName)) {                             throw new IllegalStateException("Stereotype annotations suggest inconsistent " +                                     "component names: '" + beanName + "' versus '" + strVal + "'");                         }                         beanName = strVal;                     }                 }             }         }         return beanName;     }     /**      * Check whether the given annotation is a stereotype that is allowed      * to suggest a component name through its annotation {@code value()}.      *      * @param annotationType      the name of the annotation class to check      * @param metaAnnotationTypes the names of meta-annotations on the given annotation      * @param attributes          the map of attributes for the given annotation      * @return whether the annotation qualifies as a stereotype with component name      */     protected boolean isStereotypeWithNameValue(String annotationType,                                                 Set<String> metaAnnotationTypes, Map<String, Object> attributes) {         boolean isStereotype = annotationType.equals(COMPONENT_ANNOTATION_CLASSNAME) ||                 (metaAnnotationTypes != null && metaAnnotationTypes.contains(COMPONENT_ANNOTATION_CLASSNAME)) ||                 annotationType.equals("javax.annotation.ManagedBean") ||                 annotationType.equals("javax.inject.Named");         return (isStereotype && attributes != null && attributes.containsKey("value"));     } }

springboot移除url中的sessionid

by kevin 21. 二月 2024 14:26 >
1. 配置文件中添加 [sourcecode language='xml' padlinenumbers='true'] server.servlet.session.tracking-modes=COOKIE [/sourcecode] 2. 对每个请求的url判断,重新改写。 package com.ac; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component public class SessionUrlInterceptor extends HandlerInterceptorAdapter {     @Value("${sessionUrlEnable}")     private boolean sessionUrlEnable;     @Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException, ServletException {         if (sessionUrlEnable && StringUtils.isNotBlank(request.getSession().getId())) {             String requestURI = request.getRequestURI();             String uriSession = ";jsessionid=" + request.getSession().getId();             LogUtils.logInfo("requestURI:" + requestURI + " sessionURI:" + uriSession);             if (requestURI.indexOf(uriSession) != -1) { //                LogUtils.logInfo("requestURI:" + requestURI + " Forward");                                requestURI = requestURI.replace(uriSession, "");                                request.getRequestDispatcher(requestURI).forward(request, response);                 return false;             }         }         return true;     } }

最近阅读-2024-01-27

by kevin 27. 一月 2024 09:09 >
工具 一个可视化全球天气实况的项目。该项目以可视化的方式展示了全球的天气情况,提供了风、温度、相对湿度等多种天气数据,以及风、洋流和波浪的动画效果。 https://github.com/cambecc/earth 小红书作品采集工具 https://github.com/JoeanAmier/XHS-Downloader 微信聊天记录迁移和备份工具 https://github.com/BlueMatthew/WechatExporter 视频翻译和配音工具 https://v.wonyes.org/ 资源分享 将 BiliBili 上面综合数据最高的一些中国历史视频,以时间轴的方式呈现。 https://www.historyline.online/ 言论 体格壮硕的男性和外形漂亮的女性更容易发怒,他们在解决社交冲突时比其他人更容易获胜,同时也体验到更强烈的优越感。 人不是什么都能的,尽管人很聪明,在繁衍后代这个问题上充分说明了这一点。人的聪明只是能够繁殖后代,但是不能设计后代繁殖。 帝国的存在往往以维护既有秩序和体制为基础,逻辑上帝国要求一种停滞的机制,不然帝国庞大的机制就会剥落,会在变动中风化瓦解。 大多数的文化冲突是“文明人”和“善良的未开化人”之间的冲突。 海上的霸权常常给那些握有这种霸权的民族以一种自然的骄傲,因为他们觉得他们能够到处凌辱人。他们以为他们的权力就和海洋一样地广大无边。

最近阅读-2023-12-14

by kevin 14. 十二月 2023 20:28 >
工具 一个查找重复文件的软件 https://github.com/arsenetar/dupeguru/ 言论 穷人即使在自己收入增加的情况下,也不会吃得更多更好,除了食物之外,他们需要面对太多其他的压力和欲望。 不过我们心里一定要清楚:要对外谈判,内部的冲突得先搞定。谈之前,谈之后,都不能让内部冲突消耗掉我们对外冲刺的能量。 在理论上,对外的部分叫战略,对内的部分叫结构,结构搞定了,战略才放得出去。 谈判重要的一点是,赢者不全赢,输者不全输。 破船还有三千钉。 我只想知道将来我会死在什么地方,这样我就不去那儿了。 如果我们试图理解一样看似独立存在的东西,我们将会发现它和宇宙间的其他一切都有联系。 动物在合适的地方能够繁衍,同样地,人只要在社会上找到了专属于自己的位置,也能够做得很成功。 简单是长期努力工作的结果,而不是起点。 恐怕事情就是这样的。假如有20种相互影响的因素,那么你必须学会处理这种错综复杂的关系——因为世界就是这样的。 假装知道未来的人总是有市场的。 想要理解万物是非常困难的,但如果你无法理解它,你可以把问题交给一位比你聪明的朋友。 在成为领先者之前,成功是发展你自己。当你成为领先者,成功是帮助其他人发展。 真理追求者之所以感到幸福,是因为他们的追求过程终于获得了成功,而不是因为他们终于拥有了真理。 信任能让资本主义运转得更好。 如果你觉得骂人是很好的主意,你可以留到明天再骂。 信任不只需要存在于朋友之间,有时也需要存在于敌人之间。 谈判者的文化底子很重要。尤其在东方社会,没有文化素养,是很难建立深层的关系的。

最近阅读-2023-11-15

by kevin 15. 十一月 2023 20:38 >
工具 一个开源免费的乐谱制作软件 https://musescore.org/ stretchly – 开源的休息提醒工具 https://github.com/hovancik/stretchly 言论 政治无论是表现为各个阶级之间的斗争,还是表现为对社会公共事务的管理,都特别强调理性的指引。理性是指从理智上控制行为的能力。政治理性则是理性的一般在政治领域的特殊表现。它注重立足实际、讲求效用,是为实用理性;它承认人的能力是有限的,或者说,人的理性是有限的,从而能够用谦卑的态度面对世界,用渐进的方式进行变革,是为渐进理性;它主张将一些一时不易弄清、不必弄清或弄清了并无益处甚至反有害处的问题搁置一边,不肯定、不否定甚至于也不怀疑,以避免不必要的麻烦,并注重通过实践以获得真知,达成共识,是为实践理性。 穷人的首要选择是:让自己的生活少一些乏味。 创业者有一个谬误,叫做"下一个功能谬误",指的是一种错误想法,认为自家产品的下一个新功能会突然让人们使用该产品。 企业的领导人不必非要说服员工跟着他走,因为企业里有等级制度,他通过这种组织形式传达指令,他的职责就是满足客户与股东。然而,一个政治领导人必须向其人民描绘他对未来的美好愿景,然后还要把这个愿景转变为具体政策,并说服人民,使他们相信这些政策是值得拥护的,最后还要把人民凝聚在一起,帮助他实现这个愿景。 在分享财富之前,我们首先需要创造财富。 壳牌的人才评估系统把人的特质归结为三种:强大的分析能力,合理把握事实的能力,以及善于总结原则并关注基本事实的能力。 人应该是平等的,但从来都没平等过。 个人和小企业适合去传授知识,而大公司不适合。因为大公司受制于保密政策,正式发布的每一个句子都得经由律师过目,再经严格的层层审查。 大公司的强项是付得起广告,小公司付不起。所以你能在传授知识方面大力投入,而大公司不能。 预防工作就算再便宜,穷人还是不会去做,他们只关心生病以后要花多少钱来治。 穷人的出场通常只是作为某种励志剧或悲剧的主人公,或令人钦佩,或惹人怜悯,而不是某种知识的传播者,人们不会向他们咨询其想法或计划。 贫穷并不仅仅意味着缺钱,它会使人丧失挖掘自身潜力的能力。 投机是在掌握有利胜算的情况下才承担风险。投机的艺术包括许多能力。精确地解释当时的状况;掌握胜算;知道如何下赌注,即使是在输的情况下,你仍能够参与下一盘赌局;具备心理的纪律,执行客观的知识,而不是由情绪主导决策。 工资的上涨意味着有更多的钱可以用来购买食品,但人们却用 50%的工资来购买能量更高的食品,另外 50%则用来购买价钱更高的食品。

最近阅读-2023-10-29

by kevin 29. 十月 2023 15:34 >
工具 BackgroundRemover,一个命令行工具,用于移除图片或者视频的背景。 https://github.com/nadermx/backgroundremover 学习 从头设计一个数据库,用于学习数据库知识。 https://github.com/spandanb/learndb-py 资源分享 一个教人如何种植蔬菜的网站 https://openfarm.cc/ 言论 所谓的资本积累规律是在了解资本积累的事实之后总结出的。 Vision is not enough; it must be combined with venture. 仅有远见是不够的,还必须与冒险相结合。 各种机构总是要把人们组织到某个区域或场所中,并在那里建立权力关系。 阶级是一种角色,而不是某个人身上贴的标签。我们总是同时扮演着多种角色。 政府通过刺激性政策工具或其他手段试图避免危机的做法是误导性的,到目前为止,更恰当的做法是让市场主导的“结构性调整”过程发挥应有的作用。对资本主义经济的健康发展来说这是一剂很有必要的药方。资本主义离死神越近,治疗的过程就越痛苦。当然,关键是不能让“病人”真的死掉。 你的产品解决了客户的问题,因此是你的资产。代码则是创造资产的成本。你拥有的代码越多,阅读、测试、更改和理解所付出的成本就越高。

可逆和不可逆的决定

by kevin 2. 十月 2023 09:58 >
​即使在您相对熟悉的领域做出决策,通常也存在不确定性。有时可以快速做出决定,不确定性是可以接受或可取的。其他时候,决策是缓慢而谨慎地做出的,以尽可能消除不确定性。 一旦你面临决定,问题就变成了你应该加快还是放慢速度。 您是否会收集尽可能多的信息,因为您知道收集信息的过程会减慢您的速度并带来成本?或者你能在信息不完善的情况下快速完成任务吗? 亚马逊的创始人杰夫·贝佐斯将决策比喻为门。他问自己这个决定是一扇单向门还是一扇双向门。有什么不同? 一旦踏入单向门,就无法再回来。这是不可逆转的。另一方面,使用双向门,您可以穿过、环顾四周,然后轻松返回到起点。 在一封股东信中,贝索斯写道: 有些决定是重要的、不可逆转的或几乎不可逆转的——单向门——而这些决定必须有条不紊、仔细、缓慢地做出,并经过深思熟虑和协商。如果你走过并且不喜欢另一边看到的东西,你就无法回到之前的地方。我们可以将这些称为第1类决策。但大多数决定并非如此——它们是可变的、可逆的——它们是双向的门。如果您做出了次优的第 2 类决定,您不必长期承受后果。您可以重新打开门并返回。第 2 类决策可以而且应该由具有高判断力的个人或小组快速做出。 随着组织规模的扩大,大多数决策(包括许多 2 类决策)似乎倾向于使用重量级 1 类决策流程。其最终结果是行动缓慢、不加考虑的风险规避、未能进行充分的实验,并因此减少了发明。我们必须弄清楚如何对抗这种趋势。 可逆到不可逆 决策处于从可逆到不可逆的连续体中的某个位置。您可以通过询问撤消该决定的成本来判断该决定在该范围内的位置。撤消的成本越高,它就越不可逆转。成本越低,可逆性就越大。 也许一个例子有助于说明这一点。今天早上刷牙后,你跑去商店买牙膏。然而,它们与您通常的品牌不同。由于这个决定很容易撤销,你很快就会拿起一个看起来不错的包裹,然后把它带回家。如果牙膏很糟糕,明天你可以轻松地换一种牙膏。现在考虑一个不可逆转的决定。想象一下您是一支 NBA 球队的经理。你正在考虑交易掉你的一位明星球员。一旦做出决定,就无法(轻易)撤销。 一旦您学会从可逆和不可逆的角度看待决策,一切都会改变。它还会改变您的决策方式。 尽快做出可逆的决定,并尽可能晚地做出不可逆的决定。 当决策是可逆的时,要尽快做出。最大的风险是拖延而不做出决定。获取额外信息的成本不值得。 当决策不可逆转时,放慢决策速度。最大的风险是做出错误的决策。获取减少不确定性所需的信息所花费的时间和精力是值得的。 我用这个启发辞去了工作并创办了我的第一家公司。虽然有些人认为这是一个巨大的风险,但我不这么认为。我意识到,如果公司失败了,我会学到很多东西,并且可以很容易地回到原来的工作岗位。这是有风险的,但没有一些人想象的那么大。 未来不可预测。 有时您可以应对不确定性或结果。就像在阅读评论或从工作人员那里听说一家新餐厅后尝试一家新餐厅一样。其他时候,您希望尽可能消除不确定性。你不会在一次美妙的约会后决定与某人结婚,不会在没有试驾的情况下购买一辆车,也不会把所有的钱都投入到你在杂货店排队时无意中听到有人谈论的股票。 避免分析瘫痪 尽快做出可逆的决定。尽可能晚地做出不可逆转的决定。 当我向人们提及这条规则时,他们会问:我怎么知道它已经尽可能晚了? 考虑一下我的 STOP、LOP 或 KNOW 规则。如果你停止收集有用的信息(STOP),你就会失去一个机会(LOP),或者你知道该怎么做(KNOW)。 如果您停止收集有用的信息并且没有任何前景,请做出决定。当您负责一家三字母机构(美国国家机构,如:FBI)的运营时,您会利用不完善的信息做出许多艰难的决定。一旦您与所有提供有用信息的人交谈后,就该采取行动了。问题是很多人不行动。他们坐在那里等待一些神奇的信息,这些信息可能会或可能不会出现,从而使决定变得明确。我称之为独角兽信息。我们知道它就在那里,但我们永远找不到它。你不能等待独角兽,你必须做出决定。等待独角兽的人们并没有坚持多久。 如果您即将失去一个有意义的机会,请做出决定。最近我的办公桌上出现了一个重大的房地产机会。虽然扭转并非不可能,但其成本将高得令人望而却步。就像任何涉及大量资金的决定一样——这是我写过的最大的支票,我深入细节,想要了解一切。起初,并没有急于做出决定。当利率开始上升时,这笔交易就变得更具吸引力。我的搭档打电话问我是否参加,因为无论有没有我,比赛都会进行。我必须做出决定,否则我就会失去机会。 如果您知道该怎么做,就做出决定。当您是老板时,有时您必须让员工离开。虽然你可以提供反馈和指导并希望事情会改变,但有时你醒来后知道该怎么做。一旦你知道继续前进对双方来说都是最好的选择,最大的错误就是等待。 快速并不总是鲁莽的 可逆决策的制定方式与不可逆决策的制定方式不同。 可逆决策并不是鲁莽行事或信息不灵通的借口,而是承认不完美的决策是可以接受的。 快速决策是一种竞争优势。沃伦·巴菲特曾在不到 48 小时内就收购做出是/否决定而闻名。快速决策是初创企业相对于现有企业的优势之一。 一个好的计划,现在猛烈地执行,比下周的完美计划要好。 贝佐斯认为 70% 的确定性是做出决定的适当分界点。这意味着一旦我们掌握了 70% 的所需信息就立即行动,而不是等待更长时间。在 70% 确定性的情况下做出决定,然后快速修正路线,比等待 90% 确定性的情况下做出决定要有效得多。 更多的信息并不意味着更好的结果 在眨眼:不假思索地思考的力量,马尔科姆·格拉德威尔解释了为什么不确定性下的决策如此有效。我们通常认为更多的信息会带来更好的决定——如果医生提出额外的测试,我们倾向于相信它们会带来更好的结果。格拉德威尔不同意:“事实上,你只需要知道很少的信息就可以找到复杂现象的潜在特征。您所需要的只是心电图、血压、肺部积液和不稳定心绞痛的证据。这是一个激进的声明。” 在医学领域,正如在许多领域一样,更多信息并不一定能确保改善结果。为了说明这一点,格拉德威尔举了一个例子:一名男子因间歇性胸痛而被送往医院。他的生命体征没有显示任何危险因素,但他的生活方式却存在危险因素,而且他两年前接受了心脏手术。如果医生查看所有可用信息,该男子可能需要入院治疗。但除了生命体征之外,其他因素在短期内并不重要。从长远来看,他面临着患心脏病的严重风险。 格拉德威尔写道: ……这些其他因素在确定该男子目前发生的情况时所起的作用是如此之小,以至于无需这些因素也可以做出准确的诊断。事实上,……额外的信息毫无用处。这是有害的。它使问题变得混乱。当医生试图预测心脏病发作时,他们搞砸的原因是他们考虑了太多的信息。 一旦您了解可逆决策是注入随机性、收集信息甚至委托给他人的好方法,事情就会发生变化。 不可逆转决策的最大风险是在需要之前做出决定。可逆风险的最大风险是等到最后一刻。 尽快做出可逆的决定,并尽可能晚地做出不可逆的决定。