是空裁。 中美裁军大使在日内瓦裁谈会隔空激烈交锋

京沪航线一日仅3班,飞行员被裁,空乘无薪假…民航遭遇“艰难的日子”_航空

是空裁

而在四周前,平均每20分钟就会有一架飞机从北京首都国际机场起飞前往上海虹桥机场。 显然,新冠疫情的持续已经将中国民航业逼迫到悬崖边,退后一步便是万丈深渊。 行业遭重创,其从业者自然也陷入岌岌可危之地。 2月8日,海南航空和中国南方航空公司共同计划解雇100多名俄罗斯飞行员;2月7日,海航子公司香港航空计划大裁员;2月3日,海航深圳基地通知员工可申请长达30天的无薪轮休假期……而据海航员工反馈来看,即便不休假,也要面临没有航班可飞的境地。 2月14日,在沈阳桃仙机场起飞的航班中,没有一架是飞往青岛流亭机场的,在疫情爆发前,这条航线每天约有8-9班次运营。 2月13日,珠海金湾国际机场全天出港航班仅剩10班、福州长乐机场40班、乌鲁木齐地窝堡机场25班、哈尔滨太平机场61班、无锡硕放机场13班、南宁吴圩机场17班…… 国际航线方面,来自OAG方面最新数据显示,在新型冠状病毒所引发肺炎疫情下,往来中国的国际航线中已有三分之二的航班被取消。 事实上, 民航业遭遇如此窘境并不让人感到意外。 目前,往来京沪航线每日仅剩3班且均为窄体机运营;在京广航线中,北京首都国际机场加北京大兴国际机场两场仅有8班;京蓉航线4班……部分二、三线城市航线更是出现了航线停运的情况。 在此之中,情况最为尴尬的莫过于海南航空。 受疫情影响,海航及其子航司几乎砍掉了所有国际航线且恢复时间仍是未知数,至少在3月28日以前,由海南航空国际航线均处于瘫痪状态。 值得一提的是,据海航方面债券报告显示,2019年上半年,海航集团亏损35. 2亿元,虽然海航集团持续进行资产处置,但2019年上半年的资产负债率不降反升,仍有超过7000亿元债务待偿。 加之当下疫情影响,海航方面的危机或将进一步加深,截至2月14日收盘,海航股价报1. 52元。 乘务员无薪休假,外籍飞行员或被裁 来自香港《星岛日报》6日晚报道,香港航空计划裁员约400人,其中,地勤人员每月至少放两周无薪假(每周只工作三天),机组成员同样要执行无薪假计划。 此外,香港航空后续还考虑将部分工作转交外包以降低运营成本。 事实上,香港航空与国泰航空的无奈举措只是当下民航业的缩影。 目前,国内大批航司均开始推行员工轮休无薪假期以帮助企业开源节流。 众所周知,飞行员历来是民航圈内的稀有动物,各家航司为了争夺一名成熟飞行员可谓使尽手段,甚至不惜拿出高于本土飞行员2-3倍的工资聘请外籍飞行员。 现如今,受疫情影响已有几家航司着手裁员高薪员工,其中,外籍飞行员或成第一批被裁对象。 据《塔斯社》2月8日莫斯科报道,中国多家航空公司开始裁减包括俄罗斯驾驶员在内的飞行人员。 其中,海南航空和中国南方航空公司共同计划解雇100多名俄罗斯飞行员。 而且据他所说,航空公司不仅裁减俄罗斯飞行员,而且外国飞行员的编制总体上也在减少。 退票金额超200亿,中小航司或重组 近期在社交媒体中有大量内容将新冠病毒对行业所造成冲击与2003年非典进行对比,就中国民航业而言,此次疫情对民航业的影响可能比非典更为严重。 首先,从数据上来看,新冠病毒的传染性明显要强于非典,截至发稿前,全国已确诊病例66581人,现存疑似8969人,而在2003年非典确诊人数为8100人。 其次,经过17年的发展,中国民航业早已跃居世界第二,飞机数量也从当时660架飞机增至当下3800多架,北京首都国际机场更是在2018年年底旅客吞吐量破1亿人次,成为继美国亚特兰大机场后,全球第二个旅客吞吐量破亿的机场。 最后,非典疫情的集中发期是为2003年3月,在当时,春运已平稳过度,而3月历来也是民航淡季,简而言之,航空公司把要赚的钱已经赚到手了,因此收入损失相对较小。 但当下,新冠疫情峰值还未到来、拐点未见,要持续多久也是未知数,所造成损失更是无法预测。 截至目前,中外航空公司共办理退票超过2000万张,票面金额超过200亿元人民币。 眼下,中国民航业已经进入至暗时刻,在疫情未见拐点的情况下,客流量必将持续下滑。 除三大航外,或许会有一部分公司在这个时间段破产,尤其是那些持续亏损、大量租赁飞机、高负债以及航线补贴较低的航司。 据业内人士透露,南山集团也已转让青岛航空。 2020年2月8日,海南航空在官网发布了关于疫情控制期间海南航空国内客票免费改期的温馨提示,在公告中海南航空表示,2020年1月28日之前购买2020年1月1日(含)-2020年3月31日(含)起飞的海南航空(HU)、大新华航空(CN)国内航班的旅客,如您暂不出行,您可在购票一年内免费变更至2021年1月31日(含)前的同航段航班一次。 即:经济舱改经济舱,免收改期费和舱位差价。 对此,有民航从业者指出,海航方面施行1年内免费改期并免受经济舱舱位差价的举措,意在减少旅客退票,严控现金流。 要知道,当年南方航空集团正是在2003年非典疫情过后收购了北方航空、新疆航空以成就了今天的霸业。 责任编辑:.

次の

【awards.dramadesk.org core】实现动态 Web API

是空裁

序言: 远程工作已经一个月了,最近也算是比较闲,每天早上起床打个卡,快速弄完当天要做的工作之后就快乐摸鱼去了。 之前在用 (旧版)的时候就觉得应用服务层写起来真的爽,为什么实现了个 IApplicationService 的空接口就可以变成 Web API,可惜的是之前一直没空去研究这一块的原理及其实现,园子里也找不到相关实现原理的文章(旧版 ABP 的倒是有,但是 asp. net core 无法参考)。 最近闲起来,就看了一下 的源码,并且也参考了一下 介绍的。 我自己也简单实现了一遍动态 Web API,不禁感叹 asp. net core 设计之精妙。 abp vnext: Panda. DynamicWebApi: 这里先感谢这两个库的相关人员,没有他们的工作,本文也出现不了。 另外在此声明,本文意在探究其实现原理并实现一个简易版本,若无把握请勿用于生产环境。 正文: 首先先创建我们的解决方案如下: 因为动态 Web API 这一功能是与业务无关的,而且为了复用,我们应该把这一功能的实现写到一个单独的类库当中。 上图中 Demo 项目是 asp. net core 3. 1 版本的 Web API 项目,用于演示我们的简易动态 Web API,而 SimpleDynamicWebAPI 的. net standard 2. 0 项目则是我们的简易动态 Web API 项目。 要实现动态 Web API,首先要做的第一件事情就是要有一个规则,来判定一个类是不是动态 Web API。 在 abp vnext 当中, 主要提供两种方式,(实际开发过程中一般都是实现 ),。 而在 Panda. DynamicWebApi 中,则是。 因为本文是要实现简易版本,因此只选空接口方式。 net core 框架它是不知道的,我们需要把这个规则告诉它。 这一块 abp vnext 有点复杂,我们参考 Panda. DynamicWebAPI 的实现: 上面图中 DynamicWebApiControllerFeatureProvider 的 IsController 方法很明显了。 查看 : 粗俗点翻译过来就是判断一个类是不是控制器。 接下来开始依样画葫芦。 首先一点 类是属于 asp. net core 的,理论上是位于 这个 nuget 包的,但是这个包的 3. x 版本并没有发布在 nuget 上。 如果我们的 SimpleDynamicWebAPI 引用 2. x 版本的,而 Demo 项目又是 3. x 版本的,则很可能会引起冲突。 保险起见,我们 修改 SimpleDynamicWebAPI 为一个 asp. net core 的类库。 反正这个库本来也不可能会被其它类型诸如 WPF 的项目引用。 修改 SimpleDynamicWebAPI. csproj 如下: using Microsoft. AspNetCore. Mvc. Controllers; using System. typeInfo. typeInfo. typeInfo. 接下来,1、如果一个接口即使它实现了 IApplicationService,但它仍然不能是一个控制器,那是因为接口是无法实例化的;2、抽象类同理,也是因为无法实例化;3、泛型类也不允许,因为需要确切的类型才能实例化;4、public 代表着公开,可被外界访问,如果一个类不是 public 的,那么就不应该成为一个动态 Web API 控制器。 接下来就是要把这个 ApplicationServiceControllerFeatureProvider 加入到 asp. net core 框架中。 创建 SimpleDynamicWebApiExtensions 扩展类,修改代码如下: using Microsoft. Extensions. FeatureProviders. FeatureProviders. 当然参照 abp vnext 或 Panda. DynamicWebApi 从 services 中获取 ApplicationPartManager 对象实例也是可行的。 AddControllers. 但仅仅这样并不足够,假设有多个类同时实现 IApplicationService 接口,那应该如何映射呢,如果没错的话,这个时候你应该会想到是—— 路由。 我们还需要做的工作就是把这些控制器与路由配置起来。 abp vnext 这块为了在配置过程中获取 services 而延迟加载导致包了一层,有点复杂。 这里参考 Panda. DynamicWebApi 注释告诉了我们这里是配置控制器的路由,感谢作者大大。 继续画葫芦,创建 ApplicationServiceConvention 类并实现 接口: using Microsoft. AspNetCore. Mvc. net core 框架,修改 SimpleDynamicWebApiExtensions 扩展类如下: using Microsoft. AspNetCore. Mvc; using Microsoft. Extensions. FeatureProviders. Services. Conventions. FeatureProviders. Services. Conventions. ok,接下来回到考虑 Apply 方法实现的问题了。 这里参考 abp vnext: 上图中的 ApplyForControllers 方法的方法体关键部分很好懂,foreach 遍历了所有的控制器,如果控制器实现了 IRemoteService 接口或者标记了 RemoteServiceAttribute,则调用 ConfigureRemoteService 进一步处理。 因为我们的简易版本是只有接口,else 部分的我们就不需要了。 修改 ApplicationServiceConvention 代码如下: using Microsoft. AspNetCore. Mvc. IsAssignableFrom controller. 1、ConfigureApiExplorer。 ApiExplorer,简单点说就是 API 是否可被发现。 举个栗子,加入你写了一个 Web API,项目又配置了 swagger,而且你又想 swagger 不显示这个 Web API 的话,那么可以在 Action 上加上: using Microsoft. AspNetCore. Mvc. IsAssignableFrom controller. controller. ApiExplorer. IsVisible. ApiExplorer. action. ApiExplorer. IsVisible. ApiExplorer. 接下来 ConfigureSelector 看 abp vnext 的实现: 首先第一行 RemoveEmptySelectors 这是一个关键点。 虽然我们的动态 Web API 控制器一开始并没有配置路由,但实际上 asp. net core 框架会为此生成一些空白信息。 abp vnext 在这里就抹除掉了这些空白信息。 而 Panda. DynamicWebApi 虽然没有这样干,但是后面的判断逻辑就相对复杂了一些(大大别打我)。 ActionConstraints. EndpointMetadata. if 第一行明显可以看出判断路由信息是否存在,第二行判断的 Action 的约束,而约束则是指 HttpGet、HttpPost 这种约束,第三行判断了端点元数据信息,例如标记了什么 Attribute 之类的。 假如这些都没有,那么这条 selector 就可以断定为空白信息了。 接下来回到 abp vnext 代码截图的 181 行: 假如移除过空白信息后仍然有路由的话,则后续不进行处理。 接下来的 foreach 就开始处理 Action 了。 先完善我们的代码,再开始处理 Action 的路由: using Microsoft. AspNetCore. Mvc. ApplicationModels; using System; using System. Collections. Generic; using System. IsAssignableFrom controller. controller. ApiExplorer. IsVisible. ApiExplorer. action. ApiExplorer. IsVisible. ApiExplorer. Selectors ; if controller. Selectors. AttributeRouteModel! ActionConstraints. EndpointMetadata. 关键在最后的判断,假如没有 selector 的话,加上就是了。 但是如果已经有了呢?那就修改呗。 举个栗子,假如我们实现 IApplicationService 接口的类的一个方法标记了 HttpGet,那么这个 Action 是有约束的,但是它却是没有路由的。 这几行无论是 abp vnext 还是 Panda. DynamicWebApi 都是一样的。 ActionConstraints. Selectors. 要计算路由,我们先举个栗子(嗯,第三颗栗子了)。 Controller. ControllerName; if controllerName. Substring 0, controllerName. Length - " ApplicationService ". Substring 0, controllerName. Length - " AppService ". Parameters. ActionName; if actionName. Substring 0, actionName. Length - " Async ". Substring trimPrefix. string. 控制器部分,如果名字结尾是 ApplicationService 或者 AppService,那就裁掉。 并且变为复数。 因为这里是简易版,直接加 s 了是。 实际建议使用 等之类的库。 不然 bus 这种词直接加 s 就太奇怪了。 id 部分没啥好说的。 最后是 Action 部分,假如是 Async 结尾的,裁掉。 接下来看开头是不是以 Get、Post、Create 等等这些开头,是的话也裁掉, 注意要先判断 GetAll 和 GetList 然后再判断 Get。 因为最后裁掉之后有可能是空字符串,所以还需要判断一下再确定是否添加到路由中。 ActionName; if actionName. StartsWith " Put " actionName. StartsWith " Delete " actionName. ActionConstraints. OfType. FirstOrDefault?. HttpMethods?. ActionConstraints. 现在我们的 ApplicationServiceConvention 的代码应该如下: using Microsoft. AspNetCore. Mvc; using Microsoft. AspNetCore. Mvc. ActionConstraints; using Microsoft. AspNetCore. Mvc. ApplicationModels; using System; using System. Collections. Generic; using System. Linq; using System. IsAssignableFrom controller. controller. ApiExplorer. IsVisible. ApiExplorer. action. ApiExplorer. IsVisible. ApiExplorer. Selectors ; if controller. Selectors. AttributeRouteModel! Selectors ; if action. Selectors. Count. FirstOrDefault?. HttpMethods?. ActionConstraints. ActionConstraints. Selectors. Controller. ControllerName; if controllerName. Substring 0, controllerName. Length - " ApplicationService ". Substring 0, controllerName. Length - " AppService ". Parameters. ActionName; if actionName. Substring 0, actionName. Length - " Async ". Substring trimPrefix. string. ActionName; if actionName. StartsWith " Put " actionName. StartsWith " Delete " actionName. ActionConstraints. Count 、Nullable、DateTime 这些也不应该加 FromBody 绑定。 这个阅读 还是很好懂的。 第二个判断则判断了当前 Http 约束是否能用 FormBody,例如 GET、DELETE 请求是没办法用 FromBody 的。 BindingInfo! ParameterType. ParameterType! ParameterType! Selectors. ActionConstraints. OfType. HttpMethods. ToList ; if httpMethods. Contains " GET " httpMethods. Contains " DELETE " httpMethods. Contains " TRACE " httpMethods. 第二个判断则把 Http 约束通通查出来,如果有 GET、DELETE 等等这些则不能加 FromBody 约束,反之则加上。 演示: 历经千辛万苦,我们的简易版动态 Web API 终于完成了。 接下来我们可以给 Demo 项目添加一下测试代码以及配置 swagger 来看一下效果。 在 Demo 项目中添加测试代码 PersonAppService: using SimpleDynamicWebAPI; using System. Collections. Generic; using System. Linq; namespace Demo. ToCharArray. 完事之后跑起来。 感觉还行。 结语: 我们总算实现了一个非常简易的动态 Web API,也相当于又造了一遍轮子,但在这造轮子的过程中,我们了解到了其实现的原理,假如以后发现 abp vnext 等框架的动态 Web API 满足不了我们的时候,我们也有一定能力进行修改。 最后我再次声明,如果没有把握的话,千万别用于生产环境。 abp vnext 这种是经过大量项目验证的,即使有 bug,abp vnext 官方也有足够人力去修复。 最后附上 Gayhub 源码:.

次の

中美裁军大使在裁谈会隔空交锋

是空裁

概述 在我们从事的项目工作中,通常会根据研究需要对研究区域的栅格数据 如遥感影像 进行不规则裁剪。 在ArcGIS中利用不规则矢量多边形对栅格数据进行裁切主要有两种方法:空间分析中的掩膜提取和栅格处理中的裁剪。 在Extract by Mask对话框中设置好输入输出参数以后,直接点击OK即可得到掩膜后的栅格数据。 然而看似简单的过程实则包含了几个比较棘手的问题。 错位重叠 裁切前后两个栅格的像元并不一定是完全重叠的,有可能错位,也就是说对应像元的中心点不是一个点,如下图所示。 这时裁切后像元的值可能是裁切前相邻像元的值,所以对应值就可能不一致,尤其在高程变化比较大的地方表现得更为明显。 栅格数据裁切像元不完全重叠(私信回复"下载器"获取万能地图下载器下载栅格数据) 若想让裁切前后的每个像元都完全重叠,可在裁切界面的Environment Settings里设置snap raster成裁切前的数据即可。 Pixel Depth变化 用不规则矢量多边形裁切栅格数据时,Extract by Mask对话框中没有提供设置Nodata的选项,这导致有时会出现裁剪后的pixel depth由原来的8bit变成了16bit,如下图所示。 解决方法为在arctoolbox中使用栅格计算器工具,运用setnull命令将选定 个数最少的那类象元值 的值 如0值 设为nodata,然后再裁剪。 黑边处理 在栅格数据中,除了符合比特深度 Pixel Depth 的值之外,用于标记此处Nodata的值----就是空值。 产生空值的原因有很多种,有可能是在数据采集的时候,传感器没有记录下某个位置的反射值,或者是由于噪声。 用Identify工具查看黑边所示的像元值,通常会发现用0或者极小值来标记Nodata,而在ArcGIS中0值是一个有效值而不是空值。 出于这个原因,在渲染这类影像的时候,ArcGIS会将0值渲染成黑色,而不是作为空值处理成透明色。 那么我们如何消除这个黑边的问题? 在ArcGIS中,我们可以在图层属性Symbology页下看到这样的一个设置:Display Background value…as…。 通过输入0,0,0,以及将颜色设置成透明,就可以达到让黑边消失的渲染效果 如下图。 在Symbology中设置黑边 以上黑边处理是对单一的栅格数据,在实际应用中有时会遇到Mosaic Dataset这种数据模型,ArcGIS中提供了一个解决Mosaic Dataset中黑边问题的工具Define Mosaic DatasetNoData。 在工具中可以对每一个波段单独设置空值,完成后也可以得到理想的黑边变透明的效果。 然而以上处理并没有从根本上裁切掉那些黑边,要从根本上解决问题可以通过导出的方式将黑边设置为空。 具体操作就是在Export Data的时候,在NoData的选项中输入0,0,0 如图4。 看似问题得到了解决,然而这种做法会将影像中那些本来就是0值的像元也抹掉,所以这个办法要慎用。 在导出栅格数据时设置Nodata 那么目前有没有既有效又彻底的方法来解决不规则矢量多边形裁切栅格数据时出现的上述问题呢,答案依然是裁剪,接下来介绍栅格处理中的裁剪方法。 在Clip对话框中输入待裁切的栅格数据以及矢量多边形数据等参数,直接点击OK即可完成裁剪。 通常输入矢量多边形时,系统会自动获取该矢量多边形的最小外包矩形的范围作为实际裁剪的区域,而我们只需要勾选Use Input Features forCliping Geometry Optional 选项 如下图所示 就可以保证裁剪出来的栅格区域就是我们真正想要的。 同时还需要注意的是,Clip对话框中同样还提供了Nodata Value选项,我们可以将那些需要设置为空值的像元过滤掉。 Clip中参数设置 7. 结语 通过对比以上两种矢量裁切方法,我们发现栅格处理中的裁剪方法既简单又有效。 对于习惯用Extraction by Mask方法的用户来说,与其舍近求远不如直接用Data Management Tool中的Clip工具。

次の