iBOX使用教程

合集下载

iboxNAS10 说明书

iboxNAS10 说明书

iboxNAS10用户手册目录第一部分介绍 (2)产品简介 (2)产品功能 (2)术语和规则 (2)第二部分安装与初始化设备 (4)硬盘安装 (4)网络与电源连接 (4)开/关机 (4)初始化设备与恢复出厂设置 (5)设备发现与初始化 (5)第三部分日常使用 (10)进入设备首页 (10)通过广域网远程访问 (16)进入设备共享的文件夹 (17)系统设置 (18)用户设置 (20)用户设置 (24)系统设置 (28)系统维护 (45)注销 (54)BT/PT下载 (55)路由器端口配置 (55)添加种子 (56)查看BT下载情况 (59)对BT下载任务的操作 (59)查看已完成下载的BT任务 (60)BT相关设置 (60)从BT下载页面回到首页 (60)电驴下载 (61)进入电驴任务页面 (61)下载 (61)搜索 (62)查看已下载完成的电驴任务 (62)共享 (62)设置 (63)注销 (66)外接U盘或移动硬盘 (67)一键拷贝 (68)第四部分维护指南 (69)第五部分 技术支持 (72)第一部分介绍产品简介本产品型号iboxNAS10,属于OUO集团ibox系列高清片源服务器产品。

iboxNAS10是针对快速成长的数字家庭所构想的一款新概念产品,它将最新的网络附加存储技术融入家庭网络之中,并整合了互联网上非常流行的P2P下载技术,是集网络存储、智能下载、远程访问等于一身的创新产品。

其具有丰富的接口,包括USB, 以太网等,可方便的和计算机及其它数码设备相连接。

满足消费者对于安全存储、智能下载及数据共享的需求。

产品功能网络共享iboxNAS10具有千兆网络接口,家里的多台电脑及电视机可以同时访问设备,就如同访问本地硬盘一样操作简便,方便资料共享。

P2P下载iboxNAS10内置P2P下载引擎,只需将P2P的下载任务添加到设备中,无需打开电脑,设备即可自动进行高速P2P 下载。

大容量存储iboxNAS10配置高达1TB的硬盘,满足数字家庭大容量存储的需求。

vbox虚拟机安装Win8消费者预览版图文教程

vbox虚拟机安装Win8消费者预览版图文教程

Vbox虚拟机安装Win8消费者预览版图文教程Vbox虚拟机安装Win8消费者预览版图文教程本经验全面的阐述vbox虚拟机安装Windows8的全过程。

一.准备工作下载微软TyindOWS 8消费者预览版官方原版。

下载VirtUaIBOX (简称VbOX)虚拟机。

二.安装vbox并创建新的虚拟机用来装Windows 8从官方下载VbOX后一直下一步,下一步安装好VbOX。

打开安装好的VbOX,点左上角的“新建”,看到“欢迎向导”然后点下一步。

名称填写WindOWS8,下面的“操作系统”与“版本”自动识别变为MiCroSOft Windows 与Windows 8!这个说明我们下载的最新版vbox支持Windows 8 了。

好像常用的两个虚拟机都宣称支持WindowS 8 了。

接下来设置这个虚拟机的内存,建议分配这个数值是根据你电脑与WirIdOwS 8 需求VboX这个软件给出的默认值,保持不变继续下一步,你要是64位的Win7 同时内存很充足的话能够多分点。

虚拟硬盘默认给Start-叩Disk打勾同时选定的是“创建新的虚拟硬盘”不用修改,保持默认继续下一步就行!默认第一个VDl (VirulBox Disk Image)不用修改,点下一步!CD S)达 OnKle VM 5rt38ox Menace*gonWelcome to the virtual disk creation wizardTlui *ιt∙rd ∙ιll λ*lp F 9 er*⅜ι* ∙ αe vtrluU 4ιιk JreB nrt**l ∙∙eλ∣MV⅞∙ tλ∙不一步Are t0 ◎ tψ tK∙ p⅛<∙ ♦,,M s*w4 «4 tM Jt-多V⅜Uwv t. r*<wA Q。

tM“∙τ⅞r∙t >κ< Ye «0 Uv« 收索if y” VMbt 9 c<0K<l (Kt <κ<c⅝<ι∙⅜ «f tkιι ”“《rdFl∙*w U M ly>∙ Of f>l∙ <k⅜l y—VMI141I>M t∙ ⅜s∙ f∙r tk∙ K«V vιrlx>⅜l 4ιιk If y*⅜ 4∙ »•1 z∙4 <♦ ui4 it <ιlX 6<λ⅜r VIrQO⅜1 B∙∙ft∙g∙y⅜« ¢9 l∙w∙ QMt s∙<(∣ft< 9<λ*β<<dFil∙ Qfo m QfiEtlBu >∣ιk X»3 (V∣rtM<l ∙t<kiM 9ιιk) ηp QfwoJ Mer4 ∂>sk) >Q0 Φtr⅜U∙l> M3 D>tk)I Baijiηgy⅛n.baid默认DynamiCaalloCated,不用修改,点下一步!位置默认是你的Vbox所在盘的某个文件夹下,我把Vbox装到C盘了。

iboxp50使用说明书

iboxp50使用说明书

iboxp50使用说明书1. 数据内容:分析师对EPS、target price等的预测数据,buy-hold-sell的评级数据和分析师的一致预期数据(detailed,summary),和wind分析师预测数据种类有点像。

具体的预测数据包括年度、季度、半年频率的财务数据预测和长期增速a) Unadjusted:EPS预测;adjusted:对股票分拆进行调整(但是调整可能不那么精确)。

前者的分析师估计是基于截至估计日期的流通股数,而实际报告的收益是基于截至估计日期的流通股数收益报告日期,可能出现错误2. 预测报告来源:包括US和international file,美国的就用前者3. 样本期:earning数据从1983年12月开始4. 字段:a) Estimator:预测报告来源于哪家机构b) Analyst:预测的分析师代码c) Measure:预测指标d) 有关时间:预测数据发布的时间(announce),被记录的时间(activation),修正调整时间(review)和预测结束期间(forecast period end,大部分公司预测当年的end date都是12月末)e) FPI:注意看上一汇报期的时间,分析师对下一汇报期(财报)预测时间记录为1(FY1,current),2(FY2,next),6(current quarter),7(next quarter)。

如果真实数据公布了,那么FPI则会相应的调整为1值得注意的是:这篇replication需要考虑analyst是否关注同一fiscal year(如果A和B公司财年结束分别是5月和12月,那么在2021年12月分析师给出对A和B公司的预测FPI=1分别对应着2020年和2021年),但我不是很确定这个是否要一致,一致的话需要按照end date去推算5. 标识:a) I/B/E/S ticker:历史可追溯的唯一的ticker,而其他的标识(CUSIP,OFTIC)会因为兼并收购等变动b) 数据合并:compustat:IBTIC linktable;CRSP(1.gvkey;2.NCUSIP,exchange tickers,company name生成linktable更加稳健,用IBESticker和crsp的permno合并的;直接用这个linktable)6. 数据量相对较大,有的可能并不正确,所以使用的时候需要double check,关注PEAD复现代码是如何使用IBES数据库的。

iBox 浴室淋水箱系统说明书

iBox 浴室淋水箱系统说明书

Instruction Manual iBoxshower box systemThe kit includesA = Header profileB = Cover for header profileC = U-Channel for fixed glassD = Door thresholdE = Black slide railF = Sloping planes for slide railG = Transparent PVC vertical gasketH = Pair of soft-close mechanismsI = Pair of trolleys L = GasketsM = Right and left floor guideN = Wall mounting kit complete with screws, wall anchors, allen key and template.O = Right and left glass mounting kit P = Anti-jump locksQ = Aesthetic caps and coverkit01 - In Niche2 wall connectionskit02 - With 90° return panel1 wall attachment, 1 glass attachmentFixed Panel Installation:1- Place the bottom U-Channel (C – included) and silicone it to the shower tray.The use of silicone, clamps, or a vertical U-channel (not included) will be required to hold the fixed panel securely.Insert the fixed panel making sure it is perfectlylevel.4- Put in the end cap (Q) by first shearing the notch on the wall side and silicone it to theshower tray.3- Insert the threshold (D) by trimming it with this measu -rement: Z + 10 mm 5- Silicone the threshold (D)(right and left provided) and secure it with silicone.45- Cut the header (A) to the size of the niche- Drill holes with a bit, making 2 – 3 holes- Remove the tap from the header with pliers,-- Place the aesthetic cover (Q) at the drilled8109 L610- Position the headertemplate and mark the wallfor the holes to be drilled atdesired height.Hold the template with SideB facing out of the showerand Side A facing up, makingsure it is perfectly level. Drillholes with a 6mm (1/4”) drillbit.*Caution: not to be used witha 90° return panelF7F111311- After cutting down the header to the niche size L, insert the trimmed black rail (E) with this measurement: L niche – 2F – 10 – X13- Insert the two trolleys (I) holding the spring foils outward.HEADER ASSEMBLY121412- Insert an inclined plane (F) on each side of the header and fit it to the black rail. Position the end of the inclined planes 10 mm from the fixed panel and 8 mm from the sliding door side and lock them in with the screw.14- Insert the soft-close mechanisms (H) one on each side of the header, into the circular housing with the rubber stopper pointing in and flat side up.15161715- Insert the two anti-jump locks (P), one on each side of the header, not the appropria-te seat and leave them loose.16- Insert the wall attach-ment plate from the wallside and secure it with theappropriate grub screw.17- In cases of glass-to-glassapplication, use the appro-priate attachments (O, rightand left included)18- Once the header is assembled, lower it from the top so that the fixed panel fits into the header tap. Attach the header to the wall in the previously drilled holes, making sure it is level. Tighten the M5 grub screws of the plates.Completed Header Profile1919- Remove the plastic, octagonal studs from the trolleys.2020- Bring the door inside the shower stall. Place the 3 mm gasket on the trolleys. Slide the door first into the floor track, then straighten it and secure it to the trolleys by repositioning the octagonal studs and screwing them on. Do not tighten all the way.with arrows pointing upward.nal studs left or right.Caution: Lift the glass as little as possible.23- The two outer octagonal studs are used to adjust the force of the spring-loaded foil by speeding up or slowing down the closing movement. Adjustments of the inclined planes and soft-close mechanisms cause the door to slow down and prevent abrupt opening and closing.ADJUSTMENTS212223finish tightening the octagonal stud screws and soft-close mechanisms. Adjust the an -ti-jump locks so that the fin is flush against the glass.it in spot inside shower and press with the palm of your hand until it snaps into place.2425Glass Door Fabrication90° Return PanelGlass Heights A) Sliding Door B) Fixed PanelC) 90° Return PanelGlass Fabrication。

海为物联云盒 XBOX 使用说明书

海为物联云盒 XBOX 使用说明书

厦门海为科技有限公司物联云盒使用说明XBOX目录一、产品介绍 (3)1.主要功能 (3)2.功能特点 (3)二、产品列表 (3)三、产品参数规格 (3)四、云盒配套软件 (4)五、云盒外观及接口图 (4)六、云盒DI/DO接口 (5)七、云盒安装与使用 (6)1.硬件安装 (6)1.1注意事项 (6)1.2硬件安装步骤 (6)2.天线安装 (6)3.恢复出厂设置 (6)3.1恢复网络配置 (6)3.2恢复出厂设置 (7)一、产品介绍1.主要功能海为云盒XBOX 是一款带有开关点的物联网终端,我们称之为一款“不带屏幕且具有开关点功能的HMI”,可通过手机APP 与云网站轻松管理。

它是一款运行于嵌入式系统软件即海为组态工程的工业自动化监控管理设备,通过手机APP 与云网站的访问云XBOX 运行画面来监控工业的现场情况,也可与各种工业控制设备进行通信,汇集数据上传至云端对数据进一步应用。

2.功能特点●集成HMI 功能,可通过手机端/PC 端代替HMI 屏幕直接监控显示画面,操控既灵活又便利●支持A/B Key 安全机制、多机组网、数据库、多屏互动、云摄像机远程监控等功能●支持MQTT 协议,支持接入数据库服务器,轻松实现数据采集上报,对接ERP/MES 等系统●支持TCP/IP 网络通讯技术●带有8个开关点,选配可自定义开关点,即自定义输入/输出点的个数●支持云组态Cloud SCADA ,内置海为云引擎,集成海为云服务,支持云端/手机端访问控制●标配1个RJ45接口,1个串口,WIFI ,选配4G ,导轨安装二、产品列表三、产品参数规格规格型号XBOXXBOX Pro硬件处理器四核A7高性能处理器闪存4GB 内存512MB 串口RS232/RS485以太网1*10/100Base-T开关S0单刀双掷IO 端口8路光电隔离数字点输入可配置8路光电隔离数字点输入/继电器输出RTC 内置实时时钟电源输入电源24V DC ±20%功耗5W@24VDC电源保护具备浪涌保护、防反接保护耐电压500V AC绝缘阻抗超过50MΩ@500VDC环境存储环境温度-20~70℃操作环境温度-10~60℃环境湿度5~95%RH,无凝露型号存储I/O 接口LAN COM WIFI 无线网络产品尺寸(mm )宽×高×深XBOX 4G+512M 8DI 11有40×95×65XBOX-G 4G+512M 8DI 11有4G (全网通)XBOX-E 4G+512M 8DI11有国外4G XBOX Pro 4G+512M 8DI/DO 自定义11有XBOX-G Pro 4G+512M 8DI/DO 自定义11有4G (全网通)XBOX-E Pro4G+512M8DI/DO 自定义11有国外4G冷却方式自然风冷抗振动能力10~25Hz(X、Y、Z轴向2G/30分钟)抗冲击力15G,持续11ms,X、Y、Z三轴方向各6次使用环境防尘、防潮、防腐蚀、免受电击及外力冲击等环境外形整机尺寸40mm*95mm*65mm(宽*高*深)外壳材质工程塑料ABC+PC(阻燃要求:94V0级,符合ROHS要求。

超轻量级数据库iboxDB以及其使用

超轻量级数据库iboxDB以及其使用

超轻量级数据库iboxDB以及其使⽤ 之前⽤的 sqlite3 作为本地数据库, 可是它不能作为内存数据库, 是基于⽂件的, 在某些情况下没有读写权限就直接挂壁了, ⽐如 WebGL 中会报错 dlopen(), 然后给了⼀个链接,看过去太复杂了没有懂, 或者安卓⾥⾯ StreamingAssets 是压缩包⽂件, 也是没法直接使⽤的...... ⽽且 sqlite3 ⽤起来很⿇烦, dll 需要同时引⽤ Mono.Data 和 System.Data, 在Unity2017中需要⼿动扔⼀个 System.Data 进去, 要不然缺失引⽤, ⽽在 Unity2019中⼜不能扔进去, 会编译冲突...... 然后找到这个, 很简单⼀个dll完事 : 它的读取可以通过 path, byte[], Stream 等来实现, 能够实现很多种需求了. 不过有点奇葩的是它的⽂件命名⽅式, ⽐如我想要创建⼀个 abc.db ⽂件, 这是不⾏的, 只能传给它数字, 然后它⾃⼰⽣成 db{N}.box 这样的 db ⽂件, 或者传给它⼀个⽂件夹路径, 它会⾃动⽣成⽂件夹下 db1.box ⽂件, 实在够奇怪的, 不过⽣成出来的⽂件, 可以通过改名, 然后读取 bytes 的⽅式读取...... 反正是很神奇的脑回路, 我搞了半天才明⽩什么回事, 它也没有⽂档, 导致后⾯出现了⼀系列事故. 先来说说怎样⽣成数据库, ⽐如从 Excel 或是啥来源的数据, 要把它⽣成数据库的流程很简单, 就是先获取 Table 的 Key, 然后每⾏作为对应的数据录⼊数据库就⾏了, 可是插⼊数据在 iboxDB ⾥⾯是个很奇葩的操作 : AutoBox 是数据操作的⼊⼝, 它的插⼊只有泛型的 Insert<V> 来实现, 它的 API 设计是基于已存在的类型的, ⽐如⼀个数据库你要保存⼀个类 :public class Record{public string Id;public string Name;public string age;} 对于已经存在的类型, 它就很简单 :AutoBox autoBox = ......var rec = new Record { Id = "aa", Name = "Andy" };autoBox.Insert<Record>("hahaha", rec); 可是对于⼀个刚从 Excel 来的数据, 我们是没有类型的, 那么怎样才能创建⼀个类型给它? 这时候只能使⽤ Emit 了, 没有类型就创建类型, 然后它没有⾮泛型⽅法, 创建类型之后还需要从 Type 获取泛型 Insert<V> ⽅法, ⾮常⿇烦 : ///<summary>/// Generate IL code for no exsists type///</summary>///<param name="typeName"></param>///<param name="vars"></param>///<returns></returns>public static System.Type DataBaseRawTypeILGenerator(string typeName, params string[] vars){// 构建程序集var asmName = new AssemblyName("DataBaseRawType");var asmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);// 构建模块ModuleBuilder mdlBldr = asmBuilder.DefineDynamicModule(, + ".dll");// 构建类var typeBldr = mdlBldr.DefineType(typeName, TypeAttributes.Public);// 创建fieldif(vars != null && vars.Length > 0){foreach(var variance in vars){FieldBuilder fbNumber = typeBldr.DefineField(variance, typeof(string), FieldAttributes.Public);}}var t = typeBldr.CreateType();return t;} 通过创建类型, 传⼊ { "Id", "Name", "age" }可以创建出⼀个跟 Record ⼀样的拥有这些变量的类型, 然后需要根据它获取 AutoBox 实例的 Insert<V> 泛型⽅法 :public static MethodInfo GetGenericFunction(System.Type type, string genericFuncName, Type[] genericTypes, object[] paramaters, bool isStatic){var flags = BindingFlags.Public | BindingFlags.NonPublic | (isStatic ? BindingFlags.Static : BindingFlags.Instance) | BindingFlags.InvokeMethod;var methods = type.GetMethods(flags);foreach(var method in methods){if(method.IsGenericMethod && string.Equals(, genericFuncName, StringComparison.Ordinal)){var arguments = method.GetGenericArguments(); // 检查泛型类的数量是否对的上if(arguments != null && arguments.Length == genericTypes.Length){// 检查传⼊参数类型是否对的上, 如果考虑到可变参数, default value参数, 可空结构体参数等, 会很复杂if(MethodParametersTypeEquals(method, paramaters)){var genericMethod = method.MakeGenericMethod(genericTypes);if(genericMethod != null){return genericMethod;}}}}}return null;}// 简单的对⽐⼀下, 实际使⽤要考虑到可变参数( params object[] ), default value参数( bool isStatic = false ), 可空结构体参数( int? a = null )等public static bool MethodParametersTypeEquals(MethodInfo method, object[] parameters){var mehotdParamters = method.GetParameters();int len_l = mehotdParamters != null ? mehotdParamters.Length : 0;int len_r = parameters != null ? parameters.Length : 0;return len_l == len_r;} 这两个⼤招还是之前测试 Lua 泛型的时候搞的, 没想到会⽤到这⾥来, 然后就是依靠System.Activator.CreateInstance(type); 来创建实例保存数据了, 它的设计基于简单易⽤, 可是在这⾥就变得很复杂, 好在有 Emit ⼤法...... 然后就能⾛通流程了, 读取数据, 转换数据, 保存数据到数据库 :private static void FillDataBase_iboxDB(string tableName, string[] variables,List<Dictionary<string, string>> valueRows, string key){var type = DataBaseRawTypeILGenerator(tableName, variables); // 根据变量创建类型var insertCall = GetGenericFunction(typeof(iBoxDB.LocalServer.AutoBox), "Insert",new System.Type[] { type }, new object[] { tableName, System.Activator.CreateInstance(type) }, false); // Insert<V> ⽅法if(insertCall != null){var db = new iBoxDB.LocalServer.DB();var databaseAccess = db.Open();foreach(var values in valueRows){var data = System.Activator.CreateInstance(type); // 创建实例foreach(var valueKV in values){SetField(data, valueKV.Key, valueKV.Value); // 反射修改变量}insertCall.Invoke(databaseAccess, new object[] { tableName, data }); // 写⼊数据库}db.Dispose();}} PS : 意外发现它的 Key 可以⽀持中⽂, C# 变量也⽀持中⽂, 这样中⽂就不⽤转换了 PS : 突然想到从数据库中获取数据的时候, 其实类型是可以任意的, ⽐如public class Record1{public string name;public string x;}public class Record2{public string name;public string中⽂测试;} 那么泛型获取其实就跟写了⼀个过滤逻辑⼀样只获取对应的数据 :var bytes = System.IO.File.ReadAllBytes(@"C:\Users\XXXX\Desktop\Temp\abc.db");var db = new DB(bytes);var access = db.Open();access.Select<Record1>("from table");access.Select<Record2>("from table"); 如果使⽤元组来写的话, 是不是会简单⼀点? 不⽤另外定义了, 不过坑的就是它的 API对类型做了限定 : 元组不能通过 class 限定, 来测试⼀下 :public class Test : MonoBehaviour{public static void TestCall<T>() where T : new(){Debug.Log(typeof(T).Name);}void Start(){var t1 = typeof((string name, string x, string z, string中⽂测试));CallGenericFunction(typeof(Test), "TestCall", null, new Type[] { t1 }, null, true);}} 这是可⾏的 : 然⽽当限定了 class 之后是不⾏的 :public static void TestCall<T>() where T : class, new() // 限定class{Debug.Log(typeof(T).Name);} 好吧, 元组就是个结构体...... 不过这都不是问题, 通过我反射⼤师的计算, 还是可以通过上⾯的运⾏时创建类型来实现的, ⾸先看看最终效果 :[UnityEditor.MenuItem("Test/Write")]public static void WriteTest(){var bytes = System.IO.File.ReadAllBytes(@"C:\Users\XXXX\Desktop\Temp/abc.db");var db = new DB(bytes);var access = db.Open();var ins = iBoxDBHelper.GetFromTuple<(string name, string x, string z)>("ZW_Position", "起点", new string[] { "name", "x", "z" }, access); Debug.Log();Debug.Log(ins.x);Debug.Log(ins.z);} 结果是能够使⽤元组来替代指定类型的, 使⽤起来会⾮常⽅便. 代码也是沿⽤了创建运⾏时类型的⽅法, 不过这使⽤到了 Emit, 在必须进⾏ IL2CPP 的平台是⽆法编译的......⽐如各种主机平台. 中间的转换获取代码 :public static T GetFromTuple<T>(string tableName, string searchKey, string[] keys, AutoBox autoBox){const string TypeName = "Temp";object ins = System.Activator.CreateInstance<T>(); // 必须装箱, 否则⽆法设置 Fieldvar fields = typeof(T).GetFields();var type = iBoxDBHelper.DataBaseRawTypeILGeneratorRunTime(TypeName, keys); // 创建临时类型var tag = iBoxDBHelper.CallGenericFunction(autoBox.GetType(), "Get", autoBox, new Type[] { type }, new object[] { tableName, new object[] { searchKey } }, false);if(tag != null){for(int i = 0, imax = Math.Min(keys.Length, fields.Length); i < imax; i++){var varName = keys[i];fields[i].SetValue(ins, iBoxDBHelper.GetField(tag, varName)); // 从临时类型转换为元组}}return (T)ins;} 在这⾥发现匿名元组还是跟⽼版本⼀样很不好⽤, 就算在外部定义好了变量 : <(string name, string x, string z)> 这些变量 name, x, z 也是⽆法通过反射获取到的, 它的 field 仍然是 Item1, Item2, Item3... 所以才会需要⼿动传⼊ keys 来告诉反射给新的类创建哪些变量......⾮常多此⼀举. 并且因为没有名称的⼀⼀对应, 所以元组的变量顺序必须跟 keys 传⼊的顺序⼀致才⾏......var ins = iBoxDBHelper.GetFromTuple<(string name, string x, string z)>("ZW_Position", "起点", new string[] { "name", "x", "z" }, access); 如果可以省略new string[] { "name", "x", "z" } 这⼀段就完美了. 补充个元组⼩知识, 如果是硬编译的元组, 是可以在运⾏时获取元组的变量的, ⽐如下⾯这样 :public class C{public (int a, int b) M(){return (1, 2);}}// ......[UnityEditor.MenuItem("Test/Test")]public static void JustTest(){Type t = typeof(C);MethodInfo method = t.GetMethod(nameof(C.M));var attr = method.ReturnParameter.GetCustomAttribute<pilerServices.TupleElementNamesAttribute>();var names = attr.TransformNames;foreach (var name in names){Debug.Log(name); // 可以获取到 a, b}} 它是在编译时⾃动给函数添加了⼀个属性 [TupleElementNames] , 在运⾏时可以获取到, ⾄于上⾯的泛型怎样才能获取到我就不知道了, 因为泛型限定元组好像不存在.(2021.03.05) 回头看了⼀下, 硬编译的元组这⾥, 获取⽅法的⽅式也可以通过表达式树⼤法来获取, 看起来更优雅⼀些 :using UnityEngine;using System;using System.Reflection;using System.Linq.Expressions;public class TestSample : MonoBehaviour{public static class C{public static (int a, int b) ReturnSample(){return default;}public static void InputSample((int c, int d) data){}}void Start(){// test return{var info = GetMethodInfo(() => C.ReturnSample());var att = info.ReturnParameter.GetCustomAttribute<pilerServices.TupleElementNamesAttribute>();if(att != null){foreach(var varName in att.TransformNames){Debug.Log(varName);}}}// test parameters{var info2 = GetMethodInfo(() => C.InputSample(default));var parameters = info2.GetParameters();if(parameters != null){foreach(var parameter in parameters){var att2 = parameter.GetCustomAttribute<pilerServices.TupleElementNamesAttribute>();if(att2 != null){foreach(var varName in att2.TransformNames){Debug.Log(varName);}}}}}}public static MethodInfo GetMethodInfo(Expression<Action> expression){return GetMethodInfo((LambdaExpression)expression);}public static MethodInfo GetMethodInfo(LambdaExpression expression){MethodCallExpression outermostExpression = expression.Body as MethodCallExpression;if(outermostExpression == null){throw null;}return outermostExpression.Method;}}-----------------(2021.03.25) 之前⼀直没有把数据库替换成 iboxDB, 是因为使⽤ sqlite3 的时候获取的数据是 string 类型的, 然后直接转换成了我的 DataTable 类型 :public partial class Data{public Common.DataTable FID { get; private set; }public Common.DataTable FEATID { get; private set; }public void Init(Mono.Data.Sqlite.SqliteDataReader reader){this.FID = reader["FID"].ToString();this.FEATID = reader["FEATID"].ToString();}} 这样数据的类型转换就省去了, ⾮常⽅便. 可是 iboxDB 的反序列化对象是强类型的, 不能直接转换为 DataTable, 不像 LitJson 或者 Xml 这样提供了⾃定义转换, 所以需要进⾏⼆次转换 :// iboxDB 输出对象public partial class Data_iboxDB{public string FID { get; set; }public string FEATID { get; set; }public Data Convert(){var retVal = new FireHydrantData();retVal.FID = this.FID;retVal.FEATID = this.FEATID;return retVal;}}// 我们想要的对象public partial class Data{public DataTable FID { get; set; }public DataTable FEATID { get; set; }} 过程就成了 [iboxDB] -> Data_iboxDB -> Data, 然后就没有去继续测试了, 然⽽今天进⾏了测试, 发现效率上天差地别, ⾄少在全表数据获取的时候 iboxDB ⽐ sqlite 快了很多,如下 : Sqlite3 ⽤了46秒, iboxDB ⽤了2秒, 都是获取⼀个10012个数据的全表数据...... 找到⼀个说法 :在SQLite为.Net提供的驱动中使⽤列名进⾏读取的时候SqliteDataReader内部对结果集中每⼀列进⾏遍历并且不是遍历数组⽽是P/Invoke调⽤SQLite⾮托管函数.导致数据库数据读取性能下降.下降的程度根据结果集列数⽽变化. 好家伙. 刚好我就是⽤列名去获取数据了 :this.FID = reader["FID"].ToString();this.FEATID = reader["FEATID"].ToString(); 我改改代码, 看看使⽤ index 的⽅式会怎样 :public partial class Data{public Common.DataTable FID { get; private set; }public Common.DataTable FEATID { get; private set; }public void Init(Mono.Data.Sqlite.SqliteDataReader reader){this.FID = reader[0].ToString(); // indexthis.FEATID = reader[1].ToString(); // index}} 好家伙, 0.8秒 VS 46秒, 总算回归正确的地位了...... 然后把 iboxDB 的中间转换去掉, 直接获取 Data_iboxDB 的情况下, 仍然需要1.9秒, 果然反射式的永远⽐不了数据式的啊, 虽然⽤起来很⽅便的说.。

中国农业大学网络教学综合平台学生简明使用手册

中国农业大学网络教学综合平台学生简明使用手册

网络学习空间—学生用户简明使用手册第一步:登录网络学习空间 (2)第二步:修改密码 (3)第二部分通用网络教学平台 (3)第一步:进入课程教学空间 (3)第二步:浏览课程基本信息 (4)第三步:浏览教学材料 (5)第四步:答疑讨论 (5)第五步:课程作业 (6)第六步:试题试卷库 (6)第七步:在线测试 (7)第三部分精品课程申报评审与建设平台 (8)第一步:精品课程页面 (8)第二步:浏览申报项目课程 (8)第三步:观摩精品课程 (9)第四部分研究型教学平台 (9)第一步进入我的主题 (10)(1)主题信息 (10)(2)探究公告 (11)(3)探究计划 (11)(4)探究小组 (13)(5)小组交流 (14)(6)调查问卷 (14)(7)资源共享 (14)(8)成果展示 (16)(9)评价 (16)(10)退出主题 (18)第二步查看所有主题 (19)(1)浏览主题信息 (19)(2)参加主题 (19)第五部分教学资源库 (20)登录系统 (20)查询资源的快速方法 (21)第一部分登录系统第一步:登录网络学习空间直接在IE浏览器地址栏输入网址:http://202.205.91.65/eol/ 进入网络学习空间图1-1 访问网络教学综合登录系统后,继续点击“进入”按钮,进入平台,如下图所示页面。

图1-2 平台登录首页(登录后点击“进入”按钮)系统首页上输入用户名和密码。

登录系统后,继续点击“进入”按钮,进入平台,页面上方列出了五个导航栏,分别是:“个人首页”、“课程教学”、“研究型教学”、“精品课程”、和“资源中心”。

图1-3 进入系统之后的学生首页第二步:修改密码进入平台之后,您可以修改自己的密码。

图1-4 修改密码页面第二部分通用网络教学平台第一步:进入课程教学空间在页面上方列出的五个导航——“个人首页”、“课程教学”、“研究型教学”、“精品课程”、和“资源中心”中,学生的学习主要在“课程教学”模块中进行。

ibox对战联盟站点架设指南

ibox对战联盟站点架设指南

ibox对战联盟站点架设指南1、对战联盟介绍ibox对战联盟是由新线网络(以下简称新线)提供的基于互联网的单机游戏联机对战平台,ibox对战联盟允许普通站长免费架设属于自己的对战平台,为本站用户提供游戏对战服务。

加入到对战联盟的站点都是互通的,站点用户可以访问所有可见的互联网对战房间,其他站点用户也能进入本站的公网房间,从而极大的丰富和整合了对战联盟系统的资源。

对战联盟的结构如下图所示:新线ibox提供站长验证系统以及全局用户中心,站长可以架设属于自己的“对战服务器”(一台服务器可以容纳3000~6000用户同时在线),本站用户可以用本站的账号密码登录“对战客户端”,进行游戏对战。

站长只需要下载对战服务端软件进行架设,并在原有的站点系统中安装一个对战插件,就可以让本站用户无缝接入对战平台,为用户提供对战服务了。

对战主服务器要求能够连接互联网,而房间服务器和客户端则不一定要连上互联网,只要能连接对战服务器和站点用户系统则可。

也就是对战联盟也可以为校园网这样的区域网络提供高速对战服务。

对战联盟除了可以为站点用户提供对战服务,增强用户粘性外,还可以更好的展现本站系统,外站用户进入本站架设的对战房间时,可以展现本站点页面,加大站点流量。

随着对战联盟的发展,本站用户在对战平台中进行的相关消费,站长都可以获得消费分成,有效增加站长收入。

2、站长注册及软件下载要加入对战联盟,站长首先在对战联盟官方网站注册账号。

注册成功后进入“我的账号”,获取站点信息:站长ID以及通讯KEY。

这些信息在架设对战服务器时将会用到,用于对战服务器的验证。

站点要架设对战服务端,可以在对战联盟官网的“平台下载”页面中下载最新版本的“对战服务器架设软件”以及“对战用户登录插件”(根据本站用户系统类型进行下载,暂时还没有提供下载的,请联系客服进行定制)。

没有条件(站长没有服务器系统)架设服务端的站长(例如租用虚拟空间的站长),可以下载“对战客户端配置软件”以及“对战用户登录插件”。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
F) iOS8 测试次数:手机重启一次,输入密码的次数。默认只输入 1 次。可以设置 1-3 次, 只要最后一个密码输入,未显示已停用或者刚好显示已停用。
G) iOS8 检测延时(秒):最后一个密码输入完成,等待的时间,之后便会重启。用于检 测屏幕亮度变化。
H) 测试模式: 返回键+光感,HOME 键+关机键控制重启,光感检测屏幕亮度变化 返回键+震动,HOME 键+关机键控制重启,检测密码输入完成,有无震动信号 断电+光感,通过电池座供电控制重启,光感检测屏幕亮度变化 断电+震动,通过电池座供电控制重启,检测密码输入完成,有无震动信号
1, 编辑自定义密码: 可以手动编辑自定义的密码,4 位数字,一行一个密码。
2, 生成密码字典: 根据上面的设置,生成完整的 10000 组的密码文件。
3, 下载密码至仪器: 下载生成好的密码到仪器。
4, 选择密码字典: 选择用于电脑上测试的密码文件。
5, 恢复默认配置: 参数恢复默认值。
6, 保存配置:
解 IOS8.1 的 HOME 键连接点位置如下图所示: 注意解锁 IOS8 时,关机键一定要用胶带等压紧,HOME 键的点也要焊接牢固,否则会造成 手机的永久停用,这点一定要注意!!!
以上 HOME 键连接点适用于 iPod Touch 5 / iPad Air / iPad mini 等在此这里仅制做了 iPhone 6 / 6 Plus & iPhone 5 5c 5s 的 Home 连接点,但是大多数这个点都是一样的, 你也可以用废旧的 HOME 键做个就可以重复用了。
停用的(就无法继续解锁了)!!解锁过程中关机键必须全程压住!
2, 用烙铁把 HOME 键的脚连接在解锁器的 HOME 键控制线上,用烙铁焊接牢固,也不能脱 落,否则也会永久停用。HOME 键的脚,机型不同位置也不同。后面有点位图和其他机 型的 HOME 键胶位查找方法。
3, 将解锁线插入手机,手机应显示正在充电,然后将解锁器的感光模块扣在手机屏幕上, 扣在屏幕颜色较深的区域,注意不能放在最低下‘移动滑块来解锁’字样的正上方, 也不要放在密码输入框的旁边,可以放在白字的左边位置,将感光模块底部的感光孔 对着深色部分,并用橡皮筋或者胶带固定紧。
保存设备参数。
7, 下载配置至仪器: 下载设备参数到仪器。
点击开始测试,选择好密码字典,会出现下面的对话框:
可以手动设置要开始测试的密码,输入完,需按回车键确认,然后点击确定。也可以将起 始位置下载到仪器,进行脱机解码。
HOME 键+关机键重启解 IOS8 的方法与步骤(重要): 1, 用胶带压住关机键,可以垫硬物压紧,防止松掉,胶带多裹几圈,脱落后解锁会永久
4, 按下开始测试键,(仪器首次不会输入密码)将自动检测光感是否放置于屏幕上,如 果光感能检测到屏幕有亮度变化,过一会手机会自动重启,如果没有重启或者没反应, 说明可能你的关机键或者 HOME 键没接好,检查接好或者重启手机再重新操作下。手机 自动重启成功后,自动开始输入密码,手机振动,如果没有进入系统,感光没变化, 手机便再次自动重启,进行下一次密码测试,直到手机解锁成功,发出报警声。即使 解锁仪断电,也会记忆密码位置。
软件功能介绍:
1, 信息提示框:显示全部提示信息。 2, 解锁成功密码提示框:密码解锁成功,密码显示在这里。 3, 端口一手机参数配置:设备一的相关设置。 4, 端口二手机参数配置:同上。 5, 基本功能键:开始测试,停止测试,测试已知密码。 6, 状态栏:显示仪器基本信息 7, 进度条:指示处理的进度 参数配置说明: A) iOS 系统版本:选择要测试手机的系统版本,软件可自动识别。 B) 亮度变化值:解锁成功,屏幕亮度发生变化的值。一般默认 50 即可,可设置为 30-100。 C) 按键间隔(秒):默认 0.05 秒即可,无需更改。 D) 密码间隔(秒):iOS7 解锁时,设置为 4-5 秒。iOS8 解锁时,如果 iOS8 测试次数设
如何找到 HOME 键连接点呢? 手机正常开机。将数字万用表调到测量电阻,导通或者二极管的档位。用万用表 "+" "-" 表笔 , "+" 表笔 (红色) 接地,也就是手机负极。 用 "-" 表笔 (黑色) 探测 HOME 键上 的或是排线座的脚位, 若发现语音模式激活或是手机的屏幕有变化,那么这个点就是我们 要焊接的点。也可以直接用一根线,一头接地,另一头探测 HOME 键上的或是排线座的脚位。 注意解锁 IOS8 时,关机键一定要用胶带等压紧,HOME 键的点也要焊接牢固,否则会造成手 机的永久停用,这点一定要注意!!!
iBox 仪器使用说明 仪器特点: 支持同时解锁 2 部手机 多种解锁模式:HOME 键+关机键重启,断电重启,光感检测,震动检测 IOS 版本自动识别,通过解锁线可直接读取设备 iOS 系统版本,序列号和型号
10000 组自定义密码,自定义密码编辑,密码字典生成
操作简单,断电记忆,IOS7.0-8.10 完美搞定,无需开机排线,支持 4S,5,6P,IPAD,MINI 等设备的读取
置为 1 次,密码间隔设为 1 秒,无需更改。使用光感检测时,可以设置为 0.8-1 秒。使 用震动检测时,需设置为 1.2-1.3 秒。注意,设置时间过长,会造成永久停后,继续等待的时间。 iPhone5 已上型号可设置为 6-10 秒,4S 需设置到 25 秒。此等待时间设置过短,可能会 导致,密码输入手机未及时响应。
常见问题 1.密码输入无响应,手机不震动的解决办法 先重启下手机再测试,如果还不行,可能是输入法的问题,在接电话状态点信息,点自定 义信息,再点地球仪切换到英文键盘下即可。
2.解锁后 IOS7-IOS8 完美删除 ID 的方法 找台没有 ID 锁的 5 代或者 5S 手机,连接 iTunes 点备份到本电脑,备份好之后断开。连 接有 ID 的手机到电脑,在手机上选择 还原所有设置手机开始恢复。走完第一个进度条之 后,手机会出现菊花,立即点电脑上的恢复备份,出现一个小窗口提示,给你选择恢复或 者取消切记不要点恢复,就逗留在这个界面等几秒,手机会自动走第二个进度条,然后进 入系统,然后重启一下手机,成功删除 ID!
相关文档
最新文档