最近不知道咋了,各种程序有问题都寻上我了,你说 .NET 程序有问题找我能理解,Windows 崩溃找我,我也可以试试看,毕竟对 Windows 内核也知道一丢丢,那 Visual Studio 有问题找我就说不过去了,但又不好拒绝,就让朋友发下卡死的 dump 我看一看。
因为 VS 是窗体程序,所以在卡死的时候看下主线程便知,使用 ~0s;!clrstack
即可。
0:000> k
# Child-SP RetAddr Call Site
00 0000004b`acaf9b90 000001ed`309f0f28 0x00007ffb`1b77bfe8
01 0000004b`acaf9b98 00007ffb`4a03e397 0x000001ed`309f0f28
02 0000004b`acaf9ba0 00007ffb`4a04c08e PresentationFramework_ni!System.Windows.Controls.ItemContainerGenerator.DoLinearSearch+0x1d7
03 0000004b`acaf9c70 00007ffb`4ab3bd36 PresentationFramework_ni!System.Windows.Controls.ItemContainerGenerator.ContainerFromItem+0x8e
04 0000004b`acaf9ce0 00007ffb`4ab3bd6e PresentationFramework_ni!System.Windows.Automation.Peers.ItemAutomationPeer.GetWrapper+0xc6
05 0000004b`acaf9d20 00007ffb`4ab3c94f PresentationFramework_ni!System.Windows.Automation.Peers.ItemAutomationPeer.GetWrapperPeer+0xe
06 0000004b`acaf9d60 00007ffb`4ba3f72c PresentationFramework_ni!System.Windows.Automation.Peers.ItemAutomationPeer.IsControlElementCore+0xf
07 0000004b`acaf9d90 00007ffb`4ba42026 PresentationCore_ni!System.Windows.Automation.Peers.AutomationPeer.IsControlElement+0x3c
08 0000004b`acaf9de0 00007ffb`4ba41e8b PresentationCore_ni!System.Windows.Automation.Peers.AutomationPeer.IsControlElement+0x36
09 0000004b`acaf9e20 00007ffb`4bcc5632 PresentationCore_ni!System.Windows.Automation.Peers.AutomationPeer.GetPropertyValue+0x7b
0a 0000004b`acaf9e70 00007ffb`4c182cf8 PresentationCore_ni!MS.Internal.Automation.ElementUtil.<>c__DisplayClass11_0.<Invoke>b__0+0x32
0b 0000004b`acaf9eb0 00007ffb`4c182bf6 WindowsBase_ni!System.Windows.Threading.ExceptionWrapper.InternalRealCall+0x68
0c 0000004b`acaf9f20 00007ffb`4c180202 WindowsBase_ni!System.Windows.Threading.ExceptionWrapper.TryCatchWhen+0x36
0d 0000004b`acaf9f70 00007ffb`4bca4423 WindowsBase_ni!System.Windows.Threading.Dispatcher.LegacyInvokeImpl+0x172
0e 0000004b`acafa010 00007ffb`480629e1 PresentationCore_ni!MS.Internal.Automation.ElementUtil.Invoke+0xb3
0f 0000004b`acafa070 00007ffb`7af71059 UIAutomationTypes_ni+0x729e1
10 0000004b`acafa0e0 00007ffb`7ae13eba clr!COMToCLRDispatchHelper+0x39
11 0000004b`acafa110 00007ffb`7af70fb7 clr!COMToCLRWorker+0x1ea
12 0000004b`acafa1b0 00007ffb`625b4cc9 clr!GenericComCallStub+0x57
...
我丢,这线程栈一看有意外发现哈,这 PresentationCore_ni
不是 WPF 的专用库嘛,下面还有 clr
,看样子 VS 的UI是 WPF 写的,顿时有一种亲切感,那既然是 .NET 程序我还是可以分析的。
进一步观察线程栈,可以看到它没有非托管的部分,诸如:user32.dll
,ntdll.dll
,也就说明此时的卡死只是托管层面,接下来使用 sos 专有的 !clrstack
观察,删减后如下:
0:000> !clrstack
OS Thread Id: 0x8144 (0)
Child SP IP Call Site
0000004bacafa220 00007ffb1b77bfe8 [ComMethodFrame: 0000004bacafa220]
0000004bacafb0d8 00007ffb1b77bfe8 [InlinedCallFrame: 0000004bacafb0d8] MS.Win32.UnsafeNativeMethods.OleSetClipboard(System.Runtime.InteropServices.ComTypes.IDataObject)
0000004bacafb0d8 00007ffb4c357e22 [InlinedCallFrame: 0000004bacafb0d8] MS.Win32.UnsafeNativeMethods.OleSetClipboard(System.Runtime.InteropServices.ComTypes.IDataObject)
0000004bacafb0a0 00007ffb4c357e22 DomainNeutralILStubClass.IL_STUB_PInvoke(System.Runtime.InteropServices.ComTypes.IDataObject)
0000004bacafb180 00007ffb4ba0f5ed System.Windows.Clipboard.CriticalSetDataObject(System.Object, Boolean)
0000004bacafb1c0 00007ffae3b1bd6a Microsoft.VisualStudio.Text.Utilities.WpfClipboardService.SetData(System.String, System.String, System.String, Boolean, System.String, Boolean, Boolean)
0000004bacafb210 00007ffae3b1bc1c Microsoft.VisualStudio.Text.Operations.Implementation.EditorOperations.CopyToClipboard(System.String, System.String, Boolean, Boolean)
0000004bacafb270 00007ffae3b199a2 Microsoft.VisualStudio.Text.Operations.Implementation.EditorOperations+c__DisplayClass176_0.b__0()
0000004bacafb2a0 00007ffae3b196ca Microsoft.VisualStudio.Text.Operations.Implementation.EditorOperations.CopySelection()
...
0000004bacafcc20 00007ffb2edd765b JetBrains.ReSharper.Feature.Services.Clipboard.CopyPasteAssistManager.DoCopyOrCut(JetBrains.Application.DataContext.IDataContext, JetBrains.Application.UI.Actions.DelegateExecute)
0000004bacafcc70 00007ffb2edd7628 JetBrains.ReSharper.Feature.Services.Clipboard.CopyPasteAssistManager.DoCopyOrCut(JetBrains.Application.DataContext.IDataContext, JetBrains.Application.UI.Actions.DelegateExecute)
0000004bacafcd00 00007ffb2edd5407 JetBrains.ReSharper.InplaceRefactorings.CutCopyPaste.CopyPasteManager.DoCopyOrCut(JetBrains.Application.DataContext.IDataContext, Boolean, JetBrains.Application.UI.Actions.DelegateExecute)
0000004bacafcd70 00007ffb2edd53c4 JetBrains.ReSharper.InplaceRefactorings.CutCopyPaste.CopyPasteManager.DoCopyOrCut(JetBrains.Application.DataContext.IDataContext, Boolean, JetBrains.Application.UI.Actions.DelegateExecute)
0000004bacafce50 00007ffb2edd4d88 JetBrains.ReSharper.Feature.Services.Clipboard.ClipboardActionHandler.Execute(JetBrains.Application.DataContext.IDataContext, JetBrains.Application.UI.Actions.DelegateExecute)
...
0000004bacafdc40 00007ffb2268a2da DomainNeutralILStubClass.IL_STUB_COMtoCLR(IntPtr, Int32, Int32, Int64, Int64)
0000004bacafde00 00007ffb7af71011 [ComMethodFrame: 0000004bacafde00]
从卦中看,是在处理剪贴板OleSetClipboard
的逻辑中一直出不来,而且还有一个外来的 JetBrains.ReSharper
插件,看样子朋友的某些操作让 Resharper
介入了。
为了进一步验证是不是 Resharper
导致的,可以根据 ip 找到所属的模块。
0:000> !ip2md 00007ffb2edd5407
MethodDesc: 00007ffb28e984b0
Method Name: JetBrains.ReSharper.InplaceRefactorings.CutCopyPaste.CopyPasteManager.DoCopyOrCut(JetBrains.Application.DataContext.IDataContext, Boolean, JetBrains.Application.UI.Actions.DelegateExecute)
Class: 00007ffb28ea1b40
MethodTable: 00007ffb28e98578
mdToken: 00000000060000aa
Module: 00007ffb201c48b8
IsJitted: yes
CodeAddr: 00007ffb2edd4f60
Transparency: Critical
0:000> !DumpModule /d 00007ffb201c48b8
Name: C:\Users\Administrator\AppData\Local\JetBrains\Installations\ReSharperPlatformVs17_265273ed_001\JetBrains.ReSharper.InplaceRefactorings.dll
Attributes: PEFile SupportsUpdateableMethods
Assembly: 000001edb0cce780
LoaderHeap: 0000000000000000
TypeDefToMethodTableMap: 00007ffb201d0020
TypeRefToMethodTableMap: 00007ffb201d03a8
MethodDefToDescMap: 00007ffb201d10a0
FieldDefToDescMap: 00007ffb201d21c0
MemberRefToDescMap: 0000000000000000
FileReferencesMap: 00007ffb201d2ae0
AssemblyReferencesMap: 00007ffb201d2ae8
MetaData start address: 000001edb6b8a960 (103320 bytes)
从卦中的 Name 来看,再一次确认了 ReSharper
的问题。
本着 4S 店只换不修的思路,让朋友直接卸载掉VS中的 ReSharper
肯定是没问题的,但为了兴趣继续探究下 Resharper 正在做什么?
从汇编代码看,当前正准备做两个 if 判断,而且都是 true,最后跳转到 IGeneratorHost.View
属性中,不管怎么说,这里还是不断的处理,所以我觉得这里的阻塞要么是 死循环 出不来,要么还需要再等等。
可能有些朋友好奇,Resharper 塞入到剪贴板中到底是什么数据,要想挖这个信息,可以看汇编从线程栈提取,这次就不搞这么复杂了,换个思路吧,先看 CriticalSetDataObject
方法源码,输出如下:
internal static void CriticalSetDataObject(object data, bool copy)
{
IComDataObject dataObject;
if (data is DataObject)
{
dataObject = (DataObject)data;
}
else if (data is IComDataObject)
{
SecurityHelper.DemandUnmanagedCode();
dataObject = (IComDataObject)data;
}
else
{
dataObject = new DataObject(data);
}
...
}
接下来用 !dso
看下有没有类似的 DataObject
和 IComDataObject
对象,输出如下:
0:000> !dso
OS Thread Id: 0x8144 (0)
RSP/REG Object Name
...
0000004BACAFB138 000001ed401e9ec8 System.Windows.DataObject
...
0:000> !mdt 000001ed401e9ec8
000001ed401e9ec8 (System.Windows.DataObject)
_innerData:000001ed401e9ee0 (System.Windows.DataObject+DataStore)
0:000> !mdt 000001ed401e9ee0
000001ed401e9ee0 (System.Windows.DataObject+DataStore)
_data:000001ed401e9ef8 (System.Collections.Hashtable)
0:000> !mdt 000001ed401e9ef8
000001ed401e9ef8 (System.Collections.Hashtable)
buckets:000001ed401e9f48 (System.Collections.Hashtable+bucket[], Elements: 3, ElementMT=00007ffb79123af8)
count:0x2 (System.Int32)
occupancy:0x1 (System.Int32)
loadsize:0x2 (System.Int32)
loadFactor:0.720000 (System.Single)
version:0x2 (System.Int32)
isWriterInProgress:false (System.Boolean)
keys:NULL (System.Collections.ICollection)
values:NULL (System.Collections.ICollection)
_keycomparer:NULL (System.Collections.IEqualityComparer)
_syncRoot:NULL (System.Object)
expand all 2 items
0:000> !mdt 000001ed401e9f48
000001ed401e9f48 (System.Collections.Hashtable+bucket[], Elements: 3, ElementMT=00007ffb79123af8)
expand all 3 items
0:000> !mdt -e:2 000001ed401e9f48
000001ed401e9f48 (System.Collections.Hashtable+bucket[], Elements: 3, ElementMT=00007ffb79123af8)
[0] (System.Collections.Hashtable+bucket) VALTYPE (MT=00007ffb79123af8, ADDR=000001ed401e9f58)
key:000001ed310ea6f0 (System.String) Length=11, String="UnicodeText"
val:000001ed401e9fd0 (System.Windows.DataObject+DataStore+DataStoreEntry[], Elements: 1)
hash_coll:0xf337c502 (System.Int32)
[1] (System.Collections.Hashtable+bucket) VALTYPE (MT=00007ffb79123af8, ADDR=000001ed401e9f70)
key:000001ed310eaa08 (System.String) Length=16, String="Rich Text Format"
val:000001ed401ea018 (System.Windows.DataObject+DataStore+DataStoreEntry[], Elements: 1)
hash_coll:0x30818946 (System.Int32)
[2] (System.Collections.Hashtable+bucket) VALTYPE (MT=00007ffb79123af8, ADDR=000001ed401e9f88)
key:NULL (System.Object)
val:NULL (System.Object)
hash_coll:0x0 (System.Int32)
increase depth
0:000> !mdt 000001ed401ea018
000001ed401ea018 (System.Windows.DataObject+DataStore+DataStoreEntry[], Elements: 1)
expand all 1 items
0:000> !mdt -e:2 000001ed401ea018
000001ed401ea018 (System.Windows.DataObject+DataStore+DataStoreEntry[], Elements: 1)
[0] 000001ed401e9ff0 (System.Windows.DataObject+DataStore+DataStoreEntry)
_data:000001ed401635e8 (System.String) Length=1165, String="{\rtf\ansi{\fonttbl{\f0 NSimSun;}}{\colortbl;\red0\green0\blue255;\red0\green0\blue0;\red0\green128\blue0;}\f0 \fs19 \cf1 \cb0 \highlight0 var\cf2 hostname = System.Net.Dns.GetHostName();\par System.Net.IPAddress[] hostaddrs = System.Net.Dns.GetHostAddresses(hostname);\par \par \cf1 var\cf2 localIPList = \cf1 new\cf2 List<IPAddress>();\par \cf1 for\cf2 (\cf1 int\cf2 i = 0; i < hostaddrs.Length; i++)\par \{\par \cf1 if\cf2 (System.Net.Sockets.AddressFamily.InterNetwork == hostaddrs[i].AddressFamily)\par \{\par \cf1 if\cf2 (hostaddrs[i].ToString().Equals(_localIP))\par \{\par localIPList.Insert(0, hostaddrs[i]);\cf3 //\uc1\u20248?\uc1\u20808?\uc1\u20351?\uc1\u29992?\uc1\u19978?\uc1\u27425?\uc1\u-28706?\uc1\u25509?IP\cf2 \par \}\par \cf1 else\cf2 \par \{\par localIPList.Add(hostaddrs[i]);\par \}\par \}\par \}}"
_autoConvert:true (System.Boolean)
_aspect:0x1 (System.Runtime.InteropServices.ComTypes.DVASPECT)
_index:0x0 (System.Int32)
increase depth
简单整理了下大概是这样的代码。
var hostname = System.Net.Dns.GetHostName();
System.Net.IPAddress[] hostaddrs = System.Net.Dns.GetHostAddresses(hostname);
var localIPList = new List<IPAddress>();
for (int i = 0; i < hostaddrs.Length; i++)
{
if (System.Net.Sockets.AddressFamily.InterNetwork == hostaddrs[i].AddressFamily)
{
if (hostaddrs[i].ToString().Equals(_localIP))
{
localIPList.Insert(0, hostaddrs[i]);//优先使用上次连接IP
}
else
{
localIPList.Add(hostaddrs[i]);
}
}
}
有了这些信息,还是先让朋友把 Reshaper 卸载掉看看,据朋友反馈在 Resharper 官方的 issue 里找到了解决方案,禁用了如下选项,暂时没有出现任何问题,截图如下:
综合朋友的反馈,这次VS的卡死就是他按下了 Ctrl+C
复制这段代码的时候,Resharper
插件介入,然后在处理富文本时出问题了,不知道大家可踩过类似的坑,算是给后来人一点定位经验吧。
最近,在工作之余,利用开源组件做基础,搭建了不少项目,很多读者非常感兴趣,觉得高大上,还有点炫酷的感觉。我个人也喜欢在工作之余玩一些有趣的项目。 知识和技能就应该活学活用,不仅要有过程,还应该有结果的呈现,这样学习起来更有成就感,这样才有更大的动力坚持下去。做自己热爱的事情,这种感觉挺不错。另外,我一直在强调动手实践,在实际搭建项目的过程中自然会碰到问题,然后分析问题,然后解决问题,水平自然在逐步提高。今天,来搭建一个简单的商城系统项目。麻雀虽小,但五脏俱全哦。功能完整,代码结构清晰。说明:本文以学习和交流为主,如果你在搭建过程中遇到疑问或者困难,欢迎一起交流和讨论。一.项目简介前后端分离的商城系统,包含商城、拼团、砍价、商户管理、秒杀、优惠券、积分、分销、会员、充值、多门店等功能,更适合企业或个人二次开发。话不多说,先看一张图感受一下: 二.技术选型后端使用技术: SpringBoot2MyBatis-Plus,SpringSecurity,Druid,Slf4j,Fastjson,JWT,Redis,Quartz,Mysql,swagger,WxJava,Lombok,Hutool
复制HAProxy是什么HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy的社区非常活跃,版本更新快速(最新稳定版1.7.2于2017/01/13推出)。最关键的是,HAProxy具备媲美商用负载均衡器的性能和稳定性。因为HAProxy的上述优点,它当前不仅仅是免费负载均衡软件的首选,更几乎成为了唯一选择。HAProxy的核心功能负载均衡:L4和L7两种模式,支持RR/静态RR/LC/IPHash/URIHash/URL_PARAMHash/HTTP_HEADERHash等丰富的负载均衡算法健康检查:支持TCP和HTTP两种健康检查模式会话保持:对于未实现会话共享的应用集群,可通过InsertCookie/RewriteCookie/PrefixCookie,以及上述的多种Hash方式实现会话保持SSL:HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输HTTP请求重写与重定向监控与统计:HAProxy提供了基于Web的统计信息
距离上一次写Python已有83天了,返校后又可以有时间折腾啦。嘻嘻,接下来将继续把Python剩下的知识点讲完。至于为什么要继续将Python讲完呢,一是小编想将Python这个模块一口气拿下,不能再拖拖拖拖啦;二是以后用爬虫也可以用到;三是以后可能会接触机器学习,反正学学总是没错的。接下来会学到的主要是Python的字符串格式化以及Time库的大致使用。 字符串格式化 什么是格式化?是删除一切数据吗?不,此处格式化指的是对字符串进行格式表达的方式。 在字符串格式化时经常使用到的是.format()方法。如下: <模板字符串>.format(参数)复制在使用字符串时还经常会用到“槽”这个概念,槽相当于一个占位信息符,且使用一对“{}“表示。如下:"{}:{}电脑的cpu占用率为{}%".format("2020","Bob",25)复制那么实际输出是什么呢?小编在此给大家演示了一遍: 源代码:print("{}:{}电脑的cpu占用率为{}%".format("2020",
首先说明笔者的服务器环境,阿里云服务器:8G内存,2核。自从团队运维小伙伴搭建了gitlab之后,gitpush代码时不时的就很卡,也经常出现gitlab反应超时——返回502错误,严重阻塞了团队项目的开发,伤心!转载请注明出处:https://www.cnblogs.com/NaughtyCat/p/gitlab-eat-too-much-memory-and-response-with-502-error.htmlSSH登上服务器,我去,卡的不要不要的,top命令一看,内存只有不到125M。在top-d3(每3秒刷新一次)模式下,按住shift+m(以内存排序),内存和cpu使用情况如下图: CPU还是有很多空闲的,内存所剩不多,USER为git和gitlab-+的全是gitlab的东东,gitlab内存占比超过%35,而且随着时间推移,如5小时后,freememory持续减少,buff/cache持续增加【CoderBaby】,onmygod!慌不要慌,淡定。我有上网法宝,我怕谁,一通google,答案了然于胸。基本方略,改配置文件(/etc/gitlab/gitlab.rb
在WSL2环境中clone一个很大的git项目,不走代理速度很慢,所以研究了一下怎么让WSL2走Windows的代理客户端。01—WSL1和WSL2网络的区别在WSL1时代,由于Linux子系统和Windows共享了网络端口,所以访问Windows的代理非常简单。例如Windows的代理客户端监听了8000端口,那么只需要在Linux子系统中执行如下命令,就可以让当前session中的请求通过代理访问互联网。exportALL_PROXY="http://127.0.0.1:8000"复制但是WSL2基于Hyper-V运行,导致Linux子系统和Windows在网络上是两台各自独立的机器,从Linux子系统访问Windows首先需要找到Windows的IP。02— 配置WSL2访问Windows上的代理有两个关键步骤:1.WSL2中配置的代理要指向Windows的IP;2.Windows上的代理客户端需要允许来自本地局域网的请求;由于Linux子系统也是通过Windows访问网络,所以Linux子系统中的网关指向的是Windows,DNS服务器指向的也是Window
1.SQL语句执行步骤 语法分析>语义分析>视图转换>表达式转换>选择优化器>选择连接方式>选择连接顺序>选择数据的搜索路径>运行“执行计划”2.选用适合的Oracle优化器RULE(基于规则)、COST(基于成本)、CHOOSE(选择性)3.访问Table的方式全表扫描全表扫描就是顺序地访问表中每条记录,ORACLE采用一次读入多个数据块(databaseblock)的方式优化全表扫描。通过ROWID访问表ROWID包含了表中记录的物理位置信息,ORACLE采用索引实现了数据和存放数据的物理位置(ROWID)之间的联系,通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。4.共享SQL语句Oracle提供对执行过的SQL语句进行高速缓冲的机制。被解析过并且确定了执行路径的SQL语句存放在SGA的共享池中。Oracle执行一个SQL语句之前每次先从SGA共享池中查找是否有缓冲的SQL语句,如果有则直接执行该SQL语句。可以通过适当调整SGA共享池大小来达到提高Oracle执行性能的目的。5.选择最有效率
(注1:如果有问题欢迎留言探讨,一起学习!转载请注明出处,喜欢可以点个赞哦!) (注2:更多内容请查看我的目录。)1.简介Array类型应该是除了Object类型外在JS中最常用的类型了,JS的数组与其他多数语言中的数组有着相当大的区别。虽然JS数组和在其他语言中一样,是一个有序列表,但不同的是其每一项可以保存不同类型的的数据,而且其数组大小是可以动态调整的。2.创建数组创建数组的基本方式有两种,即使用Array构造函数,或者使用数组字面量语法。2.1Array构造函数使用Array构造函数时,传入的参数有三种情况:没有参数vararr=newArray() console.log(arr);//[]复制会返回一个空数组,其长度为0。传入一个Number类型的整数值vararr=newArray(3) console.log(arr);//[empty×3] console.log(arr.length);//3 console.log(arr[1]);//undefined复制会返回一个长度是传入值且每一项都是undefined的数组。注意如果传入0会是一个空数组,而传入NaN,In
近日,经典大IP《超级马里奥》被带进了AR的世界里!开发者AbhishekSingh推出了AR版本的《超级马里奥》,该游戏可通过佩戴AR头显HoloLens进行体验。在这款体验中,玩家将置身纽约中央公园,以马里奥的视角加入游戏大战中。视频内容在游戏中,玩家将看到“马里奥系列游戏”中的经典道具,如地面上的绿色管道、愤怒的蘑菇怪等。玩家可以带着头显顶砖头、赚金币、吃蘑菇、打小怪、跨越障碍物。从该视频中我们可以看到,玩家可以选择“单人模式”或“双人模式”。在做出选择后,玩家视视野中就出现了灌木丛、问号方块和绿色管道等物体。在诞生的30多年间,马里奥的形象已经从横杠作为胡子、小点当做眼睛、方块就是鼻子的粗糙像素形象,逐渐升级为富有表现力的3D人物;如今的马里奥不仅进军VR界,还摇身一变成为AR游戏,为玩家带来了另一种全新体验。而HoloLens作为目前AR头显中“杠把子”级别的设备,自推出之时就搭载了不少小游戏,如《Fragments》、《YoungConker》、《RoboRaid》、《HoloStudio》、《Skype》、《HoloTour》、《Actiongram》等。为了方便开发者们
马斯克OpenAI要出产品了瞄准家用机器人由特斯拉首席执行官伊隆·马斯克(ElonMusk)和硅谷孵化器YCombinator掌门人山姆·奥特曼(SamAltman)联合创立的非营利人工智能研究机构OpenAI,希望为用户开发出一款家政机器人。OpenAI在周一的官方博客中解释称,开发机器人是测试和改进机器学习如何执行常规任务能力的好方法。该公司将会开发其它公司能够生产制造的“现成”机器人。这一理念是在没有财务动机的情况下,在企业架构之外设计机器人,从而加速推动创新。“一般的说,机器人是人工智能领域许多挑战非常好的试验台,”该博客称。OpenAI称,除去机器人之外,该机构的另一个主攻方向是聊天机器人,也就是能够用朴实自然的语言与用户进行交流的“智能代理”,这有点类似于FacebookMessenger上的聊天机器人。OpenAI的目标之一,是开发出一款聊天机器人,不仅能够完成查看电影放映时刻表和简单翻译等任务,而且能够进行对话、完全理解文件,或者是在不理解时能够提出一些问题。◎来源:新浪科技科学之星《自然》杂志选出十位中国科学之星“从古DNA领域到中微子、神经科学领域,中国的顶尖研究人
Lookat矩阵 在三维游戏引擎中,需要摄像机看向某个点,或者需要物体看向某个点,此时需要对物体的变换,以调整到我们需要的姿态。以Unity为例,Unity的坐标系是左手系,朝上的轴是y轴(up,绿色),朝前的轴是z轴(foward,蓝色),朝右的轴是x轴(right,红色)。现在我们想让foward看像某个点,需要对物体进行位姿的变换,那应该怎么做呢? 我们需要提供两个变量,target目标点,up可以理解为世界坐标下的朝上的方向,一般为(0,1,0) foward:用target-position并归一化。 right:用up和求得的foward叉乘,cross(up,foward) up:用求得的foward和求得的right叉乘,cross(foward,right) 为了验证正确性,用自己实现的函数和Unity提供的Lookat函数比较。 注意:这里为了方便,认为物体的局部坐标就是世界坐标(物体没有父节点),没有考虑缩放,认为缩放系数都为1. //物体的位置,目标点,朝上的方向 Matrix4x4m_lookat(Vector3pos,Vector3target,Vect
ABP框架v2.7.0已经发布! ABP框架和ABP商业版v2.7已经发布.我们没有为2.4,2.5和2.6发布博客文章,所以这篇文章也将涵盖这几个版本中新增内容和过去的2个月里我们完成了什么. 关于发布周期与开发 之前说过我们已经开始每两个星期发布一个新的次要功能版本,一般在星期四.我们的目标是尽快提供新功能. 在过去的7-8周里,我们在1,300+次提交中完成和合并了数百个issue和pullrequest,这只是ABP框架的库.每日提交的次数不断增加: ABP.IO平台正在快速增长,我们从社区获取的贡献越来越多. ABP框架有哪些新增内容? 对象扩展系统(ObjectExtendingSystem) 在过去的几个版本中,我们主要集中在以NuGet/NPM包使用现有模块时,提供扩展的方法, 对象扩展系统允许模块开发者创建可扩展的模块并允许应用开发者更容易地定制和扩展. 例如,你可以这样为Identity模块的User实体添加两个扩展属性: ObjectExtensionManager.Instance .AddOrUpdate<IdentityUser>(option
本文介绍使用css3的animation画一个太阳系行星公转的动画,再加以改进,讨论如何画椭圆的运行轨迹。然后分析京东和人人网使用animation的实际案例,最后结合css3的clip-path做一些比较特别的动画。 太阳系最终的效果图如下: css3的animation是通过关键帧的形式做出来的,首先设定一个动画的运行时间,然后在这个时间轴上的若干位置处插入关键帧,浏览器根据关键帧设定的内容做过渡动画。animation常结合transform属性进行制作。以一个简单的例子说明,以一个div,让其从左到右运动,如下图左所未(没有动画请刷新下页面) 先用css画出静态的图,然后再加动画的属性。整个工程完整的代码见这个Demo。html如下: <divclass='space'> <divclass='wheel'> <spanclass='line'></span> </div> </div>复制 在轮子wheel加一个动画的属性, .wheel{ animation:move3sline
转载自:普通索引唯一索引主键索引候选索引_iCoding91-CSDN博客_候选索引 普通索引 (1)定义:最基本的索引类型,没有唯一性之类的限制。 (2)创建方式: a、创建索引,例如CREATEINDEX<索引的名字>ONtablename(列的列表);b、修改表,例如ALTERTABLEtablenameADDINDEX[索引的名字](列的列表);c、创建表的时候指定索引,例如CREATETABLEtablename([...],INDEX[索引的名字](列的列表)); 唯一索引(UNIQUE索引) (1)定义:不允许其中任何两行具有相同索引值的索引。(2)创建原则: a、当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。 b、数据库还可能防止添加将在表中创建重复键值的新数据。 例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓。对某个列建立UNIQUE索引后,插入新纪录时,数据库管理系统会自动检查新纪录在该列上是否取了重复值,在CREATETABLE命令中的UNI
堆: 一般我们提到的是二叉堆,是一种完全二叉树,二叉堆有两种:最大堆和最小堆。特点是父节点的值大于(小于)子节点 基础知识 完全二叉树有一个性质,除了最底层,每一层都是满的,这使得堆可以利用数组来表示,如下图 对给定某个结点下标i,可以计算出这个结点的父节点、孩子节点的下标: 父节点下标:i/2 左子节点下标:2i 右子节点下标:2i+1 但是数组都是0开始的,所以调整一下,如图: 父节点下标:(i-1)/2 左子节点下标:2i+1 右子节点下标:2(i+1) 维护堆 维护堆的性质过程如下图 由于调整一次,堆任然有可能违反堆性质,所以需要递归的测试,使整个堆都满足堆性质 建堆 将一个数组改造成一个堆,如图将其变成一个大顶堆 数组长度为l,首先找到(l/2)-1处,也就是下标为4的节点然后开始维护堆 然后自下而上,维护每一个节点,直到根节点 自下而上建堆比自上而下建堆效率高 go实现堆排序 packagemain import"fmt" funcmain(){ arr:=[]int{4,8,2,1,6,9,3,5,7,8,1,4} dui(arr) fmt.P
获取轮廓 #import<opencv2/opencv.hpp> #import<opencv2/imgcodecs/ios.h> #import<opencv2/imgproc/types_c.h> @implementationOpenCVHelper +(UIImage*)getImageOutLine:(UIImage*)iputimg { cv::MatcvImage; UIImageToMat(iputimg,cvImage); cv::Matgray; //Converttheimagetograyscale; cv::cvtColor(cvImage,gray,CV_RGBA2GRAY); //ApplyGaussianfiltertoremovesmalledges cv::GaussianBlur(gray,gray,cv::Size(5,5),1.2,1.2); //CalculateedgeswithCanny cv::Matedges; cv::Canny(gray,edges,0,60); //Fillimagewit
python的webbrowser模块支持对浏览器进行一些操作,对于爬虫来说是比较基础的知识点 1.主要有以下三个方法: webbrowser.open(url,new=0,autoraise=True) webbrowser.open_new(url) webbrowser.open_new_tab(url) importwebbrowserasweb web.open(‘http://www.baidu.com’,new=0,autoraise=True)#new:0/1/20:同一浏览器窗口打开1:打开浏览器新的窗口,2:打开浏览器窗口新的tab #autoraise=True:窗口自动增长 web.open_new(‘http://www.baidu.com’) web.open_new_tab(‘http://www.baidu.com’)复制 2.指定浏览器对象打开 web.get(name):获取打开的浏览器对象,name为空,则打开默认的浏览器,name为浏览器名称 直接打开则会报错,需要注册浏览器对象 web.register():注册浏览器类型 import
注册和登录Kaggle时验证码无法显示问题 参考:https://blog.csdn.net/zhuisaozhang1292/article/details/81529981 应用FQ软件需要时时关注更新状态,比较麻烦。 最简单的方法是在CHROME浏览器下安装并且激活谷歌访问助手 插件。插件下载网址: http://www.ggfwzs.com/ 按照指示(http://www.ggfwzs.com/ff/chrome/index.html)安装该插件时不一定要永久激活,也可以使用 需要短信验证码 参考:https://blog.csdn.net/appleyuchi/article/details/85218277kaggle手机验证问题 手机号格式是:+860131xxxxxxx2 即使满足这个格式也可能无效多试几次,注意每次试都要隔半天到一天以上
importdatetime importtime importos defdoSth(): #把爬虫程序放在这个类里 print(u'这个程序要开始疯狂的运转啦') os.system(r"cdD:\code\客户\微商_vincentcrzmba\wsxcme\wsxcme\spiders&scrapycrawlwsxcmespider") #一般网站都是1:00点更新数据,所以每天凌晨一点启动 defmain(h=20,m=22): whileTrue: now=datetime.datetime.now() ifnow.hour==handnow.minute==m: doSth() #每隔60秒检测一次 time.sleep(60) main()复制 linux下的定时任务 1.安装cron 通过命令“systemctlstartcron”发现未找到cron.service。这时我们需要安装cron,在命令行中输入“yum-yinstallcron”等安装结束后再次启动cron服务“systemctlstartcron”。 2.创建一个shel
最近微信小程序是炒的如火如荼,各种热门,正好赶上这个热潮,这几天先把小程序技术文档看了个遍,结合教程手写了一个案例。今天写了一个快递查询的小demo,大致分为三步 产品需求,准备api,代码编写。 第一步:产品需求,我们需要实现如下图的一个功能,在文本框输入快递单号,点击查询,下面出来我们需要的快递信息 第二步:准备 我们先找一个快递的api接口,通过http://apistore.baidu.com/我们可以看到很多的api,我们找一个快递查询的 我们可以看到有接口地址,和一些参数。做好这个准备接下来就开始编码工作了………… 第三步:编码工作 我们新建一个Express的文件,然后默认文件准备齐全 我们现在app.js中把我们的头部导航改为一个绿色的背景色 在index.json中设置导航的名称:“快递查询” 在index.wxml中,把默认的代码删掉,放上我们的一个文本输入框,一个查询按钮 <!--index.wxml--> <viewclass
分区表主表与子表一致性检查 1.分区表检查sql SELECTparent.relnameASparent,max(child.relname)ASchild FROMpg_inheritsJOINpg_classparentONpg_inherits.inhparent=parent.oidJOINpg_classchildONpg_inherits.inhrelid=child.oid --WHEREparent.relnamelike't_%' groupbyparent.relname orderbyparent.relname; 复制 分区表下有多少分区子表 SELECTparent.relnameASparent,child.relnameASchild FROMpg_inheritsJOINpg_classparentONpg_inherits.inhparent=parent.oidJOINpg_classchildONpg_inherits.inhrelid=child.oid orderby1,2; selectrelname,consrcfrompg_inher