精华内容
下载资源
问答
  • 套打单据

    2019-10-04 07:17:15
    今天网上搜到一位大佬的方法 https://www.cnblogs.com/hsiang/p/6921817.html,但是有个小问题因为需要拆分大小写定位,所以调试位置比较多,希望有大佬可以指点迷津,类似单据套打如何精准快速定位! 以下是...

    最近一直研究套打票据,为了方便调试定位,开始一直用的excel套打,使用C# 操作EXCEL数据读写,感觉不是特别方便;

    今天网上搜到一位大佬的方法 https://www.cnblogs.com/hsiang/p/6921817.html,但是有个小问题因为需要拆分大小写定位,所以调试位置比较多,希望有大佬可以指点迷津,类似单据套打如何精准快速定位!

     

     

    以下是定位后的预览效果

    转载于:https://www.cnblogs.com/ty1216jhy/p/11606421.html

    展开全文
  • 如果没有队列的支持,那不排除有些同学不得不从socket服务器做起,直接跟TCP/IP起交道来。 其实multiprocessing.managers中有个BaseManager就为开发者提供了这样一个快速接口。 我们假定的场景是1个生产
  • 配合推 Tag 打包 NuGet 的方法,将可以让整套工具用起来特别爽,完全本地化 Tag 推送就完成了 NuGet 服务器打包推送 进入团队管理界面,我用的英文版的,但是按钮在中文版也没有变化。我的 VisualStudio 是 ...

    在 VisualStudio 的团队管理功能,提供了方便的添加 Tag 的方法,可以新建一个 Tag 添加 Tag 信息,同时推送某个特定的 Tag 到服务器。配合推 Tag 打包 NuGet 的方法,将可以让整套工具用起来特别爽,完全本地化打 Tag 推送就完成了 NuGet 服务器打包推送

    进入团队管理界面,我用的英文版的,但是按钮在中文版也没有变化。我的 VisualStudio 是 2019 的

    点击 Tags 进入标记界面

    此时可以通过点击 新建Tag按钮 新建一个 Tag 给他版本号和信息,请看下图

    点击创建按钮就可以完成了创建,上面代码只有 Tag 号是必须的,而信息是不必须的。当然有信息可以协助小伙伴更好了解这个 Tag 对应的功能

    此时就可以看到刚才新建的 Tag 了,右击这个新建的 Tag 号就可以找到推送按钮,点击推送按钮就可以将 Tag 推送到服务器了

    熟悉这个方法可以快速给代码添加一个 Tag 号

    配合 dotnet 配合 Gitlab 做自动推 Tag 时打包 NuGet 包 可以特别方便打 Tag 打包推送

    为什么需要推送 Tag 才能打包?原因是为了解决回退到某个版本发现有一个坑,这个坑是因为某个依赖库的版本问题,此时我期望最小改动,我虽然能拿到这个库的代码,但是我很难知道我这个版本安装的 NuGet 库对应依赖库的哪个 commit 的代码

    我之前每次需要追踪某个 NuGet 包对应的依赖库的源代码的版本的时候,都需要进入打包服务器,查看打包日志,在这样很坑玩了很久,公司的配置管理员干掉了服务器,删除了日志。而我接到一个很古老的项目需要修复某个坑,此时这个项目引用了一个底层库的古老版本,此时我不能升级底层库,应该底层库的改动量太大了。但是我又很难定位我现在项目引用的 NuGet 库对应的底层库的哪个 commit 代码。后面只能通过二分的方法,用了几天的开发才完成

    所以看到了我上面的坑,小伙伴大概也就能知道为什么我期望将 Tag 和 NuGet 包关联了

    在我现在团队的约定里面,只要添加了 alpha 也就是预览版,就可以随意推送测试的 Tag 让服务器帮你打包 NuGet 包,然后在其他的项目安装。为什么会鼓励这样做?原因是有小伙伴说我的某个项目的开发依赖某个库,但是假设这个库一定是合并到主分支之后才能打出 Tag 打包,也就是小伙伴在某个项目的代码将一直不能推送。同时小伙伴也不能在 csproj 里面引用某个私有的版本,因为私有的版本只有小伙伴自己能构建通过,其他小伙伴可构建不通过

    假设小 A 需要开发项目 F 而这个项目以来库 L 的更改
    而库 L 的更改如果没有合并到 master 分支,就不允许推送 Tag 打包
    此时小 A 如果推送了代码,这个代码引用了还没有被发布的 L 库的代码,那么其他小伙伴将无法构建通过
    此时小 A 如果推送了代码,这个代码引用了小 A 本地生成的 NuGet 库,那么其他小伙伴将找不到这个 NuGet 库,无法构建通过
    如果小 A 不推送代码,只是写了一个 commit 但是这个 commit 包含了 L 库的代码,但是没有在 csproj 里面升级 L 库版本,那么在回滚代码的时候,进入到这个 commit 将构建失败
    如果小 A 在 commit 里面升级到他本地生成的 NuGet 库,那么回滚代码的时候,因为公共服务器不存在小 A 的本地的 NuGet 库,依然会构建失败

    此时有一个叫头像的小伙伴出了一个馊主意,小 A 虽然 L 库代码没有被合并,但是可以知道这个 L 库被合并之后分配的版本号,此时就在 csproj 里面更新到这个版本,然后通过本地打包的方法引用和推送。但是这个方法存在以下问题

    • 小伙伴本地打包第一次,发现翻车了,想要第二次打包,但是此时的版本号就重叠了,需要经过黑科技删除 NuGet 缓存重新构建,此时的效率特别低
    • 小伙伴在这次 commit 写的代码是他认为发布的时候将会添加的公开方法,但是实际上最后发布的时候更改了公开方法,此时回滚到这个 commit 虽然能下载到 NuGet 库,但是发现 L 库的公开方法不匹配,构建失败

    这就是为什么选用推送 Tag 打包的原因,允许小伙伴自己选择预览版的版本推送,自动打包,这样就可以在项目中使用此Tag 打出的预览版的代码。此时的 commit 其他小伙伴也能构建,回滚代码的时候也可以在公共服务器找到 NuGet 包或切换到对应版本的源代码

    更多请看 VisualStudio 2019 新创建项目添加 git 仓库

    我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

    如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

    如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

    展开全文
  • 《程序员如何给自己口碑》 1、快速融入项目组 ​ 1)多参与公司的活动: 篮球、羽毛球、足球等,可以通过活动去多认识些人 ​ 2)每天的吃饭时间可以跟公司的老员工走,吃饭的时间也可以多让你了解公司 ​ 3)...

    《程序员如何给自己打口碑》

    1、快速融入项目组

    ​ 1)多参与公司的活动: 打篮球、打羽毛球、足球等,可以通过活动去多认识些人

    ​ 2)每天的吃饭时间可以跟公司的老员工走,吃饭的时间也可以多让你了解公司

    ​ 3)服从上司的领导,安排的任务一定要按时、按质、按量完成

    2、刚进入新项目组

    ​ 1)确定好公司的位置,找好出入口、茶水间、厕所等地方

    ​ 2)在公司多备一件外套、裤子、拖鞋

    ​ 3)尽可能多的微笑,问人用礼貌用语:“请问”,“谢谢您|你”…

    ​ 4)记住公司上下班的时间

    ​ 5)刚进入项目组:前两周一般都是看文档和搭环境,后面就是领导大概会分一些任务,然后自己照着别人写的代码做一下

    ​ 6)出现bug,如果已经百度了,还是解决不了,可以找老程序员帮忙解决,在请教别人技术问题的时候,一定要有礼貌,要谦虚,要描述清楚

    ​ 7)当别人给我们解决了bug的时候,一定要把这个bug怎么解决的记录下来,下次再出现相同异常就自己解决

    ​ 8)当别人找我们调bug的时候,在时间充裕的情况下,可以帮忙解决,也是展示自己能力的机会

    3、对自己写的代码负责

    ​ 1)写的代码有良好的注释

    ​ 2)养成规范化、标准化的代码编写习惯

    ​ 3)不在代码中留任何漏洞

    ​ 4)可以隔段时间再回头看看自己写的代码,多想想有无更好的方法解决

    4、养成备份代码的习惯

    ​ 1)每写完一个功能的代码,可以自己在本机做个备份,例如上传到svn服务器

    ​ 2)每个月做个系统的备份,在本机或者云盘上都可以

    5、建议写工作笔记

    ​ 1)处理了某项具体的功能,可以描述下,方便后续查询

    ​ 2)遇到一些增删改 生产环境的数据的时候,先把源数据写到工作笔记中,万一回滚也好操作

    6、多沟通

    ​ 1)做任何一个功能,一定要把需求弄清楚,不要一上来就写代码

    ​ 2)有任何疑问或者文档不清晰的情况,一定要找项目经理,或者自己的上司去聊

    展开全文
  • 随着移动端领域的快速发展,业务场景愈发复杂,为减少开发量和投入成本,混合应用(Hybrid App)占据了不少市场。混合应用承载H5页面的容器就是webview,前端人员在开发过程中或多或少都需要与原生(Native App)...

    导语

    随着移动端领域的快速发展,业务场景愈发复杂,为减少开发量和投入成本,混合应用(Hybrid App)占据了不少市场。混合应用承载H5页面的容器就是webview,前端人员在开发过程中或多或少都需要与原生(Native App)之间交互,这个交互的桥梁就叫做JSBridge。同样也有一套通用的调试方法来确保JSB通信顺利。

    什么是WebView

    WebView是原生应用用来展示网页的view组件,本质上就是一款内置了webkit内核的无头浏览器(headless browser),提供了例如页面前进后退、放大缩小、音频控制等一般浏览器具备的功能。

    可以将WebView想象成html里面的iframe标签,h5页面与原生应用的通信过程就像是iframe父子页面之间的通信,只不过iframe使用postMessage和message事件处理,而WebView使用的是JSBridge。

    什么是JSBridge

    JSBridge是支持原生应用与H5应用双向通信的“桥梁”。
    不支持在 Docs 外粘贴 block

    • 原生->h5:向h5应用通知原生应用的相关状态,触发h5页面的内容更新、消息发送、音频播放等
    • h5->原生:向原生应用通知h5应用需要使用的功能,比如使用摄像头、使用gps、唤起app等
      因为原生应用与h5应用各自运行在独立的环境中,他们通信的方式就像前端JSONP跨域请求一样,通过原生暴露的一些特性让双端进行联系。
      不支持在 Docs 外粘贴 block

    Android WebView

    Android WebView以4.4为分界点,采用了不同的内核:

    • Android 4.4前:基于Webkit内核,H5的很多新特性不支持,且存在适配成本高、不安全、不稳定、耗流量、速度慢、视频播放差、文件能力差等问题。
    • Android 4.4后:基于Chromium内核(google在webkit上的fork出来的项目),很多新的规范被支持,例如WebGL,Canvas2D,CSS3以及其他很多的HTML5特性,同时大大提升了WebView组件的性能。

    js调用java

    Android Webview共提供过三种JS调用java的接口:

    • JavascriptInterface
    • WebViewClient.shouldOverrideUrlLoading() 【官方已废弃
    • WebChromeClient.onXXX()

    JavascriptInterface

    这是 Android 提供的 JS 与 Native 通信的官方解决方案。

    • 首先Android RD需要实现一个类给 JavaScript 调用。
    public class WebAppInterface {
        @JavascriptInterface
        public void foo(String str) {
            // doing something
        }
    }
    
    • 将这个WebAppInterface类添加到 WebView 的 JavaScriptInterface 中。
    WebView webView = (WebView) findViewById(R.id.webview); 
    // 这里的Android会被当做一个变量,注入到页面的window中。
    webView.addJavascriptInterface(new WebAppInterface(this), "Android"); 
    
    • 最后就可以在 JS 中调用 Native 的方法了。
    function callFoo(str: string) {
        Android.foo(str);
    }
    

    WebViewClient.shouldOverrideUrlLoading()

    拦截webview内的url变更,例如iframe.src或location.href,若设置WebViewClient且该方法返回true,则可由代码自定义逻辑。

    一般采用URL Scheme的方式,它一种类似于URL的链接,原本用于唤起各类app而设计,主要特征是protocol和host一般是自定义的。

    所以可以事先约定好特殊格式的 URL Scheme,触发shouldOverrideUrlLoading拦截后,判断其格式是否符合,然后 Native 执行其特定逻辑。

    public class CustomWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(
          WebView view,
          String url
         ) {
          if (isJsBridgeUrl(url)) {
            // JSbridge的处理逻辑
            return true;
          }
          return super.shouldOverrideUrlLoading(view, url);
        }
    }
    

    WebChromeClient.onXXX()

    WebChromeClient支持监听浏览器的很多方法,比如:

    • Alert -> WebChromeClient.onJsAlert
    • Confirm -> WebChromeClient.onJsConfirm
    • Prompt -> WebChromeClient.onJsPrompt
    • console.xxx -> WebChromeClient.onConsoleMessage
    /**
     * 当网页调用alert()来弹出alert弹出框前回调,用以拦截alert()函数
     */
    public boolean onJsAlert(WebView view, String url, String message,JsResult result)
    /**
     * 当网页调用confirm()来弹出confirm弹出框前回调,用以拦截confirm()函数
     */
    public boolean onJsConfirm(WebView view, String url, String message,JsResult result)
    /**
     * 当网页调用prompt()来弹出prompt弹出框前回调,用以拦截prompt()函数
     */
     public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, JsPromptResult result) 
     /**
     * 打印 console 信息
     */
     public boolean onConsoleMessage(ConsoleMessage consoleMessage)
    

    以alert为例:

    • H5页面调用alert方法
    window.alert(message); 
    
    • 触发执行WebChromeClient.onJsAlert(),alert方法的入参message就是onJsAlert中的message参数
    public class CustomWebChromeClient extends WebChromeClient {
      @Override
      public boolean onJsAlert(
        WebView view,
        String url,
        String message,
        JsResult result
        ) {
            // doing something
            // 返回值true,表示拦截成功,false表示拦截失败,继续弹窗
            return true;
      }
    }
    

    Java 调用 js

    根据android版本,有2种方式:

    • loadUrl:全部支持
    • evaluateJavascript:安卓4.4版本之后

    loadUrl(String)

    webView.loadUrl("javascript:" + javaScriptString); 
    

    WebView.evaluateJavascript(String, IValueCallback)

    webView.evaluateJavascript("javascript:" + javaScriptString, new ValueCallback<String>() {
        @Override
        public void onReceiveValue(String value) {
          // 执行完成后的回调
        }
    });
    

    IOS WebView

    IOS8 以前使用的是UIWebview,但是它存在不少问题:加载速度慢、内存泄漏、内存占用高、超出内存限制会被kill掉或者强制触发gc。感兴趣可阅读《IOS混合应用切换app闪屏bug总结》

    所以在WWDC 2014 大会上,推出了WKWebView。它代替了 UIKit 中的 UIWebView 和 AppKit 中的 WebView,提供了统一的跨双平台 API。拥有 60fps 滚动刷新率、内置手势、高效的 app 和 web 信息交换通道、和 Safari 相同的 JavaScript 引擎。

    使用messageHandlers 调用swift

    • 设置messageHandler
    [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"showAlert"];
    
    // 为了避免循环引用,导致控制器无法被释放,还需要移除
    [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"showAlert"];
    
    • webview会向window全局对象上注入webkit,调用messageHandlers即可实现调用swift
    window.webkit.messageHandlers.showAlert.postMessage()
    

    使用UserScript来注入 JavaScript

    WKUserScript 允许在正文加载之前或之后注入到页面中,它以 JavaScript 源码形式初始化,初始化时还可以传入是在加载之前还是结束时注入,以及脚本影响的是这个布局还是仅主要布局。举一个简单例子:

    let source = "document.body.innerHTML = 'helloWorld'";
    // 注入脚本 在文档加载完成后执行
    let userScript = WKUserScript()
    let userScript = WKUserScript(source: source, injectionTime: WKUserScriptInjectionTimeAtDocumentStart, forMainFrameOnly: true)
    let userContentController = WKUserContentController()
    userContentController.addUserScript(userScript)
    
    let configuration = WKWebViewConfiguration()
    configuration.userContentController = userContentController
    self.webView =WKWebView(frame: self.view.bounds, configuration: configuration)
        // url scheme
        this.sendMessageQueue.push(msgJSON);
    
        this._dispatchUrlMsg("" + this.bridgeScheme + this.dispatchMsgPath);
      }
    } catch (e) {
      console.error(e);
    }
    

    相关文档

    前端工程师所需要了解的WebView
    关于shouldOverrideUrlLoading方法的一些考证
    理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome
    WebViewClient.ShouldOverrideUrlLoading Method
    IOS混合应用切换app闪屏bug总结

    展开全文
  • 团队激励,有时候虽然被称为“胡萝卜加大棒”主义,这做法其实和美国人在伊拉克或阿富汗搞的拉一派一派的民族主义似乎差不多,似乎大家也不太愿意听,但是没办法,我们有时候还是得承认,这就是一个客观存在的...
  • 建好了站才能为之后网站快速排名好基础,才能有效降低网站被惩罚的概率。下面就和大家做一些简单的归纳技巧: 1、 选择网站域名 选择域名时,选择越简单越容易记住的好,可以是汉字拼音或者拼音的缩写,这样更符合...
  • 随着人脸识别技术应用范围不断扩展,如何在Windows C#上基于免费SDK实现人脸识别应用开发,正成为开发者们关心的话题之一。 对于该需求,我推荐虹软视觉开放平台的ArcFace 3.0,免费、离线且可商用,包含人脸识别、...
  • 很多企业对会员运营的了解和操作水平较低,缺乏一套完整的营销方案。为会员提供的服务大多还停留...如何满足每个会员不同维度的需求,是会员运营运作中需要考虑的问题之一,也是会员运营中不可忽视的一点。正因为如此,
  • socket快速理解

    2016-05-27 22:40:51
    但是如何使用它,它是如何通信的。 直接看代码或者函数说明可能有点乱。在这里给出一个直观清晰的解释。下图是tcp接字的工作流程。然后再用类比说明让你快速明白工作流程。 服务器端: 获取电话线 socket() 分配...
  • Unity3D实战入门套餐

    2020-06-18 23:49:27
    本套餐中的第一门课程《Unity3D的UI系统(UGUI)初级入门》,详细介绍每个UGUI组件的基本用法,让你快速入门; 本套餐中的第二门课程《Unity3D棋盘游戏实战入门——2D智力拼图》在教你如何逐步完成一个简单的棋盘...
  • 4.如何打印设计和定位套打见样例四 5.如何控制纸张大小和连续打印见样例五 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10如何...
  • 下面给大家介绍如何在zero中集成打印功能,可实现模板设计、套打、批量打印、指令打印、条码/二维码打印等等。 首先需要设计一套灵活用于系统的打印业务,业务设计如下: 首先在core层中新增Prints文件夹,prints...
  • 4.如何打印设计和定位套打见样例四 5.如何控制纸张大小和连续打印见样例五 6.如何输出多页长文档及双面打印见样例六 7.如何定向输出见样例七 8.如何打印图片见样例八 9.如何用程序加载打印维护背景图见样例九 10....
  • 本文主要讲解如何快速程序连接Redis,进行一些常规操作 一、安装Redis 此处需要同学有一个可以ping通的设备。以下两个套餐都可以 凡人版:VMWare + Centos7 (关闭Centos的防火墙) 欧皇版:云服务器(端口要在...
  • Lodop6.0web打印控件及技术手册

    热门讨论 2011-10-09 17:04:03
    4. 如何打印设计和定位套打见样例四 5. 如何控制纸张大小和连续打印见样例五 6. 如何输出多页长文档及双面打印见样例六 7. 如何定向输出见样例七 8. 如何打印图片见样例八 9. 如何用程序加载打印维护背景图见...
  • 快速体验Vue.js

    2019-11-26 21:04:25
    如何使用Vue.js开发,会有一个Vue.js的快速体验。 什么是Vue.js? 它简单小巧的核心你个,渐进式技术栈,足以应付任何规模的应用。 在Vue.js的官网文档中这样写到: Vue (读音 /vjuː/,类似于 view) 是一套用于构建...
  • 如何快速获得大量精准客户,快速变现? 最快、最直接的方式就是,找到有你想要的资源的人,把他的资源拿过来为你所用。我们把这种方式叫做“鱼塘合作”。 但是,如果你什么优势都没有,你该怎么办? 下面,给你推荐3...
  • 如何能够快速、方便的编写打印;如何清晰、准确的定位;如何简单并优雅的实现;最后才能让我们摆脱这样枯燥的、重复的工作? 网上有很多强大的日志类工具,我也都使用过一些,但是都没有理想中的方便。今天我想分享...
  • 快速接字不必很痛苦 这就是建立该库的座右铭,而这正是我们所做的! 这是一个顶级接字库,非常适合游戏,聊天或任何其他联网应用! 如何安装 截至目前,此仓库没有setup.py(稍后会添加),但是可以很容易地...
  • 权威资料显示,数据分析...那么,问题来了,如何才能快速且同时掌握数据分析和人工智能呢?接下来给大家分享的教程资料绝对能够满足你的需求,更重要的是这个精品Python全套学习视频教程目前免费领啦,如果你想学Py...
  • 廖雪峰大佬最新打磨的《优秀数据分析师炼成记》首次公开了,这体系化的学习宝典,可帮不同阶段的数据分析人尽快摆脱工作困扰:日常困于存取、处理数据等基础工作,本部分能帮你快速掌握数据分...
  • 那么要如何快速的让客户信任你依赖你呢。我认为给客户留下良好的第一印象非常重要,不管你是面销还是电销,都是一样的道理。在销售中,第一印象非常重要。可以说大都数客户在见我们第一面开始,心理就已经决定是否与...
  • 调试就是跟踪代码,从而快速的定位异常所在的位置,帮我们分析问题出现的原因,并针对性的解决,提高我们的开发效率。 2. 如何进行调试? (1)在IDEA中,调试的常用快捷键默认和Eclipse的调试快捷键不一样。我们...
  • 如下图所示,这个东西是用来做快速成形的,也就是俗称的3D打印的,但是这个是工业级别的。这个设备是在我们现有的加工中心上来实现,也就是将激光熔覆头和等离子焊枪做成一体,相当于刀具,将它夹持在加工中心的机床...
  • 廖雪峰大佬最新打磨的《优秀数据分析师炼成记》首次公开了,这体系化的学习宝典,可帮不同阶段的数据分析人尽快摆脱工作困扰:日常困于存取、处理数据等基础工作,本部分能帮你快速掌握数据分...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 280
精华内容 112
关键字:

如何快速套打