跟老板学管理#2:全局、换位与多视角

疫情来了,从员工和老板两个不同的群里看对危机的感知。

看上表的话,你觉得员工有错吗?没有? 你觉得老板有错吗? 更没有!

位置不同,视角迥异。

人和人为什么对同一个事实存在会有截然不同的认知结果

就像家庭里经常有:有一种冷叫你妈觉得冷!

公司里经常有:你很努力,但不能给你加薪升职!

因为每一个结果都是基于自己的角度,考虑自己所代表个( 群 )体的利益最大化。

盲人摸象的故事闻名于中今中外,同一只大象,由于人的位置不同,对大象的认知完全不同。

管理,乃至人生不需要懂太多道理,盲人摸象的故事如果真正弄明白,万事就通了。

事情本无对错,只因人( 心 )有别。

历史总在重复,只因时代与人不同。

做管理不能拘泥于一个角度,一个时刻,而应着眼于全局,调和矛盾,解决问题。

去掉了WordPress自定义摘要,翻页终于不错乱了

有读者反馈说看我博客的时候,翻页到后面或者搜索的第一页就出现页面错乱,我以为是个别文章的问题,昨晚花时间研究了一下,原来是WP摘要显示的问题。

因为2018年以前的博客是ASP平台的ZBlog,转换WordPress过来的时候,原来的自定义摘要也自动带过来了,但有些图片并没有替换src地址,还带着<#ZC_BLOG_HOST#>字样的url,狠了狠心,索性把所有的自定义摘要都删除了,可能会丢掉一些重要的信息。

我翻页到很多页,终于没有页面错乱了。

搞了个开发者专属Linux云主机

2018年重新捡起PHP,把博客从ASP平台的ZBlog转为WordPress,2019年弄了个VM虚拟机玩了一下CentOS的Linux系统,但弄虚拟机有点麻烦,下载CentOS安装包,安装到VM,基本配置跑起来,为了安全做快照,一个虚拟就得占用几十G,要是不用SSD硬盘,要不是内存足,真得跑得不爽。

这几年.NET Core突飞猛进,C#开发也开始从原来的.NET Framework逐步升级,为方便研究在腾讯云买了个Linux主机,1核4G2M只要376元2年。

昨晚花了2小时设置服务器端口放行,安装宝塔,配置LNMP(Linux+Nginx+MySQL+PHP),手动安装PHP7.3/4,先部署了个WordPress测试下(网站还得备案才行)。

有兴趣的话,赶紧趁有活动买一个玩玩。

活动链接地址:http://cloud.tencent.com/act/developer?sk=40902ab8511057d4d636e0640b291ce3

活动时间
2019年12月1日-2020年6月30日
活动对象
通过本活动开发者认证,且未在腾讯云付过费的用户(协作者除外)

通过我上述链接注册购买,我可以获得3个月的免费延长使用。你购买好加我微信,我发50元红包(3*376/24=47)给你。

.Net下请求Infor LN ERP WebService的5种方式

随着这几年Restful API的兴起,Web API遍地都是。以前老的WCF、WebService等的SOAP的份额越来越少。但总有些古老的应用或者企业级如ERP应用还是通过Web Service的方式提供对外集成接口。Infor LN ERP就是其中一个。

我这几年尝试了以下5中方法,与LN进行对接。

1、客户端代理类
2、动态代理类
3、WebClient
4、WebRequest
5、HttpClient

但前两种已经被我放弃了,后三种呢其实都是HTTP Request,通过标准的写法都可以很方便的与LN对接,注意两点:

1、拼接发起请求的XML
2、LN WebService返回500报错的时候,报错信息的转换
3、不要直接用using的方式使用HttpClient,因为由来已久的高并发时无法释放资源的bug,会让你崩溃。

至于后面三个方法,你可以从网络上找到一大把的Util/Helper类库,我就不贴出来了。

GitHub Desktop清除本地缓存

自从GitHub提供一个私有仓库最多3个协作者之后,我就开始尝试使用,一开始也在用.gitignore(https://github.com/github/gitignore/blob/master/VisualStudio.gitignore),后来增加Uni-App的代码,有个unpackage\dist的目录增加到忽略清单,但怎么都不生效。

后来只有求助百度、Google,得到解决方案如下,试了之后果然好了。

git rm -r --cached .
git add .
git commit -m "update .gitignore"

有几个注意事项:

1、已经安装了GitHub Desktop
2、打开CMD命令行模式窗口,切换到你的仓库目录,再执行上述命令

Find Something Worth Pursuing

时隔整整两年,跟我以前的E-Commerce/IT VP在Skype再次聊天,除了常规的寒暄,说一下近况,问候一下我们这里的疫情和家人朋友。谈到了一些职业规划和人生追求的事情。

这个单词Pursuing,其实我以前都不知道,只是在聊天时看到,然后就记住了。

想到了,很多时候,我们是从交流中学习,靠自己摸索这条路肯定不是最优的。

以前认为越多分享,越多收获。

现在有了新的认识,越多交流,也会越多收获。

如果你还是大四待毕业的学子,亦或是刚毕业没几年的职场新人,在这个疫情影响下的2020,记得多去打开心胸,去认识更多的人,记得在认识更厉害的人之前,通过一定的分享,也让别人感兴趣。

WordPress下载:429 Too Many Requests,怎么办

国内访问WordPress官方下载站:https://cn.wordpress.org/download/会经常出现:429 Too Many Requests – nginx的报错,怎么办呢?

这里通过翻墙得到最新版wordpress下载地址:https://cn.wordpress.org/latest-zh_CN.zip

那么如果你用的国外或香港的主机,只需要直接远程下载上面的地址,就能成功。

旧话重提:IIS将http强制https访问的正确方法

我以前写过《DTcms4/5中使用HttpModule将http访问301重定向到https》,也写过《使用Certify来自动申请并配置Let’s Encrypt免费SSL证书到IIS8》都提到了如何将IIS的http访问强制为https,如果你现在搜索.net强制https访问,或者iis强制https等关键词,会看到很多错误的指导。

常见问题1:要求SSL

比方说开启“ 要求SSL ”,然后用 403 的html(在 C:\inetpub\custerr\目录下,注意语言版本)重定向js代码,这个千万别用了。

<script type="text/javascript">  
    var url=window.location.href;  
    url=url.replace("http:","https:")  
    window.location.replace(url);
</script>

常见问题2:图形化设置IIS的URL重写工具

还有些介绍安装微软IIS的URL重写工具的,讲了半天一堆截图,操作下来因为版本不一样,还不一定成功,你直接按照我的方法,使用Web Platform Installer安装2.0版本:如下图。

然后也不要去IIS的管理器一个个站点去设置了,只需要在Web.config里面的 <system.webServer>节点内增加如下代码即可:

    <rewrite>
      <rules>
        <rule name="HTTP to HTTPS redirect" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="off" ignoreCase="true" />
          </conditions>
          <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>

如果需要开启HSTS请用以下代码,首次访问不用https,但之后都会强制使用了,所以建议开启!

           <rules>
                <rule name="redirect to HTTPS" enabled="true" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}"
                    redirectType="Permanent" />
                </rule>
            </rules>
            <outboundRules>
                <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
                    <match serverVariable="RESPONSE_Strict_Transport_Security"
                        pattern=".*" />
                    <conditions>
                        <add input="{HTTPS}" pattern="on" ignoreCase="true" />
                    </conditions>
                    <action type="Rewrite" value="max-age=31536000" />
                </rule>
            </outboundRules>

常见问题3:WebApi还在用自己写的filter重定向

这个方法未必不可以,但我不认为最优。我也在用,以下代码的BaseSystemInfo.ForceHttps是我的一个系统参数,可以自行切换,如果没有安装URL重写工具,本地测试可以http。

但有了URL重定向,这个重定向代码就不会执行了。

public override void OnAuthorization(HttpActionContext actionContext)
        {
            //先检查是否:强制https访问
            var request = actionContext.Request;
            if (BaseSystemInfo.ForceHttps && request.RequestUri.Scheme != Uri.UriSchemeHttps)
            {
                var html = "<p>Https is required</p>";
                if (request.Method.Equals(HttpMethod.Get) || request.Method.Equals(HttpMethod.Head))
                {
                    actionContext.Response = request.CreateResponse(HttpStatusCode.Found);
                    actionContext.Response.Content = new StringContent(html, Encoding.UTF8, "text/html");
                    //重定向
                    var httpsNewUri = new UriBuilder(request.RequestUri);
                    httpsNewUri.Scheme = Uri.UriSchemeHttps;
                    httpsNewUri.Port = 443;
                    actionContext.Response.Headers.Location = httpsNewUri.Uri;
                }
                else
                {
                    actionContext.Response = request.CreateResponse(HttpStatusCode.NotFound);
                    actionContext.Response.Content = new StringContent(html, Encoding.UTF8, "text/html");

                    //重定向
                    var httpsNewUri = new UriBuilder(request.RequestUri);
                    httpsNewUri.Scheme = Uri.UriSchemeHttps;
                    httpsNewUri.Port = 443;
                    actionContext.Response.Headers.Location = httpsNewUri.Uri;
                }
            }
        }

好了,看完这篇文字,你不要再去搜索查找可行的IIS强制https的ssl证书访问了。

通过Infor LN ERP中的EAN字段来聊聊UPC和Code 128

很多人一提起条码(BarCode),我就犯嘀咕,因为我不知道他们每个人所表达的是否是一个东西。

因为条码实在太多了,一维的,二维码,图书的,行业专用的。如果打开BarTender软件,你会发现选择如下。而GS1只是GTIN是全球贸易项目代码(Global Trade Item Number)的一个数据来源而已。

我们常见的微信二维码用得是 QR Code,图书用的是ISBN,商场超市买的很多物品是EAN或UPC编码。

言归正传,在我们Infor LN ERP里面的General Item Data里面有个可以维护EAN的地方,截图如下,红色框里的按钮是我们的客户化定制,连接了一个Web,会自动传递当前的Item Code,如果未匹配过EAN Code,就会自动从已购买的清单里面分配一个,如果已获取就直接显示出来。这个Web页面后台有个数据库,记录着Item Code和EAN Code的一一对应,同时也有一个所有的EAN Code的清单,这个是从第三方机构付费购买的。

如果是美国的公司,这里的EAN Code大概率都是用UPC-A编码,因为UPC(Universal Product Code)码是美国统一代码委员会制定的一种商品用条码,主要用于美国和加拿大地区。

UPC条码也有标准版和缩短版两种,标准版由12位数字构成,缩短版由8位数字构成。

标准版的UPC12的编码结构为:系统码(1位)+厂商码(5位)+商品码(5位)+校检码(1位)。

后来随着欧洲、亚洲、澳洲的需求,增加了一位国家代码,就是第一位,UPC也变成了13位了。美国和加拿大的国家码是0。

标准版的UPC13的编码结构为:国家码 (1位)+ 系统码(1位)+厂商码(5位)+商品码(5位)+校检码(1位)。

而EAN(European Article Number)码是国际物品编码协会制定的一种商品用条码,已经在全球90多个国家和地区使用,通用于全世界。

分配给中国物品编码中心的前缀区间为690-696,再由中国物品编码中心统一分配企业代码,产品代码则由制造商根据规定自己编制。

贴一张最近在国内热销的酒精制品的商品条码图,你用微信扫一扫就能看到来自中国物品编码中心的查询信息。

标准EAN13编码结构为:国家码(2/3位)+厂商码(5/4位)+商品码(5位)+校检码(1位)。

对比一下EAN和UPC的编码,你会发现这两个条码简直一模一样,宽度、高度、条码粗细,位置。不同处是
1、EAN把国家码打在左侧条码内外侧,而UPC是只讲国家码打在条码外侧
2、而最后一位5,EAN打印在条码内测,UPC打印在外侧。

所以当你看到左右两侧都有数字的时候,就是UPC码,卖到美国和加拿大的。

再回到上面看我贴得医用酒精消毒棉片,看看到底是UPC还是EAN?

因为EAN码是在UPC码基础上形成的,所以,在技术上EAN系统的光电阅读器可以阅读UPC系统的条码,而UPC系统的光电阅读器却不能阅读EAN码。

从位数上看的出区别,所以美国亚马逊的商品默认用UPC的话,一旦要上架到欧洲市场,就可以简单的在UPC编码前增加0变成13位的EAN码即可。

亚马逊规定,要在亚马逊上传商品每个商品都需要相对应的条码,UPC码或者EAN码都行。当然了EBay也有同样的要求!中国区的用户可以去亚马逊官方指定的供应商购买,网址:www.barcodestalk.com。

上面是大概的价格,当然购买中国区的到中国物品编码中心官网: http://www.ancc.org.cn/ ,价格上除了一次性加入费用,还有胶片制作费和系统维护费。

说了这么多了,你对EAN和UPC的定义、差别、价格、用途等都了解过了,再来看下Code 128,这个其实在我们仓库、生产运营中更常见,我们常见的生产工单、料号、数量、批次、波次等信息大都用这种条码形式来打印。最普通的扫描枪也能识别这个条码。Code 128可以接受标准数字和大写字母,小写字母,特殊字符,所以除了在企业内部管理,在物流、仓储领域应用非常广泛。

到此为止,我们把Infor LN ERP应用最多的条码就介绍完毕了,如果你还有其它问题,欢迎留言探讨。