[{"content":"执行摘要 在高度全球化与数字化交织的当今商业环境中，运营虚拟专用网络（VPN）线上订阅服务代表着一种融合了网络安全技术、跨境电信监管以及高风险金融支付处理的复杂商业模式。当该商业模式的实际控制人与运营者系持有中华人民共和国大陆护照、并以工作签证合法居住于日本的居民时，其所面临的法律与合规矩阵将呈现出指数级的复杂性。这种多重身份的叠加，要求运营者必须在三个截然不同甚至存在冲突的司法管辖区之间进行精准的法律套利与合规操作：首先，必须满足日本出入境管理法规以及日本总务省对电信业务的属地管辖要求；其次，必须规避中国刑法与网络安全法规对中国公民的域外长臂管辖与属人管辖风险；最后，必须在第三国（如新加坡、香港、马来西亚、西班牙或德国）选择最有利于隐私保护、成本控制及高风险支付网关接入的离岸司法管辖区进行实体注册。本报告对这一跨国商业构想进行了详尽的法理剖析与实务论证，旨在为运营者提供一套低成本、高合规性且具备抗风险能力的全球化运营蓝图。\n第一章：日本属地管辖与运营者身份合规 作为实际居住在日本的商业运营中枢，日本的法律框架直接决定了运营者个人的居留合法性以及商业行为的合规性。日本政府对外籍居民的经济活动以及本国的电信网络服务均保持着严密的监管态势。\n1.1 签证状态与出入境管理法的限制 持有日本常规工作签证（例如“技术・人文知识・国际业务”签证）的外籍居民，其在日本境内的活动被严格限定在由其签证担保雇主所涵盖的专业活动范围内。个人独立运营线上VPN订阅服务等属于自主创业的商业行为，在未经特别许可的情况下，直接超出了常规工作签证所允许的活动范畴。根据《出入国管理及难民认定法》第19条第2项的规定，若外籍居民希望从事现有在留资格之外的伴随收入的商业运营或获取报酬的活动，必须向日本出入国在留管理厅正式提交“资格外活动许可”（資格外活動許可）的申请 。\n在实务操作中，虽然针对留学生的资格外活动许可较为普遍（通常被全面许可为每周不超过28小时的兼职工作），但针对全职工作签证持有者的创业类资格外活动许可则属于自由裁量权极强的审批事项。申请人必须提供充分的证据证明，该副业的运营（即VPN服务）绝不会对其主业雇主的工作造成任何时间或精力上的阻碍，且符合日本社会的整体利益 。若VPN业务的规模逐渐扩大，成为运营者的主要收入来源并需要投入大量全职时间，现有的工作签证将无法继续支撑其合规性。届时，运营者必须依法申请将签证状态变更为“经营・管理”（Business Manager）签证。值得警惕的是，日本移民局近期对该签证的续签和申请标准进行了明确的政策收紧与过渡期规定。至2028年10月16日，无论是新申请还是续签，担保公司必须满足总商业资产（包含注册资本等）达到或超过3000万日元的严格门槛，不再依据过去的各类企业分类进行豁免，这为利用日本实体直接运营带来了极高的资本壁垒 。\n1.2 《电气通信事业法》及外资监管要求 在业务资质层面，日本总务省（MIC）对境内外电信服务的提供者实施着严格的市场准入与日常监管。历史上，未在日本境内设立物理基础设施的外国运营商长期处于监管灰色地带。然而，为了应对全球化数字经济的发展并保护日本国内用户的数据安全，日本国会于2020年5月通过了《电气通信事业法》（TBA）的修正案，该修正案及相关内阁与部委条例已于2021年4月1日全面生效 。\n根据日本总务省发布的《关于向经营电气通信事业的外国法人等适用电气通信事业法的指南》，该修正案明确将监管范围扩大至向日本用户提供服务的外国运营商 。VPN服务从本质上属于“媒介他人通信”的业务类型，即在不改变通信内容的前提下促进用户之间的交互或数据传输。因此，无论该VPN公司注册在何处，只要其服务对象包含日本境内用户，且未在日本铺设大型物理传输线路（属于第1类电信业务），该外籍运营者必须向日本总务省提交第2类电信业务（Type 2）的“电气通信事业届出”（Notification） 。\n提交该基础通知本身无需向日本政府缴纳任何规费 。但是，由于运营者具备外籍身份，其在日本涉及电信等核心基础设施领域的商业活动可能会触发《外汇和外国贸易法》（FEFTA）的审查机制，要求外国投资者在进行特定投资或获得股份时进行事前申报 。此外，为了强化消费者隐私保护，日本总务省于2023年6月16日进一步实施了“外部传输纪律”（External Transmission Disciplines）。该规定强制要求提供对用户利益有重大影响的电信服务提供商（包括应用程序提供商），在将用户设备中的信息发送给第三方之前，必须进行明确的通知或将其发布在用户容易访问的位置，这要求VPN应用程序在设计时必须符合日本的隐私合规标准 。\n第二章：中国属人管辖与治外法权风险的深度评估 对于持有中华人民共和国护照的公民而言，运营VPN业务所面临的最具破坏性的法律风险并非来自注册地或居住地，而是来自中国司法体系的属人管辖权与日益严厉的域外执法行动。\n2.1 互联网国际联网管理与刑事处罚界限 中国政府对国际互联网数据跨境传输实行严格的物理和逻辑管控，俗称“防火长城”（Great Firewall）。其法律根基可追溯至1996年颁布的《中华人民共和国计算机信息网络国际联网管理暂行规定》。该规定第六条及第十四条明确指出，任何计算机信息网络进行国际联网，必须使用国家公用电信网提供的国际出入口信道，任何单位和个人不得自行建立或者使用其他信道进行国际联网，违者将面临由公安机关给予警告并处以15000元人民币以下罚款及没收违法所得的行政处罚 。\n在早年间，中国国内普通网民使用VPN访问境外网站通常处于被默许的“灰色地带”，受到处罚的案例相对罕见 。然而，近期的执法趋势表明，政策正在发生显著收紧，地方政府开始针对个人使用者采取严厉的惩罚措施。例如，2023年，河北省承德市一名程序员因使用VPN访问GitHub和Zoom为一家土耳其公司进行远程工作，被当地公安局认定为擅自使用非法信道，不仅遭到了行政处罚，其长达数年间合法劳动所得的100多万元人民币薪酬也被定性为“违法所得”并被全额没收 。评论界普遍认为，随着地方政府面临沉重的债务压力，这种将VPN使用者作为“创收”目标的趋利性执法正在增加国内使用者的风险成本 。\n如果说单纯“使用”VPN属于行政处罚范畴，那么“提供、运营并销售”VPN服务则直接触犯了中国刑法的红线。司法实践中，中国法院通常适用《中华人民共和国刑法》第二百八十五条的“提供侵入、非法控制计算机信息系统程序、工具罪”对VPN销售者进行刑事定罪。案例显示，现年26岁的中国籍男子邓杰威因在网上销售旨在绕过国家互联网审查机制的VPN软件，其网站被依法查封，本人于2016年10月被捕，并最终被最高人民法院判处有期徒刑九个月 。在涉及国家安全或民族宗教敏感地区的案件中，量刑则更为严苛。例如，新疆大学计算机科学专业的维吾尔族学生Mehmut Memtimin因使用VPN绕过官方审查访问所谓“非法信息”，被控危害国家安全，最终被判处长达13年的有期徒刑，目前在图木舒克监狱服刑 。\n2.2 治外法权与回国风险的战略隔离 中国《刑法》确立了强烈的属人管辖原则（即“治外法权”）。根据相关法律条文，即使中国公民身处海外，其在境外实施的、依据中国刑法被认定为犯罪的行为，中国司法机关依然拥有追诉权 。这意味着，即使运营者在日本合法居住，并将公司注册在德国、西班牙或新加坡，只要其国籍仍为中国，其出售VPN的行为在法理上依然属于中国刑法追究的范围。\n虽然针对纯粹服务于非中国用户的海外VPN运营商进行跨国引渡或刑事追诉的案例并不多见，但风险客观存在。美国国务院发布的旅行警告明确指出，中国政府拥有广泛的自由裁量权，经常对涉及敏感行业或被认为批评国家政策的中外人士实施“出境禁令”（Exit Bans）。这种禁令可以被用来迫使个人参与政府调查、向海外家属施压或解决民事纠纷 。一旦运营者回国探亲或处理事务，极有可能在出入境边防检查时触发警报，面临被任意拘留、审讯或无限期限制出境的风险 。\n为了最大限度地隔离此类毁灭性风险，运营者必须在产品设计和商业逻辑上实施绝对的“去中国化”策略。具体而言，VPN服务不得提供任何简体中文或繁体中文的用户界面与营销材料；必须在网关层面部署严格的IP地理封锁协议，拒绝来自中国大陆及港澳台地区IP地址的注册请求；在支付通道上，绝对禁止接入支付宝、微信支付或银联等带有中国境内清算特征的支付方式。换言之，该业务必须在技术上和财务上完全证明其与中国境内市场及用户没有任何交集，从而在面临潜在审查时，降低被定性为“主动破坏中国网络信息安全”的概率 。\n第三章：全球离岸司法管辖区对比与注册策略 在解决了属人与属地管辖的初步法律冲突后，下一个核心挑战在于选择一个最优的离岸司法管辖区作为商业实体。这一选择不仅关乎公司的设立成本和税务负担，更决定了公司能够接入何种级别的国际金融支付网络，以及是否能真正践行VPN行业“无日志”（No-Logs）的隐私承诺。在此，我们对新加坡、香港、马来西亚、西班牙和德国这五个司法管辖区进行多维度的详尽对比。\n3.1 司法管辖区关键指标比较分析 为了直观展示各司法管辖区的设立效率与成本环境，下表基于2026年最新的全球企业注册数据与法律环境进行了综合评估：\n司法管辖区 注册耗时 预估初始成本 基础企业所得税率 是否属于14眼联盟 隐私与数据留存风险评估 新加坡 2-3 天 €400 - €800 17% (初创企业可享0%) 否 中等（受限于本地电信牌照规定） 中国香港 1-3 天 €350 - €750 0% (针对离岸豁免收入) 否 极高（受《香港国安法》直接影响） 马来西亚(纳闽) 14-30 天 约 $4,250 3% (需满足经济实质) 否 低（数据保护法案对隐私极度友好） 西班牙 20-30 天 €1,900 - €3,800 标准欧盟税率 是 高（强制情报共享机制） 德国 数周 €25,000 (实缴资本) 标准欧盟税率 是 极高（实施长达3个月的IP强制留存） 数据综合来源：NordicHQ 2026年国家注册排名、各区域商业登记处与法律评估报告 。\n3.2 亚洲金融中心：新加坡与香港的利弊解析 新加坡作为亚太地区的数字经济枢纽，拥有极高的国际声誉和高度数字化的注册系统。其企业所得税率为17%，并且政府为符合条件的初创企业提供具有吸引力的免税期政策，实质税负极低 。然而，在实际合规操作中，新加坡公司法强制要求必须任命至少一名新加坡本地居民担任公司董事。对于常驻日本的创业者而言，这意味着必须持续支付高昂的挂名董事（Nominee Director）年费。在维护成本上，虚拟办公室服务较为成熟，例如Servcorp、VOffice等服务商提供的地址挂靠和邮件扫描服务，年费从几十到数百新币不等 。\n与新加坡相比，香港的吸引力在于其独特的领地税收原则（Territorial Principle）。任何在香港境外产生且未在香港实质运营的收入，均无需在香港缴纳任何企业所得税（即0%离岸收入税），这对于数字游民和纯线上订阅业务具有极大的吸引力 。根据香港《公司条例》（第622章），香港私人有限公司无需委任本地董事，但强制要求委任一名持有“信托或公司服务提供者（TCSP）”牌照的香港公司或居民作为公司法定秘书，以处理保存法定登记册、提交周年申报表等合规事务 。2026年的市场数据显示，此类秘书与虚拟办公室打包服务（包含基础法定地址至全套邮件转发与接听服务）的价格从每年数千港币到上万港币不等，供应商如Statrys、NOVA等提供了高度标准化的服务 。\n然而，无论是新加坡还是香港，在数据隐私这一涉及VPN核心业务竞争力的领域均存在致命缺陷。新加坡虽未出台统一的强制数据留存法，但其向电信和ISP运营商发放的服务牌照中包含了特定时期内的数据留存附加条件 。而香港虽然没有明文规定的数据留存期，但随着2020年《香港国安法》（NSL）的全面实施，香港政府及执法机构被赋予了在特定条件下截取通信、秘密监控个人数据的广泛权力。这种法律环境的改变，使得将注重隐私保护的VPN公司设立在香港，在西方市场营销中面临极大的信任危机 。\n3.3 隐私保护的黄金跳板：马来西亚纳闽岛（Labuan） 马来西亚纳闽国际商业金融中心（Labuan IBFC）是目前亚洲范围内对金融科技与数字出海企业最具吸引力的中岸（Mid-shore）司法管辖区。它融合了离岸辖区的低税率优势与在岸辖区的国际认可度 。\n根据纳闽岛金融服务管理局（LFSA）2026年的最新指导标准，注册一家股份有限公司的初始门槛极具操作性。虽然其不设定强制的最低资本金要求，但行业惯例的最低注册资本为10,000美元 。整体设立成本（包括注册费、LFSA首年年费、信托公司秘书费及虚拟地址费）大约需要4,250美元，流程耗时约4至5周，其中包括协助在纳闽当地银行开设企业账户所需的时间 。纳闽公司法的核心优势在于允许100%外资控股，仅需一名股东兼任董事，且董事身份信息不被公开查阅 。\n在税务合规方面，从事合格商业活动（如数字贸易）的纳闽公司，只需缴纳经审计后净利润的3%作为企业所得税。为了维持这一优惠税率，企业必须满足“经济实质”（Economic Substance）要求，对于常规贸易企业而言，通常需要雇佣至少两名全职员工并产生每年50,000林吉特的本地运营支出 。如果未能满足实质要求或选择登记为非交易控股公司，则适用其他税制安排。更为重要的是，马来西亚并非“十四眼联盟”成员国，且其《个人数据保护法》（PDPA）要求数据在达成收集目的后必须及时销毁，并没有针对通信服务商施加任何强制性的无限期数据留存法案 。这一隐私友好的法律环境，使纳闽岛成为VPN提供商极佳的总部注册地候选者。\n3.4 欧洲阵营的合规壁垒：西班牙与德国 随着欧洲对科技创新的重视，西班牙近期推出了极具前瞻性的《初创企业法案》（Startups Law）及数字游民签证（Digital Nomad Visa），为外籍创业者铺平了道路 。创业者在无需登陆西班牙的情况下，即可通过授权委托书（PoA）远程申请外国人身份证号（NIE），存入最低3,000欧元的实缴资本完成公司注册，相关法律服务与公证费约在1,900至3,800欧元之间 。虽然符合条件的初创企业迁入者可申请享受24%固定个人所得税率的“贝克汉姆法案”，但公司层面的全球收入仍受欧盟标准税法管辖 。\n相较之下，德国对初创企业的要求则严苛得多。设立最基础的有限责任公司（GmbH）需要高达25,000欧元的实缴注册资本，且涉及繁杂的实地公证程序，不具备设立低成本线上业务的灵活性 。\n从根本上否定西班牙和德国作为VPN公司所在地的原因，在于其深度参与的国际情报共享机制与国内严苛的监控法律。\n第四章：数据保护、隐私辖区与“十四眼联盟”的影响 对于虚拟专用网络业务而言，数据隐私不仅仅是一项合规要求，而是该产品的核心商业价值。在2026年的市场环境中，消费者在挑选VPN服务时，早已不再单纯比较连接速度与服务器数量，而是深入探究服务商背后的公司注册地（Jurisdiction）与“无日志”（No-Log）政策的真实可靠性 。\n4.1 “十四眼联盟”对无日志政策的破坏 全球最强大的西方国家共同构建了高度机密的情报共享协议，形成了著名的“五眼”（Five Eyes）、“九眼”（Nine Eyes）以及扩大版的“十四眼联盟”（14 Eyes Alliance，官方代号为“SIGINT Seniors Europe”）。该联盟的成员国（包括美国、英国、加拿大、澳大利亚，以及欧洲的德国、西班牙、法国等）在信号情报收集与大规模监控数据（涵盖网络浏览记录、电子文档、位置历史等）分享方面达成了深度合作 。\n如果一家VPN公司注册在西班牙或德国境内，即使其在营销材料中信誓旦旦地承诺“绝不记录用户日志”，其承诺在法律强制力面前也不堪一击。这些国家的国家安全机构或执法机关有权依据国内安全法规，向VPN提供商发出极具强制力的“国家安全信函”（National Security Letters）或传票，迫使其在特定网关节点暗中记录并上交用户的真实IP地址与访问记录。更为致命的是，这类命令通常伴随着“禁言令”（Gag Orders），绝对禁止VPN提供商向外界披露其已被政府渗透的事实 。因此，在十四眼联盟成员国注册VPN服务，无异于在产品信任度上“自杀”。\n4.2 本地强制数据留存法规（Data Retention Laws）的蔓延 除了国际情报联盟的阴影，各主权国家日益强硬的内部网络安全立法也在挤压VPN的生存空间。德国联邦司法部长近期力推的一项法案，要求德国境内的所有互联网服务提供商（ISPs）及电信运营商，必须将其客户的IP地址和端口号无条件强制留存三个月，作为协助警方调查网络欺诈与数字暴力的“预防性措施” 。配合德国严厉的《电信数字服务数据保护法》（TDDDG）与欧盟的GDPR框架，德国已成为全球最不适合隐私服务生存的辖区之一 。\n亚洲的印度同样提供了前车之鉴。印度计算机应急响应小组（CERT-In）出台了极为严苛的网络安全规定，强制要求所有在印度运营的VPN提供商、云服务商及数据中心必须将用户的详尽活动日志、真实姓名与IP地址留存至少五年。面对此等公然剥夺用户隐私的法令，众多国际知名VPN公司不得不选择直接撤出在印度的物理服务器，以维持其无日志的商业承诺 。相比之下，马来西亚（纳闽）等未设立长期强制数据留存法、且独立于主要情报共享网络的司法管辖区，成为了保障用户隐私的绝佳避风港 。\n第五章：支付网关与离岸金融基础设施的架构设计 在解决了公司法务与数据隐私合规后，VPN出海业务面临的最后一道，同时也是最高的一道护城河是资金的结算与收付。由于VPN技术天然带有隐匿身份的属性，使得该服务极易被网络犯罪分子用于掩盖IP以进行信用卡欺诈或洗钱。因此，全球主流的传统金融机构与支付处理商（如Stripe的默认账户、PayPal、Square等）均将VPN业务列入“高风险”（High-Risk）商户名录，甚至在可接受使用政策（AUP）中予以直接封杀 。\n5.1 高风险商户账户（High-Risk Merchant Accounts）的困境 试图使用标准信用卡网关处理VPN订阅费用的企业，通常会遭遇突发性的账户冻结或资金清退 。运营者必须转向专门处理高风险行业（如成人娱乐、CBD产品、博彩以及VPN）的支付网关提供商，如PayKings、eMerchantBroker (EMB)、Easy Pay Direct和Zen Payments 。\n这些高风险处理商具备独特的优势：它们拥有与高风险收单行建立的深厚关系，能够提供抗拒高拒付率（Chargeback）的专用通道，并内置诸如iSpyFraud等高级防欺诈过滤系统 。然而，选择这些传统高风险网关的代价是极其高昂的。首先，其单笔交易的手续费往往数倍于普通网关；其次，为了对冲潜在的拒付风险，收单行通常会实施长达3到6个月的“滚动准备金”（Rolling Reserves）制度，即强制扣留企业每笔收入的10%至20%作为保证金，这对缺乏外部融资的初创企业而言，将造成严重的现金流枯竭 。\n5.2 记录商（Merchant of Record, MoR）模式的抉择 对于以软件即服务（SaaS）和订阅制为核心的VPN业务，采用“记录商”（Merchant of Record）模式是更为明智的战略。MoR平台不仅仅是支付网关，它们在法律上充当了软件的“经销商”角色。当用户购买VPN服务时，其实际交易对手是MoR平台，而非VPN公司本身。MoR平台将全权负责应对全球超过200个国家和地区的增值税（VAT）、消费税的计算、收取与缴纳，并且承担所有欺诈甄别与合规责任，最后将扣除费用的净收益汇入开发者的账户 。这一模式彻底免除了独立创业者在各国进行税务注册和繁杂审计的梦魇。\n在2026年的MoR赛道中，存在着激烈的竞争与政策分化：\nPaddle：作为全球最知名的SaaS MoR之一，Paddle以其优秀的开发者体验和5% + 50美分的透明定价著称 。然而，Paddle拥有极为严格的合规政策，其明确禁止接受任何与VPN、代理服务及可能侵犯版权的应用程序相关的商户接入 。任何试图隐瞒业务性质接入Paddle的VPN服务，一旦触发人工审核，其账户将被即刻封禁。 FastSpring：这是目前市场上对VPN与高风险数字产品最具包容性的大型MoR平台。拥有超过20年经验的FastSpring，不仅支持高度定制化的本土化结账体验（支持多币种与语言自动切换），更重要的是，其风险管理部门能够理解并接纳合规的VPN业务 。其收费虽略高（通常在销售额的5%至8%以上），但相较于建立独立的高风险账户和聘请跨国税务会计师的成本，FastSpring为中小型VPN创业者提供了开箱即用的一站式合规营收解决方案 。 5.3 加密货币网关（Crypto Payment Gateways）的必然性 鉴于VPN用户群体中存在大量极度重视个人隐私、不愿留下任何法币信用卡交易记录的硬核用户，集成加密货币支付网关是提升转化率的关键。更重要的是，区块链转账不可篡改的特性，从物理上彻底根除了信用卡拒付欺诈（Chargeback Fraud）的可能，极大地改善了高风险商户的生存环境 。\n在众多加密货币网关中，运营者需在合规性与去中心化之间做出权衡：\nCoinGate：这是欧洲合规性最强、生态整合度最高的综合性加密网关，支持收取超100种加密货币，并可以以1%的低廉固定费率实时结算为法定货币汇入企业银行账户 。它为包括NordVPN、Surfshark在内的顶级VPN厂商提供服务 。但其缺点在于受制于欧洲MiCA法规，要求商户提供完备的KYC（了解你的客户）身份认证与公司资质审查。 BTCPay Server：对于追求绝对隐私和抗审查的企业，这是一个完美的开源自托管解决方案。它收取零手续费，且无需进行任何KYC认证，资金直接进入商户自己控制的硬件钱包，绝无第三方冻结风险 。 Aurpay：作为一种折中方案，Aurpay提供无需身份认证（No KYC）的非托管网关服务，支持直接集成到现有的网站架构中，极大降低了商户进入加密货币收款领域的摩擦力 。 5.4 离岸企业银行与资金流转网络 为了接收来自FastSpring或加密货币交易所的法币结算资金，离岸实体必须拥有可靠的法币银行账户。由于传统商业银行（如汇丰、花旗）对无本地实质运营的离岸壳公司和高风险科技企业实行严苛的排斥政策，数字金融科技平台（Neo-banks）成为唯一的出路 。\nStatrys：一家总部位于香港、在亚洲市场增长迅速的商业支付平台。虽然其擅长处理中港贸易并支持11种主流货币，但其可接受使用政策中明确禁止了包括加密货币业务、成人娱乐及其他被列入高风险类别的行业，VPN业务在此存在较高的拒审率 。 Airwallex（空中云汇）：相较之下，Airwallex拥有更为强大的全球金融牌照网络（包括新加坡MAS许可）以及更包容的科技企业入驻政策。它能够为纳闽或香港公司开立多达数十个国家的本地收款账户（Local Payment Rails）。这意味着即使公司注册在马来西亚，也可以像拥有美国或英国本地公司一样，通过ACH或SEPA网络低成本地接收用户的资金，从而大幅降低SWIFT国际电汇产生的昂贵手续费和汇损 。 第六章：战略执行与最终合规建议 综合上述针对出入境法规、跨国刑法、税务负担、数据隐私保护及高风险金融基础设施的详尽分析，针对身处日本的中国籍VPN创业者，本报告提出以下具备实操性的全局合规架构建议：\n第一步：隔离与切断涉华风险。 在商业模式设计的源头，必须通过严密的技术手段（如IP与DNS级别的Geo-blocking）阻断来自中国大陆及港澳台地区的所有访问。绝不接入支付宝、微信等人民币清算系统。从根本上将该业务定义为“由居住在海外的公民提供的、纯粹面向非中国市场的数字安全服务”，以在最大程度上削弱中国相关法律域外长臂管辖的适用借口 。同时，由于运营者保留中国国籍，应深刻认识到任何跨国法律隔离都无法消除回国时因被抽查设备或资金流向而触发的执法风险 。\n第二步：在日本合法化数字中枢地位。 鉴于个人的实际居住和工作地点位于日本，运营者必须在开展业务前向出入国在留管理厅申请“资格外活动许可”，以确保兼职创业行为不触犯移民法红线，并为未来业务壮大后申请“经营・管理”签证预留良好的合规记录 。同时，遵守日本2021年修订的《电气通信事业法》，向总务省提交第2类电气通信事业届出（Notification），合法履行面向日本及海外用户的网络信息服务商责任 。\n第三步：利用纳闽岛（Labuan）构建隐私防火墙。 在离岸架构的选择上，果断放弃处于十四眼联盟监控下的西班牙和德国，以及受国安法影响的香港。通过支付约4,250美元的初始成本，在马来西亚纳闽岛设立一家有限责任公司。纳闽岛不仅提供了低至3%的优惠企业所得税（或离岸收入免税选项），更为关键的是，其不受西方情报共享协议约束，且《个人数据保护法》环境友好，能够赋予VPN服务真正意义上的“无日志”法律背书 。\n第四步：搭建高可用性与抗审查的金融栈。 在收款环节，避免耗时费力地去申请传统高风险网关的繁杂审核。法币订阅系统应全盘托管给支持高风险数字产品的记录商 FastSpring，利用其成熟的订阅管理功能和覆盖全球的增值税代扣代缴能力，实现财税合规的自动化 。在加密货币收款端，部署无需KYC认证的 BTCPay Server 或 Aurpay 插件，直接将匿名加密资产收入本地冷钱包 。最后，将纳闽岛实体与 Airwallex 的全球多币种账户相绑定，实现全球资金的无缝流转与最终的利润结汇 。\n通过实施这一套精心设计的跨国架构矩阵，运营者不仅能够最大限度地降低早期试错成本，还能在充斥着地缘政治冲突与隐私监控的复杂互联网环境中，建立起一道坚固的合规运营护城河。\n","permalink":"https://www.aeieli.com/2026/05/21/%E8%B7%A8%E5%A2%83%E8%99%9A%E6%8B%9F%E4%B8%93%E7%94%A8%E7%BD%91%E7%BB%9C%EF%BC%88vpn%EF%BC%89%E8%AE%A2%E9%98%85%E6%9C%8D%E5%8A%A1%E5%90%88%E8%A7%84%E8%BF%90%E8%90%A5%E4%B8%8E%E7%A6%BB%E5%B2%B8/","summary":"\u003ch2 id=\"执行摘要\"\u003e执行摘要\u003c/h2\u003e\n\u003cp\u003e在高度全球化与数字化交织的当今商业环境中，运营虚拟专用网络（VPN）线上订阅服务代表着一种融合了网络安全技术、跨境电信监管以及高风险金融支付处理的复杂商业模式。当该商业模式的实际控制人与运营者系持有中华人民共和国大陆护照、并以工作签证合法居住于日本的居民时，其所面临的法律与合规矩阵将呈现出指数级的复杂性。这种多重身份的叠加，要求运营者必须在三个截然不同甚至存在冲突的司法管辖区之间进行精准的法律套利与合规操作：首先，必须满足日本出入境管理法规以及日本总务省对电信业务的属地管辖要求；其次，必须规避中国刑法与网络安全法规对中国公民的域外长臂管辖与属人管辖风险；最后，必须在第三国（如新加坡、香港、马来西亚、西班牙或德国）选择最有利于隐私保护、成本控制及高风险支付网关接入的离岸司法管辖区进行实体注册。本报告对这一跨国商业构想进行了详尽的法理剖析与实务论证，旨在为运营者提供一套低成本、高合规性且具备抗风险能力的全球化运营蓝图。\u003c/p\u003e","title":"跨境虚拟专用网络（VPN）订阅服务合规运营与离岸架构战略分析报告"},{"content":"引言 在欧洲国家通过注册个人公司来获得居留许可，是许多创业者实现移居欧洲的重要途径。本文根据以下优先条件对英国、德国、荷兰、爱沙尼亚、西班牙、葡萄牙、法国、爱尔兰、马耳他等主要国家的方案进行对比分析，并推荐最适合的选择：\n公司注册后可以申请以公司法人身份获取签证或居留许可； 注册和运营流程尽可能可远程办理、成本低廉； 公司注册地与未来实际居住地一致为佳； 公司业务类型为软件开发/线上SaaS，无需实体店面和雇员。 下文将概述各国创业移民方案的核心优势与劣势，并重点推荐3～4个最符合上述条件的国家，说明推荐理由和可行性分析，最后提供每个推荐国家的执行方案（注册公司步骤、签证申请材料与顺序、时间表等）。信息主要引用官方政策和具有实际办理经验的权威来源。\n各国公司注册及居留方案优劣概览 英国（Innovator/Start-up签证） 优势： 公司注册非常方便，海外人士可全程在线在英国公司注册处申请有限公司，费用低廉（约£12）且不要求本地董事；英国营商环境成熟，法制透明，语言无障碍，适合软件和SaaS企业的国际化拓展。 劣势： 非欧盟公民要在英国居留须通过创新者签证（Innovator）或初创签证（Start-up），需获得英国政府授权机构的商业计划背书，且要求商业创意具有创新性和高增长潜力。Start-up签证有效期2年且不可续签，必须在期满前转换为Innovator签证才能继续居留。Innovator签证除背书外一般还需至少£50,000投资资金证明，门槛较高。英国方案获取永久居留至少需5年且签证要求申请人在英国投入大量精力经营公司，不太符合“远程办理、低成本”的原则。 德国（自雇创业居留 §21） 优势： 德国拥有欧盟最大经济体和完善的创业生态，通过创业可在3年后申请长期居留甚至永久居留（如果业务成功达到营收和就业指标）。各联邦州对科技创新型创业支持力度大，例如巴伐利亚州对科技项目启动资金要求可降至15万欧元。2023年德国推出“数字签证”，允许远程科技类企业在德设立分支，仅需创业者每季度入境一次即可维持居留资格，极大提高了远程运营的灵活性。 劣势： 传统创业居留申请门槛高：需提供经过专业机构评估的详细商业计划，证明项目具备技术创新或独特商业模式并能为当地带来经济利益，如创造就业或填补市场空白。通常要求申请人具备约25万欧元以上启动资金或获得认可投资。审批流程复杂，包括德国商会(IHK)初审、使馆面试等，周期较长且需德语沟通能力（虽非硬性要求，但德语达到B1有助于通过率）。公司注册需验资（GmbH最低2.5万欧元注册资本，其中一半需实缴）且德国税费和社保负担较重。远程办理方面，设立公司和开户等步骤往往需要本人赴德处理，尽管有数字化趋势但总体办理难度和成本较高。 荷兰（Startup Visa创业签证） 优势： 荷兰提供针对非欧盟创业者的创业签证计划，有效期1年，允许在荷兰启动自己的公司。创业签证的核心是在荷兰找到一位获得官方认可的商业导师（Facilitator）作为指导人，并在其支持下开展创新型业务。申请门槛侧重创新而非资金数额：要求产品或服务具有创新性（例如对荷兰市场全新，或运用新的技术/商业模式）。荷兰创业环境开放，英语普及率高达90%，对国际创业者非常友好。公司注册资本门槛低（B.V.公司可象征性1欧元起），地理位置优越（辐射英德比市场），生活品质和社会福利领先。 劣势： 创业签证仅有1年临时居留，续居留取决于创业进展；一年期满后需申请自雇居留许可（self-employed permit）以继续经营，要求证明公司有足够经济收益或对荷兰经济有贡献。前期必须找到官方认可的创业指导人，这对个人创业者来说是一道门槛，可能需要付出额外费用或股权激励导师。业务必须具备创新性，传统类型的小型SaaS服务若无明显创新可能不满足条件。荷兰个税和增值税较高，个人收入超过一定额度将面临40%以上的税率。另外在荷兰注册公司需要提供本地注册地址，通常需聘请代理，办理银行账户等环节也可能需要亲赴当地。 爱沙尼亚（Startup Visa初创签证 / e-Residency） 优势： 爱沙尼亚以数字化著称，推出“电子居民”（e-Residency）计划，全球公民都可以远程申请爱沙尼亚政府颁发的数字身份，从而100%在线开立和管理爱沙尼亚公司，免除繁琐纸质流程。公司税制友好，未分配利润不征税，非常适合SaaS等需要再投资的科技企业。针对非欧盟创业者，爱沙尼亚Startup Visa提供了无需最低投资金额的居留途径——只要商业项目具有技术创新且可扩展性，就可能获得签证批准。Startup Visa初始有效期为12个月，可再延长6个月，之后可申请最长5年的临时居留许可。该签证不要求申请人投入特定金额资金（不像其他国家要求六位数投资），只需证明有足够资金维持在爱沙尼亚的生活（约每月€800的生活保障金）。爱沙尼亚还允许创业者携带配偶和子女一起申请居留。英语在当地通行度高，创业生态活跃。 劣势： Startup Visa要求提交商业计划并通过爱沙尼亚创业委员会评审，项目需是真正的科技型初创，公司业务应当能解决一定痛点并有潜力服务大规模用户。对于传统的软件外包、小型SaaS等，如果创新和规模潜力不足，可能无法通过评估。尽管e-Residency使公司注册管理极为便利，但需要注意：电子居民身份本身不提供在爱沙尼亚的居留权，仅用于远程经营公司。要实际定居爱沙尼亚，仍需取得Startup Visa或其他居留许可。爱沙尼亚国家体量小，本地市场有限且冬季寒冷，生活环境与一线发达国家有一定差距。尽管政策友好，但获得长期居留身份仍需企业在5年内取得一定发展（例如后续申请永久居留需要连续合法居留满5年并满足收入等要求）。 西班牙（“创业者法”创业签证 / 自雇工作签证） 优势： 西班牙自2013年推出创业者法（Ley 14/2013），为创新型企业家提供快速居留通道。如果申请人的商业计划具有创新性并被认定对西班牙有特殊经济利益，可获得创业签证，先发给1年签证入境，入境后换发初始2年居留卡，续签一次拿到共5年，再满足条件可转长期居留。该路径对申请人资金要求相对灵活，无明确最低投资额，主要看商业计划的可行性和预期创造就业等价值。办理速度快，法规规定签证审批在10个工作日内出结果（实际通常1个月左右）。除了创新创业签证，西班牙对中小企业主和自由职业者还有**自雇工作居留（俗称“老板签证”）**可选，这一途径不要求项目高度创新，适合个人以个体户或小公司形式创业。其申请条件相对宽松：无年龄、语言强制要求，不需要先获得雇主担保，只需提交详细的商业计划和足够的资金证明即可。资金门槛也不高，存款金额可根据计划规模灵活准备——一般建议个人自雇约人民币15万元，若注册公司运营则准备约人民币40万元资金证明，以覆盖初期开销。首签居留卡有效期1年，经营正常则续发4年居留卡，再续签给5年长期卡（累计5年可申请永居）。西班牙居留对居住时间要求宽松，自雇居留无严格强制居住期，只要每半年入境一次、持续经营即可满足续签条件。总体而言，西班牙提供了一个对小本创业者非常友好的移民途径。 劣势： 若选择创业者法下的创新创业签证，需要提交商业计划接受评估，强调创新和对西班牙的投资、就业价值。审批主要由经济部门审核项目报告，存在不确定性。而选择普通自雇签证路径，虽然要求宽松但初次只能拿一年居留且需要在西班牙实际开展业务并缴纳社保税款方能顺利续签。西班牙公司注册相对复杂，需办理税号(NIE)、公司名称核准、银行开户验资（有限责任公司最低资本€3000）等手续，通常需要委托当地律师或代理办理，远程操作可能需要提供公证授权书，增加一定成本。税负方面，西班牙企业税率25%，个人所得税累进税率最高可达45%以上；同时自雇者每月需缴纳社保（起步约300欧/月），这些都是运营成本考量。语言方面虽然申请签证不强制西语，但实际生活创业掌握西班牙语更方便，否则需要额外聘请语言服务。总体来说，西班牙路径的办理成本和门槛相对中等，但需做好在地经营和一定税费支出的准备。 葡萄牙（D2创业居留签证） 优势： 葡萄牙D2签证为非欧盟公民提供了以创业投资获得居留的渠道，要求相对低且灵活。申请人需要在葡萄牙注册或计划注册一家公司（常见为LDA有限公司），提交可行的商业计划，并证明有足够经济能力开展业务和在葡生活。官方未规定最低投资额，一般实际操作中，小型创业展示€5,000～€10,000的启动资金即可，有条件的建议公司账户注入约€1万以上作为运营资金证明，注册资本最低则只需€1（通常建议€1,000以体现诚意）。同时提供个人生活保障金证明（约€30,000，视家庭人数增加）有助于提高通过率。该签证流程友好：先签发4个月入境签证用于赴葡激活业务，之后可获得初次2年居留许可，续签可获3年居留卡。累计5年可申请永居或入籍。葡萄牙允许配偶、未成年子女和受养父母随同申请家庭团聚。生活成本在西欧国家中偏低，气候宜人，对技术创业者有吸引力。英语在主要城市通行度较高，政府也推出“Tech Visa”等计划欢迎科技创业者。 劣势： 近年葡萄牙移民申请量大增，签证审批可能经历较长等待时间（数月不等）。办理D2签证涉及步骤较多：需申请葡萄牙税号NIF、开立本地银行账户、公司注册、准备商业计划和各类证明材料（无犯罪纪录、住所证明、医疗保险等），其中NIF和开户通常需要当地税务代表或本人亲赴葡萄牙一次。尽管可以委托律师远程办理许多手续，但相应服务费用增加。公司经营方面，为符合续签要求，申请人须在葡萄牙真正开展业务并纳税。葡萄牙企业税率21%（部分利润段17%），对小微企业相对宽松，但个人所得税和社保支出也不可忽视。另外葡萄牙语是官方语言，虽然不强制要求但在办理业务和日常生活中仍需克服语言障碍。总体而言，葡萄牙D2签证胜在资金要求低和政策友好，但申请过程需要一定耐心和周详准备。 法国（人才护照-创业签证） 优势： 法国针对创业者的居留许可属于“Passeport Talent”人才签证类别中的企业创办（Création d’entreprise）分支，对希望在法创立公司的外国人相当有利。申请要求清晰明确：注册一家法国公司并向公司投入至少30,000欧元作为资本金（这笔资金存入公司账户，供运营使用），以及提供可信的创业项目计划（包括商业计划书和三年财务预算）。同时要求申请人具备与项目相关的能力背景，通常通过相关专业硕士学位或5年以上相关行业经验来证明。无硬性法语要求（会英语即可），且此签证可一次性获得长达4年的居留卡（少数情况先给1年，续发4年卡），可携带配偶及子女一同获得居留。法国是世界第五大经济体，创业者在法不仅能享受广阔市场和高质量公共服务，还能提升企业品牌形象；法国对科技和创新型企业提供诸多支持（如科技孵化器Station F等)。医疗福利优厚，持法国长期居留享几乎全民医疗保障，子女可免费就读公立学校。华人社区庞大（约60万），生活相对便利。 劣势： 30,000欧元的投入要求对于资金有限的个人创业者来说有一定压力（相较葡萄牙D2无需固定投资，或西班牙自雇建议资金约€10k-€20k而言）。在正式申请居留前需先完成法国公司注册和注资验资——通常需要赴法开户，将资金存入指定账户，再办理公司注册，这一步对远程操作来说有难度且费时（约1个月）。法国行政手续繁琐著称，各种文件准备和审批可能比较耗时，不过根据经验大部分申请可在3-5个月内完成签证获批。公司成立和经营过程中需遵守法国严格的税务和劳动规定，小型SaaS公司也需要每年聘请会计审计报税，运营成本较高。税负方面，法国公司税率25%，个人所得税最高45%，社保费率也很高，不过如果采取薪资+分红的方式可以一定程度优化税负。此外，要长期在法发展，法语能力的重要性不容忽视，尽管拿签证不要求但生活和拓展业务需要逐步掌握当地语言。 爱尔兰（Start-up Entrepreneur Programme） 优势： 爱尔兰提供**初创企业创业许可（STEP）**项目，吸引具创新商业理念且有一定资金的创业者。符合条件者可获批为期2年的居留许可，之后续期3年，满5年可申请长期居留甚至入籍。该计划要求申请人拥有至少€50,000资金用于创业，并提交一个对爱尔兰经济有益的创新型商业计划。相较许多国家动辄六位数欧元的投资要求，50,000欧元的资金门槛属于“合理投资”，被视为相对亲民。爱尔兰以低企业税（12.5%）和聚集大量科技公司欧洲总部而闻名，为创业者提供了融入国际商业网络的机会。通过STEP获得居留的创业者可携带配偶和子女一起移居，家人享有当地优质教育和生活福利。无强制雇佣本地员工要求，只需专注于自身企业发展即可。英语是官方语言，消除了语言障碍。 劣势： 资金要求高：€50k虽相对一些投资移民不算太高，但相比西班牙、葡萄牙等创业签证（无明确金额要求或几万欧即可）仍是较大一笔投入，申请人需要有充足自有资金或获得投资人支持。并且需提供银行资信证明资金已到位至少3个月。创新要求高：STEP强调商业计划的创新和对爱尔兰的经济贡献，由独立评审委员会严格审核，每年配额有限。审批流程较长，需要在线提交申请并等待爱尔兰移民局委员会评估，通过后才签发许可函，整个过程可能数月甚至更长。爱尔兰生活成本（特别都柏林地区）很高，对创业资金消耗是个挑战。另外，拿到居留后需长期实际居住在爱尔兰全职经营所创立企业，不可从事除自身业务外的其他工作——这一点对希望灵活远程工作的人来说限制较大。总之，爱尔兰适合有一定资本和志在欧盟市场扩张的创业项目，但对寻求低成本远程创业的个人而言吸引力略逊。 马耳他（Startup Residence创业居留计划） 优势： 马耳他政府于2022年底推出创业居留计划（Startup Residence Programme），为非欧盟创业者提供了一条快速获得居留的新路径。要求申请人在马耳他注册一家初创公司并进行实质投资不少于€25,000（作为公司实缴资本或实际投入）。相对于许多欧盟国家高额的创业投资要求，€25k的门槛较为适中，而且资金是投入自己公司并用于运营，并非政府收费。该计划对创业项目的创新行业有所侧重（如高科技制造、医药科技、可持续发展等被优待），但不像其他国家需要复杂的创新证明或商业导师背书，只要公司不超过7年且未曾分红、具有成长潜力即可申请。审批通过后，创业者可获得有效期3年的居留许可（一次性获批时间长，对创业来说非常便利），3年后如果公司仍在运营且符合资格可续签最长5年，为长期居留和潜在永居提供了稳定预期。马耳他官方语言包括英语，沟通无障碍，法律体系沿袭英制商业环境开放。作为地中海中心，生活环境舒适、安全，英语教育和医疗水准高，对于携家人移居的小型创业者很有吸引力。另有数字游民签证等政策作为补充，使创业者团队成员或暂不满足创业居留的人士也能以远程工作身份合法居留一段时间。 劣势： 马耳他市场规模小，本地客户和融资渠道有限，但其定位本就侧重利用马耳他作为欧盟切入点。创业居留计划要求申请人必须在马耳他实际生活并缴税，需要在当地有真实住所和经济往来，不允许只挂名公司不入住。因此对于希望“注册在一国、人不在场”纯远程操作的人士并不适用（不过这不符合我们优先条件3的初衷）。公司注册需要聘请本地持牌代理，流程和维护成本相对高于爱沙尼亚等地：马耳他公司需有本地注册地址和秘书，每年需做审计报表，虽然马耳他有效税率低（外国股东最终可退税后约5%企业税），但前期需要足额缴纳35%企业税再申请退还，资金占用较大。申请流程方面，需同时通过马耳他企业署和居留署的审核，对商业计划和创始人背景会有综合评估，准备周期数月不等。总体来看，马耳他创业居留胜在审批明确、英语环境和长居保障，但申请人需有一定资金实力 (€25k资本) 且愿意扎根当地经营。 以上各国方案的对比显示，满足条件1～4的理想选项应当是在资金门槛低/灵活、支持远程办手续且创业居留政策友好的国家。综合考虑后，以下几个国家脱颖而出：\n最佳推荐国家对比 为直观比较，先给出推荐国家的主要指标概览：\n国家 签证/居留类型 投资/资金要求 首次居留期限 远程注册便利度 优势摘要 西班牙 自雇工作居留（“老板签证”）或创业居留（创新创业签证） 资金证明视商业计划而定：个体经营建议≈¥15万存款，公司运营¥40万存款；无硬性投资额要求 首次1年居留卡（创业法下可先获签证入境后给2年卡），续签可得4年，再续5年 中等：公司开户和NIE办理需当地代理协助，流程有一定复杂性 无语言要求，资金门槛低，以小型创业即可申请。续签要求宽松，无严格居住期限制。生活环境佳，家庭福利完善 葡萄牙 D2创业签证（居留许可） 无明确最低投资额：一般公司注册资本€1,000+；公司账户存入经营启动金€5,000-€10,000；个人生活保障金建议€30,000 入境签证有效期4个月，初次居留卡2年，续签获3年卡，共5年可永居 较高：可远程申请税号和开户，通过律师线上注册公司；某些步骤需公证授权 资金要求低，无行业限制，创业形式灵活。移民监宽松（每年居住满约半年）。生活成本低，英语交流较普及，利于科技创业 爱沙尼亚 Startup Visa初创签证（及临时居留许可） 无最低投资要求：重在商业创意创新和可扩展；需证明生活费约€800/月 签证最长12+6个月，可申请最长5年临时居留许可 极高：电子居民卡支持在线注册公司、远程银行和报税 无需大额资金投入，支持完全线上设立和运营公司。科技创业氛围浓厚，税制友好（未分配利润0税），签证可携家属 马耳他 Startup Residence创业居留 实缴资本或投资≥€25,000；需个人健康保险及生活费证明 首次居留许可3年，可延长5年 一般：公司需委托本地服务商注册，开户流程较严格，部分可远程配合办理 英语环境，无语言障碍；一次获批3年居留，稳定性高。投资额要求适中且投入自有公司，政策支持创新创业，办理成功率高 注：上表资金以官方/经验值为准，实际要求可能随个案调整；远程便利度为相对评价。\n推荐国家及方案分析 基于上述对比，我们重点推荐西班牙、葡萄牙、爱沙尼亚、马耳他这四个国家作为满足条件1-4的最佳选项。下面分别说明每个国家的推荐理由以及具体的执行方案。\n西班牙 🇪🇸 推荐理由： 西班牙对中小型创业者非常友好，特别是**“自雇工作签证”（俗称老板签证）**提供了低门槛进入欧洲的途径。申请人无需高额投资，也不要求雇佣员工，只需提供可行的经营计划和适度的资金证明即可。相较创新型创业签证需要证明“国家利益”，自雇路径接受一般性的生意，包括软件开发、IT咨询等SaaS服务。首签一年居留期满后，如正常缴税经营，可一举续签4年，再续5年，5年后可转永居，居留稳定性好。此外西班牙无语言考试要求，签证审批速度快，且允许家属随行享受医疗和教育福利。考虑到题主业务为线上SaaS，无需实体店，西班牙宽松的自雇政策足以覆盖此类业务。同时，西班牙宜人的生活环境和较低生活成本也是加分项。\n执行方案： 建议按照以下步骤推进西班牙的创业移民计划：\n商业形式选择及公司注册：决定采用个体户自雇（Autónomo）或成立公司（SL公司）方式。如果计划业务规模不大，个人自雇即可满足要求，手续更简单；如希望以公司名义运营或将来扩张，可注册SL有限公司。SL公司的最低注册资本为€3,000，可全额存入西班牙银行账户验资。远程阶段可联系西班牙的代理/律师协助预约办理NIE号（外国人识别号）和银行开户。需要在当地开立非居民账户并存入注册资本金（可授权律师代办）。公司注册需在公证处签署章程文件，可通过委托授权由代理人在西班牙代签。产出物：公司营业执照（或自雇登记证明）、税号、公司银行开户证明等。 准备签证申请材料：根据选择的路径准备相应材料，包括： 详细商业计划书：用西班牙语撰写，内容涵盖公司业务概要、市场分析、经营地点（网上经营可注明远程办公）、预期投入和收益、对自身生活保障的评估等。突出申请人具备的行业经验、项目可行性，并说明此业务将如何维持收入（自雇签证看重申请人有谋生能力）。 资金证明：提供银行对账单证明有足够启动资金和生活费。经验数据显示，自雇个体可准备约€20,000等值人民币存款证明，公司运营建议€50,000等值资金更稳妥。这些资金无需全部投入，只作为财力佐证，体现您能承担创业初期费用。 无犯罪记录证明：需在国内办妥公证、双认证。 医疗保险：购买覆盖西班牙的私人健康保险，并获取保单证明。 住宿证明：提供西班牙境内住所证明，如租房合同。如果暂时没有，可委托中介先行租赁一处住所以用于申请。 身份证明等：有效护照（有效期至少一年以上，需有空白页）、证件照片等。\n整理以上材料，翻译为西班牙语并公证认证（如必要），按照使领馆要求准备两套复印件。 提交签证申请：通过西班牙驻华使领馆指定的签证中心递交“自营工作居留签证”申请（Código de visado: Cuenta Propia）。申请人可以本人亲自递交，也可委托代理递交（需提供授权书）。缴纳签证费约€90。通常使馆会在约1~3个月内处理申请，期间可能通知面谈或要求补充材料。根据西班牙法律，此类居留申请法定审理期限为10个工作日，但实际通常较长。建议耐心等待并保持联系电话畅通。 获签及入境：一旦签证获批，申请人需在签证签发后1个月内前往领馆领取签证贴纸。首次签证有效期为90天入境签+D类居留签注。申请人应在签证有效期内携带原始材料入境西班牙。 登录办理居留卡：入境西班牙后，在签证有效的90天内前往居住所在地的移民办公室申请外国人居留卡（TIE）。需提前在网上预约。现场提交护照、签证页复印件、签发的居留许可批文以及照片，录指纹办理TIE卡。首张居留卡有效期1年。同时，若是自雇形式，需要在社保局注册为自雇纳税人（Autónomo），开始按月缴纳社保费用。若是公司形式，则需给自己办理雇主报到并缴社保。 运营与续签准备：利用这1年时间实际运营您的SaaS业务。确保按时申报纳税，哪怕收入不高也要保持业务真实运转的记录（如有业务流水、发票更好）。自雇者需要持续缴纳社保，不可中断。居留卡到期前2个月可申请续签4年居留卡。续签时重点查看：过去一年是否遵守法规纳税，有无负债，业务仍在进行，基本生活有保障等。若您至少每半年在西班牙停留过一段时间且持续经营，一般都能顺利续签。拿到4年长期居留后，继续经营满5年即可申请西班牙永久居留或“长期居民-欧盟”身份。 时间表概述：\n准备阶段（约2~3个月）：公司注册（如果选择注册公司，可与签证材料准备并行），材料公证和筹备。 递签及审批（1~3个月）：提交申请后等待签证结果。 入境及换卡（1~2个月）：拿到签证即刻入境，预约办理居留卡，约4周领取卡。 首年经营+续签申请：第10~12个月准备续签材料，续签获批后居留延长4年。 长期规划：累计合法居留5年后申请永居卡，或继续经营满10年申请西班牙国籍（需通过西语A2考试及融入考）。 葡萄牙 🇵🇹 推荐理由： 葡萄牙的D2创业签证被誉为“低成本、高灵活度”的欧洲移民途径。其优势在于对创业类型和资金金额没有硬性限制，中小规模的软件工作室或SaaS企业均可接受。申请手续相对简化：不需要预先获得孵化器认可或投资基金，只需证明有在葡创业的真实意愿和基本经济条件。对资金要求官方没有明文最低值，许多申请者仅投入数千欧元注册小公司即可获批。尤其对于远程数字业务，可以选择将业务主要市场设在海外，葡萄牙作为总部基地即可。葡萄牙还提供高性价比的生活：租金、物价在西欧属低位，英语交流广泛（特别在里斯本、波尔图等城市），方便外国创业者融入。本案的线上SaaS业务不依赖当地客户，因而葡萄牙作为居留地非常合适，可享当地宜人的生活同时利用互联网服务全球客户。此外，葡萄牙政府乐于吸引创业和技术人才，除了D2签证，还有Tech Visa、数字_nomad签证等多种路径（如您后期团队成员可用远程工作签证来葡短期居留）。综合看，葡萄牙提供了门槛低、收益高的居留选择。\n执行方案： 建议按以下流程办理葡萄牙D2创业签证：\n远程准备税号和开户：首先获取葡萄牙的纳税人编号（NIF）。非居民可以远程委托葡萄牙的税务代表（律师或会计）在线申请NIF，一般只需护照和地址证明文件。接下来，在葡萄牙银行开设个人账户并存入生活保障金。建议存入约€30,000以证明有至少一年的生活费用（具体金额领馆未规定，但实际案例显示30k欧左右存款证明比较保险）。该账户也可用于公司未来运营资金周转。部分银行（如Novo Banco等）支持非居民远程开户，如果遇到困难，可待入境时再开户但需解释资金来源。 注册公司：通过线上平台或律师代理在葡萄牙注册LDA有限公司。葡萄牙有“Empresa Online”服务，可在几天内完成注册。所需材料包括：拟定公司名称、经营范围（软件服务可归类为“Software Development/IT Services”）、股东和经理信息等。最低股本法律上为€1，但实践中为展示商业可信度，建议定为€1000或以上。股本可暂存在您个人账户，等公司开设公司账户后再转入。公司注册完成后，会获得公司税号(NIPC)和商业登记证明。 商业计划书：撰写一份商业计划书（葡萄牙语或英语均可，但附葡语摘要最佳）。内容应包括： 公司业务概述：描述您的SaaS产品或服务，目标市场（全球或欧洲客户）、盈利模式等。 创业动机：为什么选择葡萄牙作为基地，比如因其商业环境、欧盟市场接入、技术人才资源等优势。 运营计划：公司将在葡萄牙开展哪些活动（如软件研发、销售支持等），预估头年的投入和经营成本。 财务预测：未来2-3年的营收、支出和利润估算。 对葡萄牙的益处：尽管D2不要求“创新性”，但突出一些积极影响有帮助，如计划与当地IT行业合作、参加本地孵化器项目、未来可能创造就业等。 创业者资历：介绍您在软件开发领域的经验、过往项目成功案例，表明有能力将业务做好。\n此外准备好您的简历、相关学历证书或工作证明，以支持商业计划的可行性。 签证材料准备：除了商业计划书，D2申请需要提交： 个人财务证明：即前述银行存款证明 (€30k) 和最近6个月的银行流水，以展示财务稳健。 公司文件：公司注册证、公司税号(NIPC)证明，若已开公司银行账户可附上对账单和初始存款记录（比如把一部分启动资金€5k~€10k存入公司账户作为运营资金）。 无犯罪记录：国内公安出具的无犯罪证明，需双认证并翻译成葡萄牙语。 住宿证明：提供在葡萄牙的住所证明（租房合同或邀居证明）。若暂未前往葡萄牙，可先通过房产中介远程签租约，或让代理提供短期住所证明。 健康保险：购买葡萄牙或全球适用的医疗保险，覆盖至少1年，出具保单。 其他：有效护照及复印件，彩色证件照，结婚证/出生证公证（如携家属申请）。 申请表：填写葡萄牙长期居留签证表格，勾选D2创业类别。将所有文件翻译成葡萄牙语并进行必要公证认证后装订齐备。 递交签证申请：向葡萄牙驻中国使领馆指定签证中心提交D2签证申请。由于申请属居留类，需要预约并面交材料。工作人员可能就商业计划提问一些基本情况，请做好解说准备。缴纳签证手续费（约€90-€100，根据汇率调整）。之后进入审理阶段，一般耗时2-4个月，期间领馆或SEF（葡萄牙移民局）可能要求补材料或远程面试。耐心等待结果，可通过申请编号查询进度。 获取签证入境：一旦获批，会签发一个有效期4个月的多次入境签证（D类签证）。您需要在签证有效期内登陆葡萄牙，并尽快预约移民局办理居留卡。 办理居留卡：抵达葡萄牙后，联系当地SEF预约办理首次居留许可证（Título de Residência）。携带护照、签证页、提交过的材料原件及入境盖章页，按预约时间前往SEF面谈。官员会复核您的创业计划执行情况（此时您应已注册公司，有本地地址，可证明正在着手创业）。通过后拍照和指纹，大约2-3周后领取初次居留卡（有效期2年）。恭喜您正式成为葡萄牙居民！ 公司后续运营：两年期间，请按照商业计划开展业务。葡萄牙对D2持有人没有严格营业额或雇工要求，但续签时倾向于看到公司保持存续并有一定业务活动记录。因此请确保： 定期完成公司纳税申报，即使营业额不大也要按规报税（可聘请会计处理季度IVA申报、年度报表等）。 银行账户有资金往来，尽量避免长期零流水状态。 本人每年实际居住葡萄牙至少6个月（移民法规要求居民每年住满183天或连续5年不离境超过10个月，以保持居留资格）。\n同时利用这段时间适应当地生活，如学习一些葡语以便更好沟通。 续签与长期居留：在初次2年居留卡到期前的90天内，准备续签申请。续签需要再次提交财务状况证明（通常要求账户上仍有不少于€30k资金保证未来生活）、公司继续运营的证明（比如近期财务报表、客户合同等），以及在葡居住证明（水电账单、房租发票）。若过去2年内遵纪守法、正常经营，一般可顺利获批3年续居留。持续居留满5年后，即可申请葡萄牙永久居留或入籍（需通过基础葡语A2考试和无犯罪记录等）。入籍葡萄牙还能享受欧盟公民待遇，方便在欧盟境内生活工作。 时间规划：\n前期准备：NIF申请和开户（2周）；公司注册（1-2周）；材料公证翻译（2-4周）；商业计划撰写同步进行（数周）。 签证审理：约2-4个月（不同领馆速度不同，北京领馆可能较快）。 入境换卡：签证获批后1个月内入境，预约SEF约需等待4-6周，拿卡再2-3周。 首次居留期：2年，需在期满前3个月准备续签。 续签及长期：第2年末申请续签3年卡；累计5年后办理永居/入籍。 爱沙尼亚 🇪🇪 推荐理由： 爱沙尼亚以其数字化政府和创业友好政策而著称，非常适合从事软件开发、SaaS这类完全在线业务的个人创业者。最大的亮点是爱沙尼亚电子居民（e-Residency）计划，使您无需亲临现场就能完成公司注册和运营管理。这一点完美契合“远程可办、低成本”的要求：您可以在国内通过互联网设立一家爱沙尼亚有限责任公司（OÜ），并利用爱沙尼亚的平台处理报税、签署文件等，极大降低行政负担。虽然电子居民身份本身不赋予居留权，但为后续申请Startup Visa（初创企业签证）打下基础——公司注册好、有了数字身份后，您可以一边远程经营，一边申请Startup Visa来到爱沙尼亚长期发展。Startup Visa极具吸引力：无固定投资金额要求，不需要像德国、法国那样投入数十万欧元，只要您的创业构想足够创新、有规模潜力，就有机会获批。尤其对于IT和软件领域的项目，评审委员会相对青睐。拿到Startup Visa后，初始可以在爱沙尼亚居留一年（可延长至18个月），期间若业务开展顺利，可进一步申请为期最长5年的临时居留许可。5年后可申请永居身份。爱沙尼亚国内广泛使用英语交流，科技创业氛围浓厚，比如Skype、Wise等知名公司源自爱沙尼亚，在那里从事SaaS具有良好的生态和社区支持。综上，爱沙尼亚非常符合条件1-4，尤其对于技术导向的个人创业者，是一个高性价比的选择。\n执行方案： 建议您按以下步骤开展在爱沙尼亚的公司注册与居留申请：\n申请电子居民 e-Residency：登陆爱沙尼亚电子居民官网在线提交申请。填写基本信息并说明申请目的（如开设公司经营SaaS业务等），支付国家手续费€100-120。约2-4周后审批通过，您将收到通知前往选定的地点领取e-Residency卡（中国目前支持在北京爱沙尼亚大使馆领取）。领取时需要本人到场出示护照并采集指纹。拿到电子居民卡和数字读卡器后，激活您的数字ID。 注册爱沙尼亚公司：使用电子身份证登录爱沙尼亚在线商务注册门户（Company Registration Portal）。起草公司章程，填写公司名称（可英文）、注册地址（可使用爱沙尼亚服务商提供的虚拟地址服务），指定董事和股东（您自己即可），设定股本金额和份额。股本最低要求€0.01，但若计划日后申请居留许可，建议设定适当股本如€2,500，因为爱沙尼亚法律规定临时居留许可另一条路径需要公司实缴至少€65,000的资本金，但Startup Visa路线没有这个强制要求。然而注入一定资金有助于体现商业诚信。由于您暂时无法亲临爱沙尼亚银行开户，可选择延期缴纳股本，允许公司先注册成立、股本稍后注入。通过在线系统签名提交后，通常1-5个工作日公司即可注册完成，并获得商业登记编码（BIC）。 开设银行或金融账户：虽然电子居民可以远程管理公司，但某些金融服务（如公司银行账户）需要额外步骤。您可以先使用Fintech平台如Wise、Revolut为公司开设欧元账户，以收付业务款项。在实际赴爱沙尼亚时，可再开立传统银行账户。此环节不影响签证申请，可并行准备。 准备Startup Visa申请：爱沙尼亚Startup Visa分两步：创意评估和签证/居留申请。首先需要向创业委员会（Startup Committee）提交您的创业创意，获取认证。具体操作是在Startup Estonia网站上填写Startup Visa申请表，内容包括公司业务概念、产品/服务创新点、目标市场、商业模型、团队情况等。委员会由行业专家组成，一般在10个工作日内给出评估结果。如果通过，您将得到一封确认函（Startup Committee positive decision），包含一个唯一的创业代码。 申请签证或居留许可：拿到创业批准后，您可以选择申请D类长期签证（有效期最长12或18个月），或直接申请临时居留许可（有效期最长5年），取决于您计划的时间长短。对于首次赴欧，很多人先申请D签证快速入境，再在当地转居留许可。您需要前往爱沙尼亚驻华使馆提交： 签证申请表/居留许可申请表（两者略有不同）。 Startup Committee确认函。 公司文件：营业登记证明、公司业务描述（可附上商业计划书）。 财务证明：证明您有足够资金支付在爱沙尼亚期间的生活费。根据要求需要每月€800的生活保障，建议准备至少12个月即约€9,600的银行存款证明（或提供最近半年银行流水显示月收入达到€800以上）。 无犯罪证明：国内公证双认证+英文翻译。 医疗保险：覆盖整个申根区且保额不低于€30,000的旅行医疗保险（签证申请需要，若直接申请居留许可则需一年期医疗保险，保额至少€6,000）。 住房证明：至少初期的住宿预订或邀请函。 以及护照照片等常规文件。\n使馆受理后，会将资料递交爱沙尼亚移民局审核。D签证申请费用约€100（居留许可€160），通常在2-4周内得到结果。 获得签证及初期运营：当您拿到Startup D签证后，即可安排赴爱沙尼亚。抵达后，可以着手处理公司运营事项，比如： 在当地银行开公司账户，将之前承诺的股本金打入并登记实缴。 如果签证有效期为12个月且您计划长期留驻，可在签证期内向警察和边境局申请临时居留卡，这需要再次提交创业委员会批文及公司经营进展材料。办理居留卡通常4-8周时间，获批后您将持有最长5年的居留证。 发展业务与续期：利用爱沙尼亚的创业支持资源拓展您的SaaS业务。例如加入当地孵化项目、申请政府的创业补助（如有）。爱沙尼亚对Startup Visa持有人没有具体业绩考核要求，但如果您持的是居留许可，五年后申请永久居留时需要证明过去五年大部分时间住在爱沙尼亚，以及有合法稳定收入来源等。所以务必确保每年在爱实际居留6个月以上，并持续经营公司（哪怕规模不大）。如果初次只拿到了签证但还未申请居留许可，记得在签证到期前申请延长6个月或转换为居留许可。 长期规划：创业5年左右，如果公司有一定成功（或至少存续），您可以考虑申请爱沙尼亚永久居留。这通常需要通过爱语初级考试（A2）并满足5年连续居留等要求。永久居留后，可以自由在爱沙尼亚生活，无需再受签证限制。满8年合法居留还可申请加入爱沙尼亚国籍（需要考察语言和公民知识）。 时间节点：\ne-Residency申请：1个月左右。 公司注册：1周。 创业评审\u0026amp;签证申请：共约1个月。 审批及办签：1个月。 登陆和办居留卡：1-2个月。 前5年：专注业务，每年续签/维持居留许可有效。 第5年：申请长期居留（如符合条件）。 马耳他 🇲🇹 推荐理由： 马耳他对于想通过创业移民的个人提供了一个“投入适中、一步到位长居”的选择。其Startup Residence创业居留计划直接给申请人3年的长期居留，这在各国中是相当优厚的待遇。对于在短期内不确定项目成果的创业者来说，3年期居留意味着有充裕时间来启动和培育业务，而无需每年担心续签。马耳他对资金要求€25,000，相比其他投资移民（如马耳他旧的国债永居要€250k投资）已经大幅降低。这笔钱不是捐给政府，而是投入您公司，可用于产品开发、市场营销等，实际有利于业务推进。同时马耳他官方语言为英语，新移民在语言和文化适应方面压力小。当地存在不少网络游戏、金融科技等行业的国际企业，IT基础设施完备，对于SaaS企业可以找到合作资源。作为旅游胜地，生活环境安全且舒适。此外，马耳他对创业者的配套支持政策也在加强，政府希望借此计划吸引创新人才，您有机会享受税务优惠、办公补贴等创业扶持。鉴于题主无实体店和雇员的业务特点，马耳他小而灵活的市场不会带来经营包袱，而其欧盟成员国身份又能赋予您申根区畅行的便利。总体而言，马耳他方案在保证一定资金投入前提下，实现了“低居留门槛、高签证含金量”，适合有一定启动资金储备且追求稳定欧洲身份的人士。\n执行方案： 下面是马耳他创业居留项目的一般办理步骤：\n确认资格与商业规划：首先确保您符合申请条件，包括：年满18岁，非欧盟公民（中国公民符合），无犯罪记录；您将成立的公司须属“初创”范畴（公司成立未超过7年，未曾派息或通过并购产生）。软件/SaaS业务通常可被视为创新型初创。如果您已有海外公司，也可以选择在马耳他注册一家新公司作为分支机构，只要符合上述初创定义。在着手申请前，起草一份简要商业计划：说明公司业务内容、创新之处、市场定位以及未来3-5年在马耳他的运营规划。这有助于与马耳他方面沟通并展示您项目的可行性。 公司注册和资金到位: 在马耳他注册您的公司。通常需要委托马耳他持牌的公司服务提供商办理（因当地法规要求在注册时提供注册地址、担任公司秘书等）。提供护照等身份文件后，代理会准备公司章程，把您列为股东和董事。实缴资本：按照计划要求，您需要在公司名下注资至少€25,000。建议在公司成立时就准备这笔资金——可先在国内银行准备好欧元资金，待马耳他公司开设银行账户后电汇进入作为股本金。如果短期内无法完成开户汇款，也可考虑以增资承诺方式注册（即注册时注明将认缴€25k资本，并在规定期限内缴齐）。但最终在申请居留许可前，需证明此金额已实投到公司账户或用于公司业务支出。公司注册一般1-2周完成，您将获得公司注册证书和营业号码。 提交创业居留申请：马耳他Startup Residence由**马耳他企业局（Malta Enterprise）和马耳他居留署（Residency Malta Agency）**联合审批。需通过指定官网提交申请表和证明文件。主要材料包括： 申请表：填写个人信息、公司信息、项目摘要等。 商业计划/项目说明：概述您的创业项目如何在马耳他落地和发展（可以利用第一步准备的计划）。 公司文件：公司注册证明、股东架构文件，证明您是创始人或联合创始人身份。 投资证明：公司的银行对账单或验资报告，显示注入的€25,000资金。如果有多位联合创始人一起申请且超过4人，每多1人资本需增加€10k（一般个人申请只需€25k）。 个人资金证明：银行对账单，证明您有足够个人财力支持生活（官方未指定金额，但确保至少覆盖您和家人在马耳他一年的生活费用，如每人€15,000左右为佳）。 健康保险：购买覆盖马耳他的医疗保险，用以承担您和家属的医疗风险。 无犯罪证明：国内无犯罪记录公证并附上英文翻译。 履历和能力证明：提供您的简历、学历证明、过往工作或创业经历材料，证明您有能力经营该企业（非硬性要求，但有助于评估）。 护照复印件：整本护照复印，包括签字页和所有签证盖章页。\n所有文件需翻译成英文（如原件非英文）并做必要的公证或认证。 官方审批与面试：提交申请后，马耳他企业局会先评估您的商业计划是否符合要求（创新性、可行性等），居留署则审核合规和背景。一般在提交后4-8周会反馈结果。期间可能安排视频面试，由官方与您沟通创业项目细节、在马耳他发展的动机等，请如实回答并表达出长期经营的决心（他们希望吸引的是真正想在马长期发展的创业者）。若有小问题，官方可能要求补件。在审查过程中，他们还会核实您是否曾被任何国家拒签或有安全隐患。 获批和登陆：当您的创业居留申请获批后，会收到正式批准信。接着您需要前往马耳他驻华使馆申请D类签证以入境（因为居留许可批下来后仍需签证进入马耳他领取卡）。提供批准信、护照等办理签证手续。拿到签证后即可启程前往马耳他。 领取居留卡：抵达马耳他后，按照指示前往Residency Malta办理居留卡（可能需要提前预约)。提交生物信息后，通常几周内可以领取您的3年期居留证。同时您家属的居留卡也会签发（如果有随行申请配偶子女）。 在马耳他运营公司：利用这三年时间，全身心投入您的SaaS业务。根据计划要求，创业者需在马耳他有实际且有形的存在，即不仅要有公司注册，还应在当地生活和运营。例如： 您应将个人税务居民身份转移到马耳他，每年在马耳他居住超过183天，履行纳税义务。 公司应开展实际业务活动，可以是为海外客户开发软件，也可以尝试拓展本地或欧盟客户。保存好业务合同、发票记录等作为运营证明。 若业务需要雇人，马耳他也允许您从国外聘请技术员工，他们可通过工签或数字游民签证来马协助您（这并非必须，但有助于项目发展）。 利用马耳他创业社区资源，如参加政府的创新企业交流活动，申请研发补贴等，提升公司在当地的影响力。 注意按时报税和年审。马耳他公司每年需提交经审计财报，可聘请会计师处理，确保合规。 续签长期居留: 在第3年末，Residency Malta会对您的项目进行复审以决定是否续发居留至第5年。续期需要您证明创业公司“仍在进行中”且您依然符合资格。这意味着：公司未关闭或出售，您仍是主要负责人；25k投资应还在公司里运作（如果亏损了也要证明您有继续投入能力）；以及您一直在马耳他居住缴税，没有违反法规。如果审查通过，将续发5年居留许可给您。累计居留满5年后，您可以按照马耳他移民政策申请长期居留卡（Permanent Residency）或在满足居住时间更长且语言等要求后申请公民身份。需要注意，马耳他长期居留对是否需要继续持有创业投资身份有具体规定，届时可根据当时法律选择保留创业居留身份或转为其他类型居留。 时间轴：\n前期准备\u0026amp;公司注册：1~2个月（含资金筹措、注册手续）。 申请审批：1~2个月官方审核 + 可能2周补充/面试。 签证和登陆：审批后1个月内办签入境。 初始居留有效期：3年。建议第2年开始准备续期材料。 续期\u0026amp;后续：第3年审核续发2年，使总计达5年。5年后考虑永居/入籍申请。 以上即为根据优先条件精选的国家和方案的详尽说明。在执行过程中，应密切关注各国移民局最新政策动态，合理规划时间并准备充足的材料。通过慎重选择适合自身条件的国家，并按步骤稳健推进公司注册和签证办理，您将大大提高创业移民欧洲的成功率。祝您的欧洲创业与移居之路顺利开启！\n","permalink":"https://www.aeieli.com/2025/11/26/%E6%AC%A7%E6%B4%B2%E4%B8%AA%E4%BA%BA%E5%85%AC%E5%8F%B8%E6%B3%A8%E5%86%8C%E4%B8%8E%E5%B1%85%E7%95%99%E8%B7%AF%E5%BE%84%E7%A0%94%E7%A9%B6%E6%8A%A5%E5%91%8A/","summary":"\u003ch2 id=\"引言\"\u003e引言\u003c/h2\u003e\n\u003cp\u003e在欧洲国家通过注册个人公司来获得居留许可，是许多创业者实现移居欧洲的重要途径。本文根据以下优先条件对英国、德国、荷兰、爱沙尼亚、西班牙、葡萄牙、法国、爱尔兰、马耳他等主要国家的方案进行对比分析，并推荐最适合的选择：\u003c/p\u003e","title":"欧洲个人公司注册与居留路径研究报告"},{"content":"在苹果公司市值超过3.5万亿美元的今天 ，iPhone的年度更新早已超越了一场简单的产品发布，它更像是一次全球性的企业健康状况公投。然而，当苹果公司以“Awe-Dropping”（惊掉下巴）的口号为iPhone 17系列揭幕时 ，市场的反应并非敬畏，而是一种显而易见的困惑和失望。发布会后，苹果股价应声下跌，华尔街的投资者们用行动表明，这场精心策划的盛会未能带来他们所期待的突破性创新 。 本报告将论证，iPhone 17系列远不止是一组新设备，它是一家正处于战略十字路口的企业内心矛盾的物理体现。其混乱的产品线布局、备受争议的设计抉择，以及对公司核心设计哲学的背离，共同揭示了一个科技巨头在维系其庞大帝国的务实需求与传承其品味驱动的创新遗产之间的艰难挣扎。iPhone 17或许是市场主导科学的杰作，但它可能正在遗忘那曾使其卓尔不群的艺术。\n一、 一条与自身为战的产品线：iPhone 17的混乱布局 对iPhone 17产品矩阵的剖析，揭示了其内部的深刻矛盾和缺乏清晰、连贯的层级愿景。苹果似乎在试图取悦所有人的过程中，迷失了定义每一款产品独特价值主张的能力，从而催生了一个功能重叠、定位模糊、价值混乱的四机型阵容。\nA. 越级的标准版：蚕食皇冠上的明珠 苹果长期以来赖以成功的，是一种精心构建的产品等级制度：标准版提供优良的基础体验，而真正令人向往的“杀手级”功能则被保留给利润丰厚的Pro系列，以此创造强大的升级驱动力。然而，iPhone 17打破了这一模式。\n售价799美元起的标准版iPhone 17，如今配备了120Hz ProMotion自适应刷新率显示屏，这项技术在过去是Pro型号的专属标志 。不仅如此，它还搭载了强大的新款A19芯片，摄像头系统也显著升级至4800万像素双摄，屏幕峰值亮度达到3000尼特，并将基础存储空间翻倍至256GB 。 这种在标准型号上的激进功能下放，构成了一个严重的战略难题。通过将“Pro级”功能普及化，苹果实质上削弱了消费者多花300美元升级至售价1099美元的iPhone 17 Pro的核心理由 。如今，Pro系列的主要差异化优势被压缩至一颗长焦镜头和性能略胜一筹的A19 Pro芯片——对于大多数普通消费者而言，这种差异可能过于细微，难以支撑如此巨大的价格鸿沟。这一策略冒着蚕食其核心利润引擎——高利润率Pro系列销量的巨大风险 。 这种转变的背后，是苹果在应对外部竞争压力（多年来，安卓阵营的旗舰甚至中端机型早已普及高刷新率屏幕 ）与维护内部产品利润结构之间的失衡。它解决了一个问题——让标准版iPhone在参数上更具竞争力——但却创造了另一个可能更具破坏性的问题：使自家的高端产品线价值变得模糊不清。苹果似乎用一种战术上的勤奋，掩盖了战略上的迷茫。 B. “空气”般的困惑：一个寻找问题的解决方案 全新的iPhone 17 Air是这种战略矛盾的集中体现。它是一款为解答一个无人提出的问题而设计的产品。其核心卖点是极致的纤薄——机身厚度仅为惊人的5.5至5.6毫米 。然而，为了实现这一工程上的壮举，它在功能上做出了巨大妥协。 iPhone 17 Air的定价（999美元起）尴尬地介于标准版和Pro版之间 。它拥有一块6.5英寸的大屏幕和一颗强大的A19 Pro芯片，性能看齐旗舰 。但矛盾的是，它的后置摄像头系统却弱于标准版，仅配备了双摄像头（部分信息源甚至称其为单摄），并且极致的薄度必然导致电池容量的缩减，对于重度用户而言，其续航能力令人担忧 。 这款产品的目标用户群体显得异常“模糊”和“小众” 。它既不适合追求极致影像的摄影爱好者，也无法满足依赖长续航的专业人士。它似乎只为那些将设备的美学形态和便携性置于所有实用功能之上的消费者而存在——这是一个极其狭窄且未经市场验证的用户画像。iPhone 17 Air给人的感觉，与其说是一个深思熟虑的战略补充，不如说是一个技术驱动的“炫技”项目，是苹果在展示“我们能把手机做得多薄”的工程实力，而非回应“用户需要一款多薄的手机”的真实需求。 在苹果的历史上，无论是“将1000首歌装进口袋”的iPod，还是开启移动互联网时代的iPhone，其伟大产品无不建立在对用户需求的深刻洞察和极其清晰的产品定义之上。iPhone 17 Air则背离了这一传统。它是一个缺乏明确存在理由的产品，是苹果为了填充价格区间、创造新的细分市场而进行的一次投机性尝试。这标志着一种危险的转变：苹果正从为真实的用户解决实际问题，转向为假设中的用户创造功能列表。\nC. Pro的悖论：更强，但更廉价 最能体现iPhone 17系列设计理念混乱的，莫过于旗舰级的Pro和Pro Max型号。这两款本应代表苹果工艺和设计巅峰的产品，却做出了一个令人费解的决定：放弃了上一代备受赞誉的钛金属边框，转而采用一体成型的铝制机身 。 苹果官方给出的理由完全是基于工程实用主义的考量。新款A19 Pro芯片的性能过于强大，导致了严峻的散热挑战。铝的导热系数远高于钛（苹果声称高达20倍 ），配合全新的真空腔均热板散热系统，能够更有效地将核心组件产生的热量传导至整个机身，从而保证持续的高性能输出 。 然而，这一决策在哲学层面是颠覆性的。一直以来，“Pro”的标签不仅意味着最强的性能，更代表着在材质、工艺和美学上毫不妥协的顶级体验。从iPhone X的“手术级”不锈钢到iPhone 16 Pro的航空级钛金属，旗舰iPhone的触感和观感始终是其奢华定位的重要组成部分。如今，一个纯粹的功能性需求——散热——压倒了材质的美学和感知价值，迫使苹果在其最昂贵的产品上使用了一种通常与其中低端产品线相关联的材料 。 这种设计上的妥协还体现在其备受争议的全新外观上。传统的方形摄像头模组被一个横贯机身背部近三分之一宽度的巨大“摄像头台地”（camera plateau）所取代 。这种类似“护目镜”的设计虽然解决了手机平放时的摇晃问题，却也带来了前所未有的视觉突兀感，被许多评论者认为缺乏美感。 Pro系列的设计演变揭示了苹果内部设计优先级的一次重大调整：原始的计算性能如今凌驾于材质的尊贵感和美学表达之上。“Pro”的内涵正悄然从一种包含触感、观感和性能的整体性卓越体验，窄化为单纯的规格竞赛。这是对苹果核心品牌差异化优势的一次危险侵蚀。当形式公然屈从于功能，旗舰便失去了灵魂。\n表1：iPhone 17系列概览 为了直观地展示该产品线的内部矛盾，下表对四个型号的关键指标进行了梳理和对比。表格清晰地揭示了各型号之间尴尬的价值差距、功能重叠以及奇特的妥协，为本章节关于“混乱布局”的论点提供了数据支撑。\n特性 iPhone 17 iPhone 17 Air iPhone 17 Pro iPhone 17 Pro Max 起售价 (美元) 799美元起 999美元起 1099美元起 1199美元起 显示屏 6.3英寸 OLED, 120Hz ProMotion 6.5英寸 OLED, 120Hz ProMotion 6.3英寸 OLED, 120Hz ProMotion 6.9英寸 OLED, 120Hz ProMotion 处理器 A19 A19 Pro A19 Pro A19 Pro 后置摄像头 48MP主摄 + 48MP超广角 48MP主摄 + 48MP超广角 48MP主摄 + 48MP超广角 + 48MP长焦 48MP主摄 + 48MP超广角 + 48MP长焦 关键材质 铝金属边框，超瓷晶面板 铝金属边框，超瓷晶面板 铝金属一体成型机身 铝金属一体成型机身 基础存储 256GB 256GB 256GB 256GB 核心卖点 高性价比的“Pro级”功能 极致纤薄 (5.6毫米) 设计 专业影像系统，VC均热板散热 最大屏幕，专业级功能 主要妥协 无长焦镜头 电池续航与影像系统受限 机身材质感知价值下降 机身材质感知价值下降 数据来源 二、 机器中的幽灵：苹果是否已失去其品味？ iPhone 17系列在产品规划上的种种失误，并非孤立的技术或营销决策失当，而是更深层次企业哲学变迁的表征。要理解今日苹果的困境，必须回溯其赖以成功的精神内核，并审视其在从革命者到统治者的演变过程中，可能已经遗失的东西。\nA. 乔布斯的福音：论简洁与灵魂 史蒂夫·乔布斯（Steve Jobs）留给苹果最宝贵的遗产，并非某项具体的技术，而是一套完整的设计哲学。他坚信，伟大的产品是“品味的胜利”（a triumph of taste），并以此尖锐地批评微软“毫无品味”，因为后者“没有原创思想，也没有为产品注入太多文化” 。 这套哲学的核心是“简洁”。但乔布斯所追求的，并非肤浅的极简主义外观，而是一种源于对产品本质深刻理解的“深度简洁”。他曾说：“要让某些东西变得简单，你需要付出艰苦卓绝的努力，真正理解其潜在的挑战，并找出优雅的解决方案。” 。苹果1977年的第一本营销手册就宣告了公司的信条：“简洁是终极的繁复。” 。这种理念要求无情地剥离所有非本质的元素，直至产品展现其核心功能与灵魂。 这种对简洁和品味的追求，最终是为了创造一种直观、友好、甚至充满情感联系的用户体验。乔布斯认为，设计不仅仅是装饰，更是“表达我们对人性关爱”的方式 。产品应当感觉像是由充满激情的工匠精心打造，而非出自一个冰冷的委员会。这条“乔布斯标准”——对品味的坚持、对简洁的执着、对用户体验的狂热——构成了评判后续苹果产品的基准。而以这个标准衡量，iPhone 17系列显然是不及格的。 B. 库克主义：从革命到改良 蒂姆·库克（Tim Cook）接任CEO后，苹果的战略重心发生了根本性的转变。如果说乔布斯的时代是以颠覆性的产品创新为标志，那么库克的时代则由卓越的运营效率、供应链的精细化管理和向服务领域的战略性倾斜所定义 。 这并非是对库克商业成就的否定。他以惊人的手腕将苹果的规模和盈利能力推向了前所未有的高度。然而，这种转变对产品哲学产生了深远影响。公司的关注点从创造“唯一最好的产品”，转向构建一个能最大化市场份额的“产品组合”。这种策略不可避免地导向了更精细的市场细分和功能上的妥协，正如我们在iPhone 17系列上所看到的。\n在库克的领导下，苹果成功地降低了对iPhone硬件销售的依赖。曾一度贡献超过60%营收的iPhone，如今占比降至51%，而高利润的服务部门（包括App Store、iCloud、Apple Music等）营收占比则飙升至24% 。这一战略的核心是差异化和市场渗透：通过创造多样化的产品型号来吸引每一个可能的细分市场用户，然后利用强大的生态系统和服务将他们深度绑定 。在这种模式下，产品本身不再是终极目的，而更多是销售服务和占领市场的入口和工具。 C. 一份寻找愿景的功能清单 将前两点的分析结合，一幅清晰的图景便浮现出来：iPhone 17系列是“库克主义”的完美产物。它在市场细分上堪称杰作，但在统一的产品愿景上却是一场灾难。\n标准版iPhone 17的升级是为了抵御安卓竞争对手的侵蚀；iPhone 17 Air是一次创造新细分市场的投机实验；iPhone 17 Pro则为了在性能竞赛中拔得头筹，不惜在材质上做出妥协。每一个决策，如果孤立来看，都是合乎商业逻辑的，都能在营销部门的电子表格上找到坚实的理由。但当它们组合在一起时，却缺乏一个统一的灵魂。\n它们感觉不像是一个“品味的胜利”，而更像是一台高效、数据驱动的机器所产生的输出——这恰恰是乔布斯当年对微软的指控 。第一部分所揭示的“混乱”，正是这种从“产品导向”到“市场导向”的哲学转变所带来的必然症状。 这种转变的核心在于，乔布斯的哲学要求一个单一、强大的、充满个人信念的愿景来驱动产品开发，产品本身是第一位的。而库克的战略则要求通过市场细分和生态系统增长来实现股东价值最大化，市场是第一位的。iPhone 17系列完美地服务了后一种战略，它为每个价位和偏好（无论多么小众）都提供了选择。然而，这样做的代价是，它彻底违背了前一种哲学的核心原则：产品线不再简洁，旗舰产品在美学上妥协，新产品缺乏明确的使命。\n因此，iPhone 17系列面临一个深刻的悖论：那些在当前商业范式下使其成为“明智”商业决策的因素，恰恰是那些在苹果原创哲学下使其成为“没有品味”的产品的根源。这正是定义当代苹果的核心张力所在——它在战略上是清醒的，但在哲学上可能是空洞的。\n三、 帝国的旧衣：在充满敌意的世界中航行 苹果内部的战略转变，并非发生在真空中。它同时也是对外部世界日益激烈的竞争和技术格局变化的被动回应。然而，iPhone 17系列所展现出的迭代式、防御性的姿态，正暴露出这家科技巨头在其帝国巅峰时期前所未有的脆弱性。\nA. 智能的赤字 在一个生成式人工智能正迅速成为下一个主要技术平台的时代，苹果传统的“软硬一体”优势正面临严峻挑战。该公司被普遍认为“在人工智能领域有些追赶” 。iOS 26中展示的AI功能被视为“增量进步”，而备受期待的Siri重大改进则再次被推迟 。 当谷歌等竞争对手正在专门为AI和机器学习设计芯片（如Tensor G5）时，苹果的AI战略显得步履蹒跚，其完整的“Apple Intelligence”愿景据称要到2026年才能完全实现 。这种滞后使得iPhone 17强大的硬件性能显得无的放矢。它就像一辆拥有顶级发动机的跑车，却没有与之匹配的智能导航系统。它缺乏一个能够定义下一代智能手机体验、引人入胜的AI故事，而这正是其竞争对手正在积极讲述的。 B. 硬件光环的消逝 曾几何时，iPhone在硬件的每一个维度上都代表着无可争议的行业标杆。然而，这个时代正在结束。在移动影像领域，尽管iPhone的视频录制能力依然出众，但在静态照片方面，谷歌的Pixel等竞争对手凭借其强大的计算摄影能力，时常被认为表现更胜一筹 。在长焦摄影方面，三星的Galaxy S25 Ultra提供了远超iPhone 17 Pro Max的变焦能力和灵活性 。iPhone 17的相机升级虽然显著，但更多的是在追赶和参与一场军备竞赛，而非再次定义标准。 多年来，iPhone的超高溢价在很大程度上是由其感知上的硬件霸权所支撑的。随着竞争对手在关键领域缩小差距甚至实现超越，这种溢价的合理性正在被削弱。而iPhone 17 Pro系列在机身材质上的“降级”——从钛金属回归铝金属——进一步侵蚀了这层“硬件光环”。当消费者可以用更少的钱，从竞争对手那里买到一部拥有更全能相机和更具高级感材质的手机时，单凭苹果的品牌本身，需要付出更大的努力才能说服消费者为其买单。\nC. 来自华尔街的判决 市场对iPhone 17发布的即时反应，提供了一个残酷而清晰的外部评判。发布会后，苹果股价下跌，华尔街的投资者表现出“未受打动”和“失望”的情绪 。分析师们普遍将此次升级描述为“进化而非革命”，并指出“增量升级已不足以再激发股东的热情” 。 初期的销售预测虽然稳健，但并不惊艳。预计2025年下半年销量约为8000万台，但同时面临着关税压力和部分消费者可能选择购买降价的旧款iPhone 16等不利因素 。 华尔街的反应是一个至关重要的风向标。它表明，市场日益担忧苹果依赖迭代优化和价格微调的策略，已无法再保证其支撑巨大市值所需的爆炸性增长。市场渴望看到“下一个伟大的产品”，而iPhone 17显然不是。这种金融层面的怀疑态度，为本报告的整体论点提供了最终的验证：苹果内部的哲学漂移，正在催生出无法在外部世界激起足够兴奋度的产品，而这种兴奋度恰恰是推动公司继续向前的燃料。\n可以说，市场已经开始为苹果的“品味赤字”定价。一家公司的股价，部分反映了市场对其未来创新和增长能力的预期。苹果的发布会在技术上是合格的，带来了全面的升级。在正常情况下，这应该会带来中性或积极的市场反应。然而，股价却下跌了 。这表明市场所期待的远不止是“合格”，而是“灵感”，是“突破性创新” 。这种市场语言中的“灵感”，正是乔布斯口中的“品味”或“灵魂”——那种无法量化，却能创造巨大升级周期并支撑超高估值的魔力。负面的股价反应是最具体的证据，表明一个曾经由品味驱动的愿景的丧失，已不再仅仅是评论家们争论的哲学问题，它正在演变为这家全球最有价值公司一个切实的财务风险。 结论：一个价值万亿美元的问题 本报告的论证链条至此已然清晰：iPhone 17系列混乱的产品布局（第一部分），是公司核心哲学从乔布斯时代以产品为中心的“品味福音”，转向库克时代以市场为中心的“优化主义”的直接后果（第二部分）。而这种内部的转变，在一个要求持续创新的激烈竞争环境中，正日益暴露出其外部的脆弱性（第三部分）。\n苹果正站在一个悬崖边。它可以继续沿着当前的道路走下去——这是一条通往巨大盈利和卓越运营的道路，但同时也冒着其核心产品被缓慢而无情地商品化（commoditization）的风险。通过试图满足所有人的所有需求，iPhone正在失去其独特的身份，有沦为另一款高端智能手机的危险。\n另一条路，则是重新找回其早年信念中的勇气：为了一个单一、优美、清晰的愿景，做出大胆、有主见、甚至可能疏远一部分用户的产品决策。现在的问题已不再是苹果能否继续增长，而是它想成为一家什么样的公司。它会满足于做一台没有灵魂、高效运转、为每个细分市场生产产品的机器吗？还是说，它能再次在机器中找到那个失落的幽灵，创造出真正能让世界“惊掉下巴”的东西？整个科技帝国的未来，取决于这个问题的答案。\n","permalink":"https://www.aeieli.com/2025/09/24/%E8%8B%B9%E6%9E%9C%E7%9A%84%E7%84%A6%E8%99%91%E6%97%B6%E4%BB%A3%EF%BC%9A%E4%B8%80%E5%8F%B0%E6%B2%A1%E6%9C%89%E7%81%B5%E9%AD%82%E7%9A%84%E8%B5%9A%E9%92%B1%E6%9C%BA%E5%99%A8%EF%BC%9F/","summary":"\u003cp\u003e在苹果公司市值超过3.5万亿美元的今天 ，iPhone的年度更新早已超越了一场简单的产品发布，它更像是一次全球性的企业健康状况公投。然而，当苹果公司以“Awe-Dropping”（惊掉下巴）的口号为iPhone 17系列揭幕时 ，市场的反应并非敬畏，而是一种显而易见的困惑和失望。发布会后，苹果股价应声下跌，华尔街的投资者们用行动表明，这场精心策划的盛会未能带来他们所期待的突破性创新 。  \u003c/p\u003e","title":"苹果的焦虑时代：一台没有灵魂的赚钱机器？"},{"content":"1.安装 Docker for Ubuntn 16.04\n参考链接： https://docs.docker.com/engine/installation/linux/ubuntulinux/\nSetp1:\nsudo apt-get update Setp2:\nsudo apt-get installapt-transport-https ca-certificates Setp3:\nsudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys58118E89F3A912897C070ADBF76221572C52609D Setp4:\necho \u0026#39;deb https://apt.dockerproject.org/repo ubuntu-xenial main\u0026#39; \u0026gt; /etc/apt/sources.list.d/docker.list PS: 其他版本Ubuntu，将语句中的‘ ubuntu-xenial ’ 替换成对应的版本号\nUbuntu Precise 12.04 (LTS) Ubuntu Trusty 14.04 (LTS) Ubuntu Wily 15.10 Ubuntu Xenial 16.04 (LTS) ubuntu-precise ubuntu-trusty ubuntu-wily ubuntu-xenial Setp5:\napt-get update \u0026amp;\u0026amp; apt-get install -y -q docker-engine \u0026amp;\u0026amp; service docker start 其他linux版本，请参考 https://docs.docker.com/engine/installation/linux/\n建立FFMPEG images 参考项目： https://github.com/cellofellow/ffmpeg\n创建任意目录并进入目录 Mkdir xxxxx \u0026amp;\u0026amp; cd xxxxx 创建Dockerfile Vim Dockerfile 拷贝如下内容： FROM ubuntu:16.04 MAINTAINER aeli li \u0026lt;aeli@qq.com\u0026gt; # Set Locale RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 ENV FFMPEG_VERSION 3.0 # monitor releases at https://github.com/FFmpeg/FFmpeg/releases ENV YASM_VERSION 1.3.0 # monitor releases at https://github.com/yasm/yasm/releases ENV FDKAAC_VERSION 0.1.4 # monitor releases at https://github.com/mstorsjo/fdk-aac/releases #ENV x264 # this project does not use release versions at this time # monitor project at http://git.videolan.org/?p=x264.git;a=shortlog #ENV LAME_VERSION 3.99.5 #ENV FAAC_VERSION 1.28 #ENV XVID_VERSION 1.3.3 #ENV MPLAYER_VERSION 1.1.1 ENV BLACKMAGIC_SDK_VERSION 10.5.4 # monitor my own releases at https://github.com/nachochip/Blackmagic-SDK/releases # the origin of the drivers comes from https://www.blackmagicdesign.com/support/family/capture-and-playback # I roll them into github to track it better, and condense to only linux-drivers ENV SRC /usr/local ENV LD_LIBRARY_PATH ${SRC}/lib ENV PKG_CONFIG_PATH ${SRC}/lib/pkgconfig # Install. ubuntu RUN sed -i \u0026#39;s/# (.*multiverse$)/1/g\u0026#39; /etc/apt/sources.list \\ \u0026amp;\u0026amp; apt-get update \\ \u0026amp;\u0026amp; apt-get -y upgrade \\ \u0026amp;\u0026amp; apt-get -q -y install build-essential \\ \u0026amp;\u0026amp; apt-get -q -y install software-properties-common \\ \u0026amp;\u0026amp; apt-get -q -y install byobu curl git htop man unzip vim wget \\ \u0026amp;\u0026amp; apt-get -q -y clean \\ \u0026amp;\u0026amp; rm -rf /var/lib/apt/lists/* # Install FFMPEG need lib. RUN echo \u0026#39;deb http://archive.ubuntu.com/ubuntu precise universe multiverse\u0026#39; \u0026gt;\u0026gt; /etc/apt/sources.list \u0026amp;\u0026amp; apt-get update \u0026amp;\u0026amp; apt-get -y -q install autoconf automake build-essential libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libmp3lame-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev \u0026amp;\u0026amp; apt-get clean # Run build script # ADD build.sh /build.sh # RUN [\u0026#34;/bin/bash\u0026#34;, \u0026#34;/build.sh\u0026#34;] # YASM RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; curl -Os http://www.tortall.net/projects/yasm/releases/yasm-${YASM_VERSION}.tar.gz \u0026amp;\u0026amp; tar xzvf yasm-${YASM_VERSION}.tar.gz \u0026amp;\u0026amp; cd yasm-${YASM_VERSION} \u0026amp;\u0026amp; ./configure --prefix=\u0026#34;$SRC\u0026#34; --bindir=\u0026#34;${SRC}/bin\u0026#34; \u0026amp;\u0026amp; make \u0026amp;\u0026amp; make install \u0026amp;\u0026amp; make distclean \u0026amp;\u0026amp; rm -rf ${DIR} # x264 RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; git clone --depth 1 git://git.videolan.org/x264 \u0026amp;\u0026amp; cd x264 \u0026amp;\u0026amp; cmake ../../source \u0026amp;\u0026amp; make \u0026amp;\u0026amp; make install \u0026amp;\u0026amp; make distclean \u0026amp;\u0026amp; rm -rf ${DIR} # x265 RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; apt-get install -y -q cmake mercurial \u0026amp;\u0026amp; hg clone https://bitbucket.org/multicoreware/x265 \u0026amp;\u0026amp; cd x265/build/linux \u0026amp;\u0026amp; PATH=\u0026#34;$HOME/bin:$PATH\u0026#34; cmake -G \u0026#34;Unix Makefiles\u0026#34; -DCMAKE_INSTALL_PREFIX=\u0026#34;$SRC\u0026#34; -DENABLE_SHARED:bool=off ../../source \u0026amp;\u0026amp; make \u0026amp;\u0026amp; make install \u0026amp;\u0026amp; rm -rf ${DIR} # LAME #RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; # curl -L -Os http://downloads.sourceforge.net/project/lame/lame/${LAME_VERSION%.*}/lame-${LAME_VERSION}.tar.gz \u0026amp;\u0026amp; # tar xzvf lame-${LAME_VERSION}.tar.gz \u0026amp;\u0026amp; # cd lame-${LAME_VERSION} \u0026amp;\u0026amp; # ./configure --prefix=\u0026#34;${SRC}\u0026#34; --bindir=\u0026#34;${SRC}/bin\u0026#34; --disable-shared --enable-nasm \u0026amp;\u0026amp; # make \u0026amp;\u0026amp; # make install \u0026amp;\u0026amp; # make distclean \u0026amp;\u0026amp; # rm -rf ${DIR} # FAAC # This combines faac + http://stackoverflow.com/a/4320377 #RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; # curl -L -Os http://downloads.sourceforge.net/faac/faac-${FAAC_VERSION}.tar.gz \u0026amp;\u0026amp; # tar xzvf faac-${FAAC_VERSION}.tar.gz \u0026amp;\u0026amp; # cd faac-${FAAC_VERSION} \u0026amp;\u0026amp; # sed -i \u0026#39;126d\u0026#39; common/mp4v2/mpeg4ip.h \u0026amp;\u0026amp; # ./bootstrap \u0026amp;\u0026amp; # ./configure --prefix=\u0026#34;${SRC}\u0026#34; --bindir=\u0026#34;${SRC}/bin\u0026#34; \u0026amp;\u0026amp; # make \u0026amp;\u0026amp; # make install \u0026amp;\u0026amp; # rm -rf ${DIR} # XVID #RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; # curl -L -Os http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz \u0026amp;\u0026amp; # tar xzvf xvidcore-${XVID_VERSION}.tar.gz \u0026amp;\u0026amp; # cd xvidcore/build/generic \u0026amp;\u0026amp; # ./configure --prefix=\u0026#34;${SRC}\u0026#34; --bindir=\u0026#34;${SRC}/bin\u0026#34; \u0026amp;\u0026amp; # make \u0026amp;\u0026amp; # make install \u0026amp;\u0026amp; # rm -rf ${DIR} # FDK_AAC RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; curl -s https://codeload.github.com/mstorsjo/fdk-aac/tar.gz/v${FDKAAC_VERSION} | tar zxvf - \u0026amp;\u0026amp; cd fdk-aac-${FDKAAC_VERSION} \u0026amp;\u0026amp; autoreconf -fiv \u0026amp;\u0026amp; ./configure --prefix=\u0026#34;${SRC}\u0026#34; --disable-shared \u0026amp;\u0026amp; make \u0026amp;\u0026amp; make install \u0026amp;\u0026amp; make distclean \u0026amp;\u0026amp; rm -rf ${DIR} # Blackmagic SDK RUN cd /usr/src/ \u0026amp;\u0026amp; curl -s https://codeload.github.com/nachochip/Blackmagic-SDK/tar.gz/${BLACKMAGIC_SDK_VERSION} | tar xzvf - # FFMPEG # I removed these flags from configure: --enable-libfaac --enable-libmp3lame --enable-libxvid RUN DIR=$(mktemp -d) \u0026amp;\u0026amp; cd ${DIR} \u0026amp;\u0026amp; curl -Os http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.gz \u0026amp;\u0026amp; tar xzvf ffmpeg-${FFMPEG_VERSION}.tar.gz \u0026amp;\u0026amp; cd ffmpeg-${FFMPEG_VERSION} \u0026amp;\u0026amp; ./configure --prefix=\u0026#34;${SRC}\u0026#34; --extra-cflags=\u0026#34;-I${SRC}/include\u0026#34; --extra-ldflags=\u0026#34;-L${SRC}/lib\u0026#34; --bindir=\u0026#34;${SRC}/bin\u0026#34; --extra-libs=-ldl --enable-version3 --enable-libx264 --enable-libx265 --enable-gpl --enable-postproc --enable-nonfree --enable-avresample --enable-libfdk_aac --disable-debug --enable-small --enable-decklink --extra-cflags=-I/usr/src/Blackmagic-SDK-${BLACKMAGIC_SDK_VERSION}/Linux/include/ --extra-ldflags=-L/usr/src/Blackmagic-SDK-${BLACKMAGIC_SDK_VERSION}/Linux/include/ \u0026amp;\u0026amp; make \u0026amp;\u0026amp; make install \u0026amp;\u0026amp; make distclean \u0026amp;\u0026amp; hash -r \u0026amp;\u0026amp; rm -rf ${DIR} RUN echo \u0026#34;/usr/local/lib\u0026#34; \u0026gt; /etc/ld.so.conf.d/libc.conf CMD [\u0026#34;--help\u0026#34;] ENTRYPOINT [\u0026#34;ffmpeg\u0026#34;] 保存并退出vim或其他编辑器。\n执行命令生成images：\nDocker build -t=\u0026#39;image镜像标签名\u0026#39; . 文件转码输出（点播HSL分段）：\ndocker run --rm -v /本机输入文件目录:/容器挂载目录 ffmpeg-mut -i /容器挂载目录/媒体文件名 -c:v libx264 -c:a aac -f -\u0026gt; /本机输出目录/文件名.m3u8 ","permalink":"https://www.aeieli.com/2024/06/05/ffmpeg-docker-for-x265-%E9%95%9C%E5%83%8F%E5%88%B6%E4%BD%9C%E8%BF%87%E7%A8%8B/","summary":"\u003cp\u003e1.安装 Docker for Ubuntn 16.04\u003c/p\u003e\n\u003cp\u003e参考链接： \u003ca href=\"https://docs.docker.com/engine/installation/linux/ubuntulinux/\"\u003ehttps://docs.docker.com/engine/installation/linux/ubuntulinux/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSetp1:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e sudo apt-get update\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSetp2:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e      sudo apt-get installapt-transport-https ca-certificates\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSetp3:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e      sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys58118E89F3A912897C070ADBF76221572C52609D\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eSetp4:\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e     echo \u0026#39;deb https://apt.dockerproject.org/repo ubuntu-xenial main\u0026#39; \u0026gt; /etc/apt/sources.list.d/docker.list\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003ePS: 其他版本Ubuntu，将语句中的\u003ccode\u003e‘ ubuntu-xenial ’\u003c/code\u003e 替换成对应的版本号\u003c/p\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eUbuntu Precise 12.04 (LTS)\u003c/th\u003e\n\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eUbuntu Trusty 14.04 (LTS)\u003c/th\u003e\n\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eUbuntu Wily 15.10\u003c/th\u003e\n\t\t\t\t\t\u003cth style=\"text-align: center\"\u003eUbuntu Xenial 16.04 (LTS)\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003eubuntu-precise\u003c/td\u003e\n\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003eubuntu-trusty\u003c/td\u003e\n\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003eubuntu-wily\u003c/td\u003e\n\t\t\t\t\t\u003ctd style=\"text-align: center\"\u003eubuntu-xenial\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003eSetp5:\u003c/p\u003e","title":"FFMPEG Docker For x265 镜像制作过程"},{"content":"到官网下载mysql mac安装文件，可选dmg文件\nMySQL最新版:下载地址\n安装完成后，在设置中，打开mysql控制面板，关闭服务器。\n在PATH中加入mysql安装路径，以便可以直接使用mysql命令行。\n$ vim ./ bash_profile export PATH=$PATH:/usr/local/mysql/bin 打开安全模式\nsudo mysqld_safe --skip-grant-tables 另开一个终端窗口\nmysql -u root // 5.7以前版本使用，5.7以后版本不再使用 // UPDATE mysql.user SET Password=PASSWORD(\u0026#39;password\u0026#39;) WHERE User=\u0026#39;root’; UPDATE mysql.user SET authentication_string=PASSWORD(’new password\u0026#39;) WHERE User=\u0026#39;root\u0026#39;; exit //退出 关闭安全模式的终端窗口，停止终端运行。\n如果密码是简单密码或其他原因，可能会出现：\nERROR 1862 (HY000): Your password has expired 错误，此时，需要重新打开mysql\nmysql -u root -p \\输入密码 SET PASSWORD=PASSWORD(’new password\u0026#39;); ","permalink":"https://www.aeieli.com/2024/06/05/mysql-mac-%E5%AE%89%E8%A3%85%E5%AE%8C%E5%85%A8%E6%8C%87%E5%8D%97-5-7-x/","summary":"\u003cp\u003e到官网下载mysql mac安装文件，可选dmg文件\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://dev.mysql.com/downloads/mysql/\"\u003eMySQL最新版:下载地址\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e安装完成后，在设置中，打开mysql控制面板，关闭服务器。\u003c/p\u003e\n\u003cp\u003e在PATH中加入mysql安装路径，以便可以直接使用mysql命令行。\u003c/p\u003e","title":"MYSQL Mac 安装完全指南 5.7.x +"},{"content":"最近在简单学习一些Node JS的用法，使用了Express框架来搭建基础的页面。但在遇到一个处理excel表格的需求时，使用推荐的excel-parser组件解析文件时，遇到error: command failed 无提示错误。一番搜索也没有找到解决方案，最终研究一下发现原因，特在此记录一下解决流程。\n最初的时候，怀疑是在本地Mac环境搭建与Linux下不符，于是把代码上传到服务器上部署，发现会报同样的错误。然后查看发现是命令无法找到，于是修改了excel-parser的配置文件，将python解释器指向绝对地址，依然没有解决问题。\n最后突然发现，excel-parser是依赖于python的excel解析器，其本身需要安装xlrd插件,于是下载https://pypi.python.org/pypi/xlrd的安装包，解压后，在目录下执行\nsudo python setup.py install\n安装完成后，问题解决！\n","permalink":"https://www.aeieli.com/2024/06/05/node-js-parser-excel-file-node-js%E8%A7%A3%E6%9E%90excel%E6%96%87%E4%BB%B6-error-command-failed/","summary":"\u003cp\u003e最近在简单学习一些Node JS的用法，使用了Express框架来搭建基础的页面。但在遇到一个处理excel表格的需求时，使用推荐的excel-parser组件解析文件时，遇到error: command failed 无提示错误。一番搜索也没有找到解决方案，最终研究一下发现原因，特在此记录一下解决流程。\u003c/p\u003e","title":"Node.JS parser excel file Node JS解析excel文件 error: command failed"},{"content":"您好， 问题「如何看待雷洋在昌平离奇死亡事件？」已被删除，原因是：根据相关法律法规和有关部门通知，该内容不适合在知乎讨论\n您的回答如下：\n周老虎是维稳起家，所以搞出n亿维稳经费。而继任的这位，从北京天上人间开始，到东莞大扫荡，可以说，每一步都是踩着小姐和嫖客的身体走上去的。\n嫖客这个群体好啊，有钱去嫖娼（经济尚可）、地位低下（高级的有会所）、道德上没有优势（谁敢为嫖娼的辩护？）。\n所以从他上台以后，抓嫖就是国内GA最喜欢的事。以前虽然抓嫖有钱挣，但现在不但有钱挣，还有领导喜欢啊！\n具体到问题上，人大雷洋无论有没有去嫖娼，但他撞到了北京最近又一轮新的严打枪口上，又在不合适的时间出现在不合适的地方（出现在警察埋伏的范围），他又采用了不合适的对抗手段（过激反应），悲剧是偶然也是必然的，和之前的暂住证等诸多恶法下牺牲的人一样，最好的希望也不过是能触动一点这个腐朽的制度，让它能稍稍改善一点，这恐怕是雷洋之死所能带来的最大结果。\n但可惜的是，掌权的那位风头正盛，雷洋白死的可能性更大。\n","permalink":"https://www.aeieli.com/2024/06/05/%E5%AF%B9%E4%BA%BA%E5%A4%A7%E7%A1%95%E5%A3%AB%E9%9B%B7%E6%B4%8B%E6%9C%BA%E5%9C%BA%E6%8E%A5%E4%BA%BA%E8%A2%AB%E5%AB%96%E5%A8%BC%E6%AD%BB%E4%BA%A1%E4%B8%80%E4%BA%8B%E7%9A%84%E8%AF%84%E8%AE%BA/","summary":"\u003cp\u003e您好， 问题「如何看待雷洋在昌平离奇死亡事件？」已被删除，原因是：根据相关法律法规和有关部门通知，该内容不适合在知乎讨论\u003c/p\u003e\n\u003cp\u003e您的回答如下：\u003c/p\u003e\n\u003cp\u003e周老虎是维稳起家，所以搞出n亿维稳经费。而继任的这位，从北京天上人间开始，到东莞大扫荡，可以说，每一步都是踩着小姐和嫖客的身体走上去的。\u003c/p\u003e","title":"对人大硕士雷洋机场接人被嫖娼死亡一事的评论"},{"content":"从外交部那激昂的『无论你是什么国籍，只要在中国出生，就是中国人，就受中国法律约束』，到内部对包括20来岁的女律师在内的异议人士运用煽癫罪，党内用『妄议大政方针』大捧，党外用『社会主义核心价值观』来抹平一切异议，从包子上台以来的种种行为，让所有人都意识到，这个与金三胖类似的二代，即将把中国推向更加靠近朝鲜的地步，而不是人们期待的远离。\n借助穷兵黩武示的大量展示新军事装备、大规模举行军事演习，在各敏感地区制造对立气氛来转移国内矛盾的同时，国内高压的态势却潜移默化的形成。这边，所有地方媒体不再是和谐报道，而是被从根本上剥夺了跨地区报道这一之前少有的可以打破地方保护的媒体监督渠道。另一边，嘴上名义上的依法办事，却越来越多的使用秘密抓捕、口袋罪名公开化，来大肆打压异议人士。\n其实这一切表现，都来自于执政当局内部的不自信。不但他们不再自信自己能够继续执政，他们甚至已经不再自信自己是否能够和平下台。\n经济下行的压力，让退潮后的中国，面临腐败带来的行政低效率和多年被催化畸形的结构调整双方面的不利影响，中国想要跳出这一波经济崩盘的陷井，依靠目前的执政策略，看不出一丝可能。\n这盛世，如你所愿。\n","permalink":"https://www.aeieli.com/2024/06/05/%E5%A4%96%E9%A6%99%E6%B8%AF%E6%8A%93%E4%BA%BA%EF%BC%8C%E5%86%85%E6%8D%95%E6%8A%93%E5%BE%8B%E5%B8%88%EF%BC%8C%E8%BF%99%E4%B8%AA%E5%9B%BD%E5%AE%B6%E8%B5%B0%E5%90%91%E6%9C%80%E9%BB%91%E6%9A%97%E7%9A%84/","summary":"\u003cp\u003e从外交部那激昂的『无论你是什么国籍，只要在中国出生，就是中国人，就受中国法律约束』，到内部对包括20来岁的女律师在内的异议人士运用煽癫罪，党内用『妄议大政方针』大捧，党外用『社会主义核心价值观』来抹平一切异议，从包子上台以来的种种行为，让所有人都意识到，这个与金三胖类似的二代，即将把中国推向更加靠近朝鲜的地步，而不是人们期待的远离。\u003c/p\u003e","title":"外香港抓人，内捕抓律师，这个国家走向最黑暗的时代"},{"content":"早上等红灯，看到了一篇新闻《最倒霉家庭：疫苗和毒奶粉下的双重悲剧》，突然控制不了情绪，趴在方向盘上默默流泪。虽然已经决定要移民，虽然已经在努力要远离这个国家，但这种让人无力的旧闻，配合现在爆发出来的疫苗事件，突然触发了我的泪点。\n也是为人父，也是接受了太多的负面情绪。但是当你生活在一个你无力去改变的国度，每天看着一些怪现象，却无法去做什么阻止的时候，虽然可以选择逃避，但这种罪责，这种。。。\n算了，不写了，没情绪，再哭 一会去。\n","permalink":"https://www.aeieli.com/2024/06/05/%E4%B8%BA%E4%B8%80%E5%88%99%E7%96%AB%E8%8B%97%E5%92%8C%E5%A5%B6%E7%B2%89%E7%9A%84%E6%97%A7%E9%97%BB%E5%93%AD%E6%B3%A3/","summary":"\u003cp\u003e早上等红灯，看到了一篇新闻《\u003ca href=\"http://news.qq.com/a/20100415/000651.htm\"\u003e最倒霉家庭：疫苗和毒奶粉下的双重悲剧\u003c/a\u003e》，突然控制不了情绪，趴在方向盘上默默流泪。虽然已经决定要移民，虽然已经在努力要远离这个国家，但这种让人无力的旧闻，配合现在爆发出来的疫苗事件，突然触发了我的泪点。\u003c/p\u003e\n\u003cp\u003e也是为人父，也是接受了太多的负面情绪。但是当你生活在一个你无力去改变的国度，每天看着一些怪现象，却无法去做什么阻止的时候，虽然可以选择逃避，但这种罪责，这种。。。\u003c/p\u003e","title":"为一则疫苗和奶粉的旧闻哭泣"},{"content":"拖到5号，今天在一个好消息的推动下，才有动力写下年终总结和新年计划。\n回望2015年，最大的成绩拿下了学位论文和各种考试，时隔这么多年，总算了结学位的遗憾。为以后继续求学，也铺平了道路。\n同时，认真读了几本技术书籍，对于自己的技术和工作帮忙明显。\n工作上，虽然没有取得成绩，但幸好工资水平保持了较高的增长，并幸运的获得不少额外的收入，维持了家庭稳定的生活水平，帮助家庭渡过几次变化。\n在新年中，要坚持继续深入学习技术，争取将C和算法更精通，考下中级职称，工作更进一层，迎接自己生活中另一个重要成员的到来。\n读书计划 技术书籍： 认真精读5本书。 人文小说：20-30本的通读量 学习计划 公开课： IT公开课3-5门 TED等： 通听40-50 美剧：5个系列剧集的精听 工作计划 iOS App开发： 完成并上架未完成的几个私人App。 后台开发： 完整开发2-4套不同场景的后台系统。 Android开发：完成2-3个成熟App的开发。 ","permalink":"https://www.aeieli.com/2024/06/05/2016%E5%B9%B4%EF%BC%8C%E6%96%B0%E7%9A%84%E8%B5%B7%E7%82%B9/","summary":"\u003cp\u003e拖到5号，今天在一个好消息的推动下，才有动力写下年终总结和新年计划。\u003c/p\u003e\n\u003cp\u003e回望2015年，最大的成绩拿下了学位论文和各种考试，时隔这么多年，总算了结学位的遗憾。为以后继续求学，也铺平了道路。\u003c/p\u003e","title":"2016年，新的起点"},{"content":"在最近新开的iOS项目中，尝试使用了Autolayer布局，来满足不同屏幕尺寸的适配。这里写一篇在应用过程中的小经验，算是入门的记录。\n定义：Autolayer是一种自动布局技术，类似于网页使用Div排版的方式，抛弃了以前的Frame绝对定位，而是通过控件之间的距离来确定最终显示的效果。\n基本属性 Autolayer将视图间的关系称之constraints(约束), 意为通过一个视图的属性来定义另一视图的属性. 所以使用Autolayer后, 基本可以无视早期重要的Frame属性, 因为在实际运行中, Frame属性会随屏幕大小来动态确定. 对于任一控件，它拥有的Autolayer不外乎这么几种属性，上下左右边距、垂直中心、水平中心、高、宽、高宽比例、比例。 上下左右边距，就是这一控件与其他控件的距离，可以是控件的父视力superView,也可以是附近的视图，还可以是专门用于定位的辅助视图（这个后面会说到）。 垂直中心、水平中心的定义更为简单，就是这一控件处在父视图的中心点所在的位置。 高宽，一般是用来强制定义控件的形状，确保有些控件的大小、比例不会被压缩和改变，确保压缩效果。 比例: 通过定义比例， 来确定两个视图间大小的关系。 例如：1：0.5， 即为前一视图的某一值为后一视图的2倍。 使用 使用Autolayer很简单， 只要在Storyboard中, 通过按住control键, 从一个view A指向另一个view B, 即为指定View A的某项属性与View B的属性相关. 指向Autolayer相关属性时, 可以使用Shift同时指定多重关系. 尽量不要使用系统自动根据storyboard图自定义constraints来定义Autolayer, 那样拉出来的constraints基本无法使用. 一些坑 相对于早前使用Frame等固定数值的视图配置, Autolayer在对大小屏幕的适应上非常方便.但也带来一些不便, 例如动画精确运行问题, 约束过于复杂和易变. 对于需要多个视图间隔相等, 例如要求三个button, 在横向等宽等距间隔相等, 这时候就必须引入空白View位于三个Button中间, 互相确定constraints来实现. 这无形中增加需要管理的View对象. 对于一个复杂视图的Autolayer关系修改将是一个无比头疼的事, 需要一开始就做好规划. ","permalink":"https://www.aeieli.com/2024/06/05/autolayer%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/","summary":"\u003cp\u003e在最近新开的iOS项目中，尝试使用了Autolayer布局，来满足不同屏幕尺寸的适配。这里写一篇在应用过程中的小经验，算是入门的记录。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e定义：Autolayer是一种自动布局技术，类似于网页使用Div排版的方式，抛弃了以前的Frame绝对定位，而是通过控件之间的距离来确定最终显示的效果。\u003c/p\u003e\n\u003c/blockquote\u003e","title":"Autolayer入门指南"},{"content":"升级Xcode 6.2后，遇到了之前安装的插件都无法再使用，但安装的插件再去下载一个新版本再次编译很不现实。只有自己动手解决它了。\n首先Xcode所有的插件都安装在：\n~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 目录中，在Finder中，前往这个目录\n在目录里，就是你目前安装的所有插件，下面就需要我们来手动修改了。\n首先在终端中，使用这个命令，获取新版本的Xcode的UUID版本号\ndefaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID\n右键选择一个插件，选择显示包内容，进入Contents目录，使用文本或其他编译工具，打开Info.plist文件。\n修改key DVTPlugInCompatibilityUUIDs 下的列表，新增一个当前xcode版本的UUID，保存。\nA16FF353-8441-459E-A50C-B071F53F51B7\n这是Xcode 6.2的UUID，如果遇到其他不同的版本号，也同样这样处理就行。\n如此对所有插件的Info.plist进行同样操作，重启Xcode，OK，所有的插件又回来了。\n=========== Update =======\n下面这个脚本， 可以自动将升级后Xcode中所有插件都加入新的UUID。\n#!/bin/bash #获取当前版本Xcode的DVTPlugInCompatibilityUUID UUID=$(defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID) echo Xcode DVTPlugInCompatibilityUUID is $UUID #遍历每一个Xcode插件，将UUID写入插件的兼容列表中 for MyPlugin in ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/* do defaults write \u0026#34;$MyPlugin\u0026#34;/Contents/Info DVTPlugInCompatibilityUUIDs -array-add $UUID echo write DVTPlugInCompatibilityUUID to $MyPlugin succeed! done ","permalink":"https://www.aeieli.com/2024/06/05/xcode-6-2-%E5%8D%87%E7%BA%A7%E5%90%8Eplug%E6%8F%92%E4%BB%B6%E5%A4%B1%E6%95%88%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88/","summary":"\u003cp\u003e升级Xcode 6.2后，遇到了之前安装的插件都无法再使用，但安装的插件再去下载一个新版本再次编译很不现实。只有自己动手解决它了。\u003c/p\u003e\n\u003cp\u003e首先Xcode所有的插件都安装在：\u003c/p\u003e","title":"Xcode 6.2 升级后Plug插件失效解决方案"},{"content":"随着内蒙古自治区政协原副主席、原自治区公安厅厅长赵黎平杀人案被公布，赵黎平杀人的动机所涉及的贪腐背景也被媒体爆出。一个掌管一省公安厅的大佬，居然亲自上阵动手去杀人，这已经足够匪夷所思，但之后不断爆出的案件细节，确更是细思极恐，无一不透露出这个国家掌权者，对法律和规则的漠视，以及私权力无法无天的现实。\n先看赵黎平杀人，作为一个掌管公安系统多年的人，一生都在公安系统沉浮的老官人，在杀人这事上，居然是如此随手而发，思虑不周。先是随便开两枪（居然还没打死），然后又是驾车（官车奥迪）追击，最终在对方已经报警的情况下，依然是将女人亲手杀死。杀完以后，就是纵火抛尸，居然痕迹什么的也没有打扫干净。这种没有任何反侦察手段的行凶方案，要么赵黎平是一个笨蛋，要么赵黎平平时已经完全没有公安人员的素质，还有一个可能，就是他已经自大到完全不需要掩盖。\n无论赵是一个笨蛋，还是完全没有一个合格警察的素质，能做到一省公安老大的位置上，都不能说不是一个笑话。面如果在杀人这种事上，他都不需要去掩盖，那更是体现他的私权已经无法无天到何处地步。\n再看随后媒体报道出的，有关赵黎平之所以下手杀人可能的相关案件：内蒙古自治区政府法律顾问室副主任杜文公款行贿案 。这位前内蒙古副厅级官员，2010年因为80万受贿被抓，在不服上诉后，被追加400万公款去向不明的罪行。就是这400万公款中的130万，涉及了副省级官员赵黎平。杜文从2010年被抓开始，首先是一个地区公安局长冯志明（一手主导呼格吉勒图冤案的专案组组长），可以在审理时直接做他工作，要他扛下所有罪行。而之后，更是由省级公安厅派人，三个人一同做工作让他扛罪，但最终因为条件没谈扰，杜文不同意扛下所有罪名。随后发生的事，首先是2012年杜文在监狱犯病，结果不但警察不来施救，还把他的腿打断了！！！在三个月以后，被检察院要求送医的路上，还被威胁下次还要扭断他的脖子，还拿他的老婆孩子性命威胁。\n在随后的庭审中，杜文与检察院的供词录音，居然神秘的被删除修改。向庭审检察院公诉人递交的录音U盘，因为公诉人【觉得关系不大】，被【丢了】。\n而尤其搞笑的是，被删除的电脑文件，居然还被有关部门给【恢复了】。\n这么一个无法无天的国家，一群无法无天的官员，干着随心所欲的坏事，处处透着不专业和随性，居然就这么堂而皇之的如同闹剧一样上演。这种低劣的手法，说实话，拍成电影都只可能是手撕鬼子级别的生硬，居然在现实中大行其道。\n真是一派盛世之景啊。\n","permalink":"https://www.aeieli.com/2024/06/05/%E5%A5%BD%E5%8F%AF%E6%80%95%E7%9A%84%E5%9B%BD%E5%AE%B6-%E6%9C%89%E6%84%9F%E5%86%85%E8%92%99%E5%8F%A4%E8%87%AA%E6%B2%BB%E5%8C%BA%E6%94%BF%E5%8D%8F%E5%8E%9F%E5%89%AF%E4%B8%BB%E5%B8%AD/","summary":"\u003cp\u003e随着内蒙古自治区政协原副主席、原自治区公安厅厅长赵黎平杀人案被公布，赵黎平杀人的动机所涉及的贪腐背景也被媒体爆出。一个掌管一省公安厅的大佬，居然亲自上阵动手去杀人，这已经足够匪夷所思，但之后不断爆出的案件细节，确更是细思极恐，无一不透露出这个国家掌权者，对法律和规则的漠视，以及私权力无法无天的现实。\u003c/p\u003e","title":"好可怕的国家——有感内蒙古自治区政协原副主席、原自治区公安厅厅长赵黎平杀人案中案"},{"content":"听到了里脊串分享的直播，主讲Autolayout、Mason库、pop等Autolayout约束下的动画、UIStackView等基于视图约束等的相关内容。\n在直播中，一个是手写视图的一个小技巧：\nUIView *view = ({ UIView *view = [UIView new]; view; }); 这种利用匿名函数，来给对象赋值的技巧，在手写视图，进行批量视图创建、初始化和写约束的时候，非常方便，因为被包裹在函数值域内的命名，完全可以不需要修改的赋值给其他对象，而不会导致命名空间冲突。\n在看课的时候，作为一个分享者，他对Autolayout概念的深入理解、概念的整理，相关库和内容的使用，都非常深入。虽然讲课的内容偏入门级一点，但从中能完全感受到对概念原理的理解，对对象所有属性的定义都非常明晰。\n感受最深的，是需要不断学习。\n","permalink":"https://www.aeieli.com/2024/06/05/%E9%87%8C%E8%84%8A%E4%B8%B2autolayout%E5%92%8Cmanson%E5%BA%93%E7%AD%89%E7%9B%B4%E6%92%AD%E8%AF%BE%E5%90%8E%E6%84%9F/","summary":"\u003cp\u003e听到了里脊串分享的直播，主讲Autolayout、Mason库、pop等Autolayout约束下的动画、UIStackView等基于视图约束等的相关内容。\u003c/p\u003e","title":"里脊串Autolayout和Manson库等直播课后感"},{"content":"苹果升级iOS 8.4的时候，居然忘记给Xcode 7.0 beta2添加支持，这真是一个不可思议的错误，不过还好，我们可以借用Xcode 6.4中的iOS 8.4固件解决这个问题。\n首先，Finder菜单，选择［前往］－［前往文件夹］， 输入\n/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 拷贝其中的8.4 (12H141)文件夹，到\n/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/\n目录下，即可让Xcode 7 beta2支持iOS 8.4的设备。\n","permalink":"https://www.aeieli.com/2024/06/05/%E8%AE%A9xcode-7-x%E6%B5%8B%E8%AF%95%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81ios-8-4%E7%9A%84%E6%96%B9%E6%B3%95/","summary":"\u003cp\u003e苹果升级iOS 8.4的时候，居然忘记给Xcode 7.0 beta2添加支持，这真是一个不可思议的错误，不过还好，我们可以借用Xcode 6.4中的iOS 8.4固件解决这个问题。\u003c/p\u003e","title":"让Xcode 7.x测试版本支持iOS 8.4的方法"},{"content":"随着中纪委宣布调查中石油集团总经理，人们『惊讶』地发现，原来中石油集团党组的9名成员，已经有5名成员被先后宣布调查。虽然这些人中，部分还没有进入司法程序，我们还没有办法从法律意义上宣布他们触犯了法律。不过9名党组中，5名成员被调查，无情的揭露了一个大家心知肚明，但一直秘而不宣的『秘密』：贪腐，已经深入这个执政党的肌体，至少已经在领导成员中，占领了大多数。\n虽然党媒和一些无节操的太监文人，仍然在大喊贪污腐败依然是极少部分，但中石油的案例，赤果果的说明，至少在中石油集团内，贪污腐败分子，已经掌握了这个组织的多数权力，虽然还没有达到绝对多数，但仅就投票权来说，5名腐败分子已经可以阻止任何他们希望阻止的决议在这个组织中的执行。\n在中石油这个小环境中，贪污腐败分子能不能达到绝对多数，甚至更多的比例，我们尚不能确认。但超过半数的党组成员被抓，充分说明，反腐是反对少数这个命题是不成立的。反腐，明显是少数官员，与大多数腐败官员的斗争。如果没有外界和内部民主压力，显然腐败分子可以用手中的权力，肆无忌惮的实现自己想要的任何欲望。\n我们不知道，现在那些还敢发表文章宣称，目前的体制依然是最优秀的，敢断定贪污腐败分子依然是少数的结论是从何得出，他们发表言论的居心，是粉过饰非，还是试图保护大多数贪污腐败的成员不被追究。但从中石油这个案例就可以看出，相要反腐成功，绝不可能仅仅依赖对付被打倒这一派系中的贪污分子就能实现。\n不过，说这些有啥用呢，掩耳盗铃者，非怕他人听见，而担心自己被吓死。\nPS：祝贺本域名被GFW封锁。\n","permalink":"https://www.aeieli.com/2024/06/05/%E7%83%AD%E7%83%88%E7%A5%9D%E8%B4%BA%E4%B8%AD%E7%9F%B3%E6%B2%B9%E5%85%9A%E7%BB%84%E8%B6%85%E5%8D%8A%E6%95%B0%E8%B4%AA%E8%85%90/","summary":"\u003cp\u003e随着中纪委宣布调查中石油集团总经理，人们『惊讶』地发现，原来中石油集团党组的9名成员，已经有5名成员被先后宣布调查。虽然这些人中，部分还没有进入司法程序，我们还没有办法从法律意义上宣布他们触犯了法律。不过9名党组中，5名成员被调查，无情的揭露了一个大家心知肚明，但一直秘而不宣的『秘密』：贪腐，已经深入这个执政党的肌体，至少已经在领导成员中，占领了大多数。\u003c/p\u003e","title":"热烈祝贺中石油党组超半数贪腐"},{"content":"不知道是什么原因，苹果出人意料的在OS X 10.11的beta2开始，禁止Xcode 6.x版本的运行，只允许Xcode 7.0测试版使用，但苹果又禁止使用测试版Xcode向AppStore提交应用，这让身为开发者的我非常难受。不过还好，搜索一翻，还是能找到解决方案的，\n在终端中，运行：\n/Applications/Xcode.app/Contents/MacOS/Xcode \u0026lt;/dev/null \u0026amp;\u0026gt;/dev/null \u0026amp;\n即可强行启动Xcode 6.x，这样即可进行发布等活动。\n","permalink":"https://www.aeieli.com/2024/06/05/%E5%9C%A8os-x-10-11%E4%B8%AD%E8%BF%90%E8%A1%8Cxcode-6-x-%E7%9A%84%E6%96%B9%E6%B3%95/","summary":"\u003cp\u003e不知道是什么原因，苹果出人意料的在OS X 10.11的beta2开始，禁止Xcode 6.x版本的运行，只允许Xcode 7.0测试版使用，但苹果又禁止使用测试版Xcode向AppStore提交应用，这让身为开发者的我非常难受。不过还好，搜索一翻，还是能找到解决方案的，\u003c/p\u003e","title":"在OS X 10.11中运行Xcode 6.x 的方法"},{"content":"作为程序员，最恨的『发明创造』，当属中共发明的GFW防火墙，这个不亚于明清闭关锁国的祸国殃民的政策，不但阻止正常人类访问互联网，还拉低了中国的平均智商，唯一的好处，也只有方便土共洗脑传销宣传系统。\n而最近这个掌管GFW的中国宣传系统的人事变动，也让人们看到中共这个核心领域的选人用人办事风格。最近新任中宣部副部长崔玉英，翻开个人简历，不觉得让人啼笑皆非。这位大官人，中共党校进修出来的水学历，拿着有高级经济师证书，第一学历是牧学院林学系，从业时间最长的是保险业。\n个人简历\n正是这样一位毫无新闻做作业经历的人，从西藏政协副主席，跳行到宣传部门，一路高升，进调中央，掌管中共中央对外宣传、国务院的新闻办公室。难怪都说中国梦，感情让你相信中国梦的方法，来源于保险业的销售宣传手法。对于中国梦，你只有不断的听宣讲，派一堆销售代表给你上课洗脑，至于最终保险不保险，那可与它无关。\n再联想到之前一位拿着马克思研究的专家，调去掌管中国的文艺界。\n未来中国的文化，真可谓是传销洗脑文化之大成了。\n","permalink":"https://www.aeieli.com/2024/06/05/%E4%B8%AD%E5%AE%A3%E9%83%A8%E4%BA%BA%E4%BA%8B%E5%8F%98%E6%9B%B4%E7%9C%8B%E4%B8%AD%E5%85%B1%E5%AE%A3%E4%BC%A0%E7%B3%BB%E7%BB%9F%E6%9C%AA%E6%9D%A5%E8%B7%AF%E7%BA%BF/","summary":"\u003cp\u003e作为程序员，最恨的『发明创造』，当属中共发明的GFW防火墙，这个不亚于明清闭关锁国的祸国殃民的政策，不但阻止正常人类访问互联网，还拉低了中国的平均智商，唯一的好处，也只有方便土共洗脑传销宣传系统。\u003c/p\u003e","title":"中宣部人事变更看中共宣传系统未来路线"},{"content":"Gitbook是一款非常优秀的Markdown编辑、写作工具。\nGitbook相对于其他Markdown工具来说，最大的创新在于提供了章节管理，可以方便的按章节组织书本的内容。\n同时Gitbook提供的在线发布、销售模式，可以让人非常简单的生成电子书.epub和.pdf格式。\n类似Git的版本控制，更方便人们使用。\n在完成一段时间的试用后，我会尝试写一个使用指南。\n这里需要提醒的是，在gitbook目前的版本中，不支持用中文保存的文件名（mac版本），如果你在创建章节时，使用了中文保存.md文件,gitbook不会提示任何错误，但它实际上没有成功生成文件，其文件组织文件里保存的是[.md]空文件名，这会导致你在当前页面所有的编辑和写作都不会被保存，关闭的时候都会丢失。即使你提交也无法保存编辑的内容。\n","permalink":"https://www.aeieli.com/2024/06/05/gitbook%E4%BD%BF%E7%94%A8%E6%8F%90%E9%86%92/","summary":"\u003cp\u003e\u003ca href=\"https://www.gitbook.com\"\u003eGitbook\u003c/a\u003e是一款非常优秀的Markdown编辑、写作工具。\u003c/p\u003e\n\u003cp\u003eGitbook相对于其他Markdown工具来说，最大的创新在于提供了章节管理，可以方便的按章节组织书本的内容。\u003c/p\u003e\n\u003cp\u003e同时Gitbook提供的在线发布、销售模式，可以让人非常简单的生成电子书.epub和.pdf格式。\u003c/p\u003e","title":"Gitbook使用提醒"},{"content":" If you want build myself web blogger need a lot about developer \u0026amp; Soft skill. but now we have a powerful tools what can we easily build wordpress website.Juse need two line command with vps.\nFirst, you need buy a Linux based VPS web hosting service (VPS) form online service store. like Amazon Web Services (AWS) / Microsoft Azure etc.\nSecond, ssh on you server user this command.\n//install docker sudo yum install docker-io //start docker sudo service docker start //install mysql docker run --name mysql_1 -e MYSQL_ROOT_PASSWORD=test_test -d mysql //install wordpress docker run --name wordpress_1 --link mysql_1:mysql -p 80:80 -d wordpress OK, Wordpress just OK!\nDocker容器果然是建站利器，以往的配置等全省略了。只需要简单的三行命令即可在主机上建立一个全功能的站点，维护简单方便。\n技术的先进性，带来门槛的无比降低。\nHello Word!\n","permalink":"https://www.aeieli.com/2024/06/05/hello-world-2/","summary":"\u003cblockquote\u003e\n\u003cp\u003eIf you want build myself web blogger need a lot about developer \u0026amp; Soft skill. but now we have a powerful tools what can we easily build wordpress website.Juse need two line command with vps.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eFirst, you need buy a Linux based VPS web hosting service (VPS) form online service store. like \u003ca href=\"http://aws.amazon.com/\"\u003eAmazon Web Services (AWS)\u003c/a\u003e / \u003ca href=\"http://azure.microsoft.com/\"\u003eMicrosoft Azure\u003c/a\u003e etc.\u003c/p\u003e\n\u003cp\u003eSecond, ssh on you server user this command.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e//install docker\nsudo yum install docker-io\n//start docker\nsudo service docker start\n\n//install mysql \ndocker run --name mysql_1 -e MYSQL_ROOT_PASSWORD=test_test  -d  mysql\n//install wordpress\ndocker run --name wordpress_1 --link mysql_1:mysql -p 80:80 -d wordpress\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eOK, Wordpress just OK!\u003c/p\u003e","title":"Hello Word! A Simple two line command build Wordpress."},{"content":" 苹果已经要求所有提交AppStore的新应用必须支持arm64位，而升级更新的App，也必须在5月份之前完成对64位的支持。所以从现在开始，就将64位当做开发的默认设置，是一个良好的习惯。\n升级64位需要的准备 以下是App需要进行64位支持时，要进行的准备。\n- 检查自己所有用到的第三方库有没有64位支持\n- 检查对于所有64位和32位会出现问题的变量类型\n- App的设置\n- 其他\n具体的可以参考以下资料：\n1. 苹果官方的64位兼容指南\n2. iOS7:如何为iPhone5s编译64位应用\n3. iOS工程如何支持64-bit\n4. sunnyxx blog: 64-bit Tips\n升级64位会遇到的坑 第三方库过老：遇到这种情况，我只能说，尽量放弃这些库吧。对于一些从C++等语言编译出来的库，你也可以尝试自己编译支持64位版本的库 第三方库升级Bug：特别是国产的第三方SDK，大概是国产人力资源便宜，导致升级频繁而没有规划，于是你升级一个版本，可能会发现新的版本升级用的时间，比你重新导入一个新库的成本还高。这方面，比较有代表性的，就是支付宝的iOS SDK。后面我会专门列一下我在升级支付宝SDK时遇到的Bug。 对变量替换时，要注意分清OC和CC++库。我在升级64位时，采用了正则搜索替换int到NSInterger类型，这就导致main主函数的int类型被替换，所以还要再换回来。 支付宝新版iOS SDK（支持64位）升级问题 单独写支付宝，主要是我在升级64位应用的时候，在支付宝SDK升级中遇到问题最大。 问题列表\n1. framework统一打包，造成所有使用支付宝的地方要重新导入\n2. 将framework导入工程之后，要手动在search path中添加目录。\n3. 如果是在本地进行的RSA验证加密，需要在将rsa等c语言文件导入的时候，添加_#import \u0026lt;Foundation/Foundation.h\u0026gt;_\n4. 订单返回值回调方法和返回数据格式改变，需要另写解析方法\n","permalink":"https://www.aeieli.com/2024/06/05/ios-app-64%E4%BD%8D%E5%85%BC%E5%AE%B9%E5%8D%87%E7%BA%A7%E6%8C%87%E5%8D%97/","summary":"\u003cblockquote\u003e\n\u003cp\u003e苹果已经要求所有提交AppStore的新应用必须支持arm64位，而升级更新的App，也必须在5月份之前完成对64位的支持。所以从现在开始，就将64位当做开发的默认设置，是一个良好的习惯。\u003c/p\u003e\n\u003c/blockquote\u003e","title":"iOS App 64位兼容升级指南"},{"content":"在使用 opencv2 framework download url 下载opencv2库，集成时，遇到了ios framework not found opencv2 错误.\n查找网上资料，只是说将库重新导入即可。但显然我的导入步骤是正确的，但始终解决不了问题。\n后来发现，在下载时，不能选择使用默认framework后缀名，而是要使用.zip后缀名，然后重解压成framework文件，再导入，即可解决这一错误。\n下载时提示时习惯性选择了默认的『使用.framework』做为后缀\n将后缀改为.zip\n解压后这种点到farmwork可以看到内部目录的时候，才可以拖到xcode里集成使用。否则会出现 framework not found opencv2 编译错误\n","permalink":"https://www.aeieli.com/2024/06/05/ios-framework-not-found-opencv2-xcode6-error-code-1/","summary":"\u003cp\u003e在使用 \u003ca href=\"http://opencv.org/downloads.html\"\u003eopencv2 framework download url\u003c/a\u003e 下载opencv2库，集成时，遇到了ios framework not found opencv2 错误.\u003c/p\u003e\n\u003cp\u003e查找网上资料，只是说将库重新导入即可。但显然我的导入步骤是正确的，但始终解决不了问题。\u003c/p\u003e","title":"ios framework not found opencv2 (xcode6) error code -1"},{"content":" 最近感觉之看草草看过的《Effective Objective-C 2.0》，有必要再重读一遍，以打牢自己并不靠谱的基础知识。\nPS：为了实践，以后坚持一本书读完再读其他的原则。同一时期，只读一本书。\n第一章 Tip1： Objective C与C++最大的不同，在于函数的调用方式上。C++使用的是虚函数表，在运行时查找函数来调用方法。而OC是使用消息机制，在运行时，通过发送消息来实现函数的调用。所以不存在方法，而都是消息。\nObjective C是基于C的扩展。所以，OC对象，带*的，都是在Stack上的指针，指向Heap中的实际分配内容。\nCGRect是C语言的结构体，与Int等对象一样，直接在Stack上。不需要分配和释放内存。\nTip2： 过多引入.h头文件中，会增加编译时间。\nTip3： 字面量语法，除字符串外，所创建的对象，必须是Foundation框架中。\nTip4： 用static const NSTimeInterval kAnmationDuration = 0.3;这种变量定义，替代#define这种预处理方法。\nstatic const变量定义，有类型、有适用范围，更易于后期维护。同时，在编译时，与Define一样，会将所有调用此变量的直接用值替换，而不会在运行时修改。\n而如下常量定义，会将该常量放入global symbol table(全局符号表）中，以供编译单元之外的全局调用。\n//Define in header file extern NSString *const EOCStringConstant; //In the implementation file NSString *const EOCStringConstant = @\u0026#34;VALUE\u0026#34;; Tip5： enum枚举时，使用\u0026lt;\u0026lt; i位移方法，可以实现|按位或，来实现多种枚举值的并列判断。\n对于enum枚举类型使用switch时，最好不要加default分支，这样编译器可以提醒是否遍历所有可能的状态。\n第二章 Tip6： 理解（property）声明属性 @property 变量需要按指定命名格式设置存取方法（getset）,Property声明，让编译器自动完成设置get和set方法，以及定义实例变量名的设置：\n.h 实现文件中 @interface 类名：父类{ 变量类型 变量名； } -(self *)变量名; -(void)变量名:(id)值； .m 中 @synthesize 变量名 = _变量名 以上定义相当于 @property 变量类型 变量名； OC采用将实例变量定义为一种专门存储变量实际内存地址指针的运行期变量，交给类对象（class object）在运行期管理，而编译前，变量定义的变化，不会导致内存地址变动，而拉长编译时间（想想C++工程的编译时间吧）\n使用@dynamic声明，可以要求不实现自动创建存取方法和实例变量，而是由程序在运行期动态创建存取方法。（一些极特殊场景下会用到，比如NSManagedObject类及子类，其数据来自后端数据库）\n属性声明attribute 在@property后，可以使用一些特殊的声明，来决定变量的一些性质。\n原子性（atomicity） atomic | nonatomic atomic : 原子性，系统其他部分无法观察其中间步骤生成的临时结果，只能看到操作前和操作后的结果。Mac开发中，多数使用atomic。 nonatomic ：非原子性， iOS基本上全部使用这一属性。因为使用原子性对系统性能开销较大，同时它也无法完全保证线程安全，仍然必须加锁才行。 内存管理 assign | strong | weak | unsafe_unretained | copy assign: 简单类型，Int等。存放在栈中，无需内存管理的变量。 strong: 强类型对象，有retain 和release 的内存计数加减动作。 weak: 弱引用对象，不会引用计数加1. 当指向的对象计数归零时，weak对象会被指向nil unsafe_unretained: 非安全弱引用对象，弱引用，但当指向的对象计数归零时，unsafe_unretained对象不会自动指向nil copy: 创建copy：适合NSString之类拥有NSMutable对象的可变子类型的属性，防止指向的内存地址在变量不知情的情况下，被其他同样指向这一地址的可变对象修改。 自定义存取方法： 一般用来指定BOOL类型的is前缀等情况的指定读取方法名：\n@property (nonatomic, getter=isOn) BOOL on; Tip7 访问实例变量 大多数情况下，使用_变量名直接读取实例变量，而通过属性（点语法，或者[类名 变量sett方法名]）来设置/修改变量。 直接访问和通过属性访问的区别：\n- 直接读取变量，不经过OC的方法派发机制（method dispatch），速度更快。\n- 直接读取变量，绕开了设置方法，不会引起copy等属性的变量拷贝新值等损耗。但在修改时，失去了内存管理的意义。\n- 直接读取变量，不会触发KVO通知。此特质需要注意。\n- 直接读取变量，不会走set/get方法，所以也没有办法打断点，来调试程序。\n在初始化方法中（init等），总应使用直接访问实例变量，而不是使用属性来访问。防止子类覆写(voerride)父类set/get方法，导致初始化失败。\n如果使用了惰性初始化（lazy initalization）时，必须使用属性来存取变量。\n-(id)变量名{ if(_变量名）{ _变量名 = [变量类型 new]; } return _变量名; } Tip8 对象相等比较 ==是比较指针本身，不比较其所指对象。\nNSObject中，有两种比较方法：\n-(BOOL)isEqual:(id)object; -(NSUInteger)hash; 以上方法，当且仅当其指针值完全相等，这两个对象才完全相等。 同时，当isEqual方法相等时，hash值肯定相等，但当hash值相等，isEqual未必相等。\n-(NSUInteger)hash{ return 1337;//这种返回固定Hash值是合法的，但它会引起在集合类里（NSArray等）的性能问题，因为这些集合类会将不同hash值分散保存，以优化存取性能，如多个对象hash值完全一样，则会大幅降低存取性能。 } //标准hash实现方法，性能与碰撞率折中方案，即能保证较高性能，又避免了hash碰撞的机率。 -(NSUInteger)hash{ NSUInteger id1hash = [_id1 hash]; NSUInteger id2hash = [_id2 hash]; NSUInteger int1hash = _int1; return id1hash ^ id2hash ^ int1hash; } PS： 对于集合对象中的可变元素，在放入集合后，改变其值时，不能再改变其hash值，否则会导致【错误的装箱】问题。\nTip9 类族（class cluster）/类簇 工厂方法的实现方式，超类定义接口，子类实现，调用者不用关心具体由那个子类实现。 类族的[id class]方法，返回的是子类方法，所以不能用[id class] == [类族 class]来判断，而要用[id isKindOfClass:[类族 class]]来判断 在没有源代码，为类族新建子类时（类似NSArray），需要认真阅读文档：实现自己的数据存储方法，覆写需要覆写的方法。 Tip10 关联对象（Associated Object） 一种非继承的方法，将两个对象绑定在一起。\n按指定policy内存管理策略，绑定Object和Value： void objc_setAssocaiatedObject(id object, void *key, id value, objc_AssocaiationPolicy policy)\n获取和删除绑定对象：\nid objc_getAssocaiatedObjects(id Object) void objc_removeAssociatedOjbects(id Object) 需要导入runtime.h\n只有在其它方案不行时，才采用这种方案。\nDemo：\n#import \u0026lt;objc/runtime.h\u0026gt; static void *EOCMyAlertViewKey = \u0026#34;EOCMyAlertViewKey\u0026#34;; -(void)setAlertView{ 创建Alert对象 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@\u0026#34;Test\u0026#34; message:@\u0026#34;This is Test Alert\u0026#34; delegate:self cancelButtonTitle:@\u0026#34;cancel\u0026#34; othersButtonTitle:[@\u0026#34;test1\u0026#34;,@\u0026#34;test2\u0026#34;,@\u0026#34;test3\u0026#34;,nil]]; 创建一个Block来处理 void (^block)(NSInteger) = ^(NSInteger buttonIndex){ switch (buttonIndex){ case 0:{ [self doCancel]; } break; case 1:{ [self doTest1]; } break; case 2:{ [self doTest2]; } break; case 3:{ [self doTest3]; } break; default: break; } } 魔法开始 objc_AccociatedObject(alert, EOCMyAlertViewKey , block , BJC_ACCOCIATION_COPY); show alert [alert show]; } -(void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 获取绑定对象 void (^runBlock)(NSInteger) = objc_getAccociatedObject(alertView, EOCMyAlertViewKey); runBlock(buttonIndex); } 优点：将逻辑与实现放在一起，同时不需要子类继承等耦合的情况。更易读和维护。 缺点：只有在关联的时候才能定义内存管理方法，与类定义无关，只能预先设定，极易造成内存强引用。 Tip11 理解objc_msgSend 消息有name和selector两种\n向对象发送消息并接收返回 id returnValue = [someObject messageName:parameter]; /*\u0026lt;** 其中，someObject是receiver, messageName是 Selector */ 等价于C语言的 id returnValu = objc_msgSend(someObject,@select(messageName),parameter); 消息派发的路径： ojbc_msgSend 首先寻找接收者（receiver）的list of methods(方法列表），找到即跳转到方法代码实现。如果没有找到，就沿继承体系向上查找父类list of methods。如最终找不到，就执行message forwarding消息转发操作。\nobjc_msgSend会将方法列表匹配结果缓存在fast map（快速映射表）中，以提高查找效率。其带来的性能损失并不明显，但还是会比静态绑定函数调用（statically bound function call）操作要耗时。\n在某些edge case情况下，会用特殊其他的objc_msgaSend函数来处理，如结构体用objc_msgSend_stret(在cpu寄存器能容纳返回的结构体时）、浮点数用objc_msgSend_fqret、 给超类发消息为objc_msgSendSuper等等\nTip12 消息转发机制 ?对象在接收到无法解读的消息之后会发什么情况？\n首先：询问receiver，是否有动态添加方法，来处理未知消息（unknown selector），称之为动态方法解析 （dynamic method resolution） 之后，进入full forwarding mechanism(完整消息转发机制），请求接收者以其他手段来处理消息相关方法调用。 查找有没有备用接收者(replacement receiver)能够接收此消息，如有，正常转发。 最后，运行期的所消息相关细节都被封装到NSInvocation对象中，令receiver处理这个异常消息。 再不处理，则崩溃。 动态方法解析 实例方法，转发给： +(BOOL)resolveInstanceMethod:(SEL)selector; 类方法（+号方法），转发给 +(BOOL)resolveClassMethod:(SEL)selector; 常用来实现@dynamic属性，在运行期时确定变量的存取方法； Tip13 Method swizzling 方法调配 OC的动态运行机制，可以实现让指定方法名对应的函数指针，在运行期被替换、改变。\n主要实现方法：\n获取映射表中的方法 Method m1 = class_getInstanceMethod([className],@selector(MethodName)); 交换映射表中两个已经存在的方法 void method_exchangeImplementations(Method m1, Method m2) 一般来说，只有调试程序的时候才需要在运行期修改方法实现，不宜滥用。 Tip14 理解类对象 所有Objective对象实例都是指针，声明时体现为* id对象本身就是指针，所以声明时不需要加* 声明时指定类型，是帮助编译器识别类型，并给出警告。 //id类型的定义 typedef struct objc_object { Class isa; } *id; //Class对象定义 typedef struct objc_class *Class; struct objc_class{ Class isa; Class super_class; const char *name; long version; long info; long instance_size; struct objc_iva_list *ivars; struct objc_method_list **methodLists; struct objc_cache *cache; struct objc_protocol_list *protocols; }; isMemberOfClass： 查询是否指定类的实例， isKindOfClass：查询是否是指定类及其派生类的实例。 第三章： 接口与API设计 Tip15： 前缀命名避免命名空间冲突 Apple本身保留了2个字母的前缀命名权，所以应以最少3个字母的前缀命名 对C语言函数加上前缀，防止全局命名冲突。 SDK再引入的第三方库，加上自己的命名，以防止版本冲突和其他SDK引用同名库导致的冲突。 Tip16： 使用designated initializer 基础初始化 各种类型的初始化指向一个基础初始化方法 初始化的调用链要完整 子类提供了新的初始化方法后，在要子类中覆写超类的初始化方法 Tip17：实现description方法便于调试 NSLog对象时，会调用类的description方法，要求对象输出描述文字\n另外有debugDescription方法，可以输入只在调试模式下才输出的日志（NSLog默认不输出，控制台打印输出）\nTip18: 尽量使用不可变对象 可变对象放入Set等collection后，又改变其内容，很容易破坏set的内部结构 不实现setter方法的只读属性，尽量也声明内存管理属性，方便扩展。 只读声明，在对象外部，依然能使用KVC设置属性值。 对于可变set，可以在对象内部copy一份可变set变量供修改，对外部则提供一个readonly的只读不可变set接口。 Tip19：使用清晰协调的全名方式 尽量清晰简洁的完整描述 适应OC的语言风格，并乐于使用它 带返回值的方法，首词最好是返回值类型，除非前面还有类型修饰词。取方法一般不需要，因为其属性命名应该足以反映其类型。 参数前面体现出参数的类型 BOOL类型变量的get读方法，最好加is或者has之类的前缀。 get前缀的读方法，应该是返回值被接收者保存的方法。 方法起名风格与当前框架、代码相适应。 Tip20：私有方法加前缀 公开方法修改名称，所有调用者都需要修改 私有方法只要修改本类内部代码即可。 尽量不要使用_前缀当私有方法，因为这是苹果默认系统级私有方法前缀，可能会导致覆写父类的私有方法。 Tip21： OC错误模型 OC异常很难做到内存安全，所以通常做法是只有在极小可能下抛出异常，一旦异常，程序应该退出，而不恢复现场。 只有致命错误（fatal error），才抛出异常。nonfatal error时，返回nil/0，或者使用NSError NSError对象包含： Error domain :错误范围，通常用一个特有全局变量定义。 Error Code: 采用enum来定义的错误代码。 User info: 额外的错误信息。 非致命错误，通过代理或其他方法，返回给调用者，由调用者来决定是否处理错误。 Tip22： NSCopying NSZone是历史开发时有内存分区的概念，目前不再需要。 首先声明类遵守NSCopying协议 @interface AELClassName : NSObject \u0026lt;NSCopying\u0026gt; @end @implementation AELClassName 实现Copy方法 -(id)copyWithZone:(NSZone *)zone{ AELClassName *copy = [[[self class] allocWithZone:zone] initwWith...]; return copy; } NSCopy时，对于可变set对象，需要copy一份。\n不可变set，可以指向同一对象，不需要copy。\nNSMutableCopying协议供有可变类、不可变类区分的父类实现可变子类时实现。此时：\n可变对像调用[mutableClass copy]方法时，返回的是不可变对象。 不可变对象调用[class mutableCopy]方法时，返回的是可变对象。 大多数情况下，拷贝执行的都是浅拷贝，只有在必要的情况下，才需要实现深拷贝方法：-(id)initWithSet:(NSArray *)array copyItems:(BOOL)copyItem\n第四章 delegate代理与Category扩展 Tip23：通过代理与数据源（data sourse）进行通信 Delegate代理模式即是定义标准接口，要求实现这一代理的对象，实现这组接口，从而在运行期向代理对象发送代理消息。\nDelegate定义的接口，即为@protocol协议\nDelegate对象一定要是weak，防止循环引用\nTip24： 尽量将类子类化 将复杂的数据类，尽量抽象成为基本属性类，可以尽可能的子类化 Tip25: Category使用时记得加前缀 加前缀的目的，就是为了防止命名冲突。 多个Category如果同时修改某一方法，就会产生多次覆写。 Tip26： Category不要加属性（变量） Category扩展要实现变量，很多时候需要声明@dynamic变量，并在运行期提供存取方法。 category中添加的变量，很容易出现内存管理问题，并破坏了类的完整性，不易于维护。 Tip27 在.m文件中实现私有类和变量 将私有类和私有变量的定义，放在.m文件中，不要在.h文件中公开。 这种定义只是防止别人偷窥，但无法防止别人调用。因为消息机制和运行期的问题。 在OC和C++混写时，将C++实现在.m文件中，可以保持对外公开的接口均一致为OC状态。 可以将public中的只读变量，在.m文件中重新声明为可写变量，可以方便管理数据。但要注意的是，外部观察者读取的同时，内部写入数据，可能引起竞争条件（rece condition），需要加锁或其他同步方案来解决。 Tip28： id匿名实现方法 不关心id的具体类型，只要求对象实现协议 不需要关心具体实现是什么类，只知道匿名对象可以实现指定的协议方法，封装了实现细节，又避开了OC只能单继承的缺点。 第五章 内存管理 Tip29： 内存引用计数 retain +1 alloc +1 copy +1 release -1 对象引用计数归零后，deallocated后，会进入avaiable pool(可用内存池），只有在覆写内存后，原对象才真正消失。 release后，将对象=nil，可以清空指针，防止调用无效对象。 -(void)setVaild:(id)vaild{ [vaild retain]; [_vaild release]; _vaild = vaild; } autorelease会下一event loop里对retinaCount -1，可能会更高。 autorelease适合需要返回对象时，将返回对象放到循环池内， 引用计数解决不了循环引用的问题（retain cycle），需要weak或强制置空的方式来处理。 使用newcopyallocmutableCopy开头命名的方法或对象，会自动导致强引用。 ARC只管理OC对象，coreFoundation等对象仍然要手动调用CFRetain/CFRelease来释放。 Tip31: dealloc方法 不要自己调用dealloc方法 大内容，在内存吃紧时，手动清理，不要依赖dealloc方法释放。 Tip32： 异常处理的内存安全 try如果在没有release时抛出异常，catch里无法得知强引用对象。 在MRC时，可以将release语句，放到@finally块中释放内存，但ARC无法这么处理。 使用-fojbc-arc-exceptions标签，可以在ARC时打开MRC的@finally处理异常的方式，但应该只在C++兼容模式时打开这一功能，减少性能损耗代价。 Tip33：避免循环引用 垃圾回收机制可以处理循环引用，但Mac在10.8之后不支持，iOS从来不支持。 弱引用可以解决这一问题，但弱引用只是不持有对象，但对象被强引用对象释放后，弱引用者再发消息，会崩溃。 weak可以在强引用对象被释放后，将弱引用对象=nil，但如果不处理，依然会有逻辑问题。 Tip34: 自动释放池改进内存管理 @autoreleasepool可以控制内存释放的范围，减少循环等批量代码块产生的变量堆积 @autoreleasepool类似于stack结构，入池相当于入栈，释放相当于出栈。 Tip35：僵尸对象帮助调试 打开Zombie Object调试功能后，在调试运行时，会将内存回收对象放入特殊的Zombie对象池中，当zombie对象收到消息，会崩溃并提示zombie具体对象。 Zombie对象不会被覆写,确保它与内存回收时一致 @try-@catch的捕获异常的方法，最大的问题在于，捕获异常时，无法处理内存引用计数问题释放。 Tip36：不要管retainCount计数 -无论是ARC还是MRC，retianCount都无用\n第六章 block和GCD block：闭包，可以将代码块当做对象传递，并保留代码访问作用域内的变量功能。 GCD：grand Central Dispatch，提供对于线程的基于\u0026rsquo;派发队列\u0026rsquo;的抽象。 Tip37: 理解block 技术上说，block基于C语言。所以C、OC、C++都可以调用 int addtional = 5; __block NSInteger changeAddtional = 10; int (^blcokName) (int a, int b) = ^(int a, int b){ // addtional = 15; \u0026lt;\u0026lt; error,不能修改非__block修饰的变量。 changeAddtional = 15; return a+b+addtional+changeAddtional; } int add = blockName(3,5); block可以捕获定义block时的有效变量，并读取。 只有使用**__block**修饰的变量，才允许可以在blcok内部修改。 如果self对象中包含的对象持有block，而在此block里，又引用了self，那就会导致循环引用 block捕获的对象，会拷贝一份指针到block对象域中 block定义时，会保存在栈中，只有执行[^{} copy]时，才会移到堆中。移到堆中的block，具有引用计数功能，需要进行内存管理。 block如果没有需要捕获变量，会被定义为gloal block，可以声明在全局内存中，也不会有copy操作和内存管理的必要。 Tip38: 为block创建typedef //定义 typedef 返回值(^BlockName) (参数); //使用时 BlockName block = ^(){ }; //普通函数使用block参数 -(void)startWithCompletionHandler:(void(^)(NSData *date, NSError *error))completion; //更佳使用方法： typedef void(^EOCCompletionHandler)(NSDate *date, NSError *error); -(void)startWithCompletionHandler:(EOCCompletionHandler)completion; 给block命名，使代码更易读，对于将block当做参数传递的函数，更容易维护和变更。 Tip39： 在Handler使用block替代Delegate block让回调更直观，代码逻辑更清晰 block回调将错误和正确返回同时处理的优点是更容易处理特殊情况（正确下载一半错误、正确的时候也会出现错误的情况（下载数据过短等）），缺点是返回处理代码会过长，逻辑复杂。 Tip40: 注意block产生的循环引用 注意在block块引用持有block的对象（一般为self对象） 使用完后，可以手动在block块里释放持有block的对象 更好的方式，是AFNetworing采用的__weak + __strong方案 Tip41： 少用锁，多用派发队列 同步锁的两种形式： @synchronied(self){} //同步块， [[NSLock all]init]//同步锁 锁的系统开销比较大，还可能会导致死锁问题出现。 使用GCD的串行同步队列替代锁机制 _syncQueue = dispatch_queue_create(\u0026#34;com.aeieli.syncQueue\u0026#34;,NULL); -(NSString *)someString{ __block NSString *localSomeString; dispatch_sync(_syncQueue,^{ localsSomeString = _someString; }); } -(void)setSomeString:(NSString*)someString{ dispatch_sync(_syncQueue,^{ _someString = someString; }); } 对于写入异步方法，可以使用barrier来实现单独执行写操作。 Tips 42: 用GCD替换performSelector方法 使用performSelector来调用方法，最大的问题是ARC无法判断如何进行内存管理。\nperformSelector无法使用整型、结构体等参数，也无法返回这些变量，只能返回指针类型\n使用dispatch_after来替代延后执行\nTip43： GCD、NSOpeationQueue的使用场景 GCD是纯C的API，NSOperation是OC对象，底层实现现在基于GCD NSOperation的优势： 可以取消：NSOpertaion队列被执行前，是可以cancel的，但执行后，与GCD一样无法取消 操作队列可以有依赖 含有适合KVO观察的属性 可以指定具体任务的优先级 基于OC的NSOperation，可以重载和继承 Tip44: Dispatch_group的使用 dispatch_group采用类似引用计数的方式，使用dispatch_group_enter(dispatch_group_t group); 将任务派发进组，使用dispatch_group_leave(dispatch_group_t group)；离开组\ndispatch_group有一系列的通知机制：dispatch_group_wait、dispatch_group_notify等。\nGCD会自动创建新线程或复用旧线程，所以使用异步并发队列，可以提高系统性能利用率。\nTip45: dispatch_once 保证任务的一次运行 dispatch_once 依赖于dispatch_once_t标识，此标识必须对于只需执行一次的块来说，每次调用的标识必须完全相同，并与其他标识不同。 Tip46: 不要使用dispatch_get_current_queue 使用dispatch_get_current_queue时，返回的是当前队列，无法反映出父队列、队列嵌套的关系，所以不能保证检测出的队列与实际执行的队列标签一致\n使用dispatch_queue_set_specific的队列持有数据模式，来解决队列间的数据持有问题。\n第7章 系统框架 Tip47： 熟悉系统框架 系统框架都为动态库（dynamic library），iOS第三方框架为静态库(static library)\n熟悉系统框架，特别是纯C写出的框架：CoreGraphics、CoreText、CFNetwork等\nTip48： 多用块枚举 几种遍历方式： for 循环、 NSEnumerator遍历、for\u0026hellip; in枚举、 enumerateObjectsUserBlock:块枚举\n块枚举的优势：\n在枚举时直接可以获得下标、键值等信息。 枚举时可以指定获取的对方，避免类型转换操作 可以使用NSEnumberationOptions指定遍历模式是按位。 可以指定开启并发提高速度 Tip49: 使用too-free bridging转换Foundation与CoreFoundation类 __bridge ARC仍然具备OC对象所有权， __bridge_retained 将会把所有权交给CF等C语言对象，由C语言对象负责管理内存。 __bridge_transfer是反向将C语言对象转换成OC对象 使用C语言创建的一些Collection对象，可以实现一些非标准的OC对象功能，特别是在内存管理和操作上，具有相对ARC更大的自主权。 Tip50: 用NSCache来实现缓存 NSCache具有低内存自动删减机制、自动删减最久未使用的对象等系统底层的缓存机制。 NSCache不拷贝对象，而是保留（持有）对象 NSCache是线程安全的 只有重新计算很费事的数据，才值得放入缓存 Tip51： 精简initialize与load代码 load方法执行时，使用其他类是不安全的\nload方法不遵守继承规则，当类没有实现load方法时，并不从超类寻找load方法。\n类和category里的load方法都会被执行，首先执行类的方法，再执行category里的load方法。\ninitialize方法遵守继承规则，当父类实现了initialize方法，那么在类初始化的时候，先调用父类的initialize方法，再调用子类的initialize方法（即使没有实现，也会直接从父类继承这一方法并调用）\ninitialize只有在类被调用前才会加载，而load在应用初始化时会调用\nTip52: NSTimer会保留目标对象 NSTimer的target对象是Self，如果此时NSTimer又同时是Self的变量（为了方便管理，这几乎是必然的），那么就形成了循环引用 可以使用GCD、扩展使用Block方法的NSTimer对象，来适当解决循环引用的问题。 ","permalink":"https://www.aeieli.com/2024/06/05/effective-objective-c-2-0%E9%87%8D%E8%AF%BB%E7%AC%94%E8%AE%B0/","summary":"\u003cblockquote\u003e\n\u003cp\u003e最近感觉之看草草看过的《Effective Objective-C 2.0》，有必要再重读一遍，以打牢自己并不靠谱的基础知识。\u003c/p\u003e\n\u003cp\u003ePS：为了实践，以后坚持一本书读完再读其他的原则。同一时期，只读一本书。\u003c/p\u003e\n\u003c/blockquote\u003e","title":"iOS程序高手基石 -- Effective Objective-C 2.0重读笔记"},{"content":" 本文是以马克飞象为工具学习Markdown语法，使用的都目前版本支持的语法。一些HTML等高级语法，暂时没有涉及。\n[TOC]\n标题 以#开头标记的是标题\n多个##到#####标记的是不同大小的标题\n注意，开头的标签和正文，最好空一格，虽然它不是必须的\n有序列表和无序列表 开头用-短横杠是无序列表 回车可以自动标记 可以流畅的完成列表 列表不同的缩进会自动分层 以数字1、2、3加上英文句号.开头的是标记带有数字的列表 同样是自增形列表 强调和删除 使用两个星号**包围起来的文字，是 粗体\n使用一个星号*包围起来的文字，是 斜体\n使用``（Tab键上面那个点）来包围起来的文字，会被红色显示 使用~`两个波浪线包围的字，会加删除线\n引用和代码块 引用，可以方便的用大于号 \u0026gt;开头\n这是一个引用 引用的结束是用空行来决定\n代码高亮在很多MarkDwon编辑器里同样提供支持，只需要使用三个 `` `加上语言名称，并以同样的标签结束。\n//Objective-C //PHP是最好的语言 printf(\u0026#34;Hello World!\u0026#34;) 表格和公式 表格也非常方便，另起一行，用|代表需要的列，第二行用:\u0026ndash;(居右)、\u0026ndash;:(居左)、:\u0026ndash;:(居中)来声明列居中方式，一个简单的表格就完成了，看，非常方便吧！\nTitle1 title 2 titele 这样来说 似乎就是 表格 表格的单列宽度是自适应，并不受语法控制 这 样 | Title1 | title 2 | titele| |:-------------------- |----------:|:-----:| |这样来说|似乎就是| 表格| |表格的单列宽度是自适应，并不受语法控制|这|样| 在Markdown的引用、表格等内容里，可以同样使用标题、粗体等其他标签.但由于代码亮度的难度，在代码块里不能使\n公式对于码农来说似乎并不太重要，用 $ y = y +1 $ 用美元$前后包围起来就是行内公式\n如果用两个美元符号包围起来，则变成了整行公式\n$$ a = a+b/c $$\n链接和图片引用 对于网址，更是简单[]和（）的联合使用即能完成一个链接，[]里输入的是链接的标签，()里提供链接地址。\nGoogle 现在不翻墙，就无法访问，所以我们使用 Aol在线 来访问搜索引擎。\n[Google](https://www.google.com) 现在不翻墙，就无法访问，所以我们使用 [Aol在线](http://www.aol.com) 来访问搜索引擎。 同样，如果想引入一张图片，也很容易，但稍微麻烦的是，你要知道图片的网址，使用![]加()即可完成一个图片的载入\n![图片](http://img3.cache.netease.com/photo/0003/2014-06-24/9VGGV2CG00AJ0003.jpg) 如果链接中有括号等Markdown语法识别的特殊字符，我们可以这样使用\n![图片][1] [1]:http://img4.cache.netease.com/photo/0003/2014-06-24/9VGGUVS600AJ0003.jpg 效果如下：\n分隔符 至于常用的分隔符也很简单，无论是＊，还是-，或者_，只要连输三次，即可生成一行的分隔线\n分隔符下划线_\n分隔符星号*\n分隔符小破折号-\n复选框 使用- [ ]和 - [x]可以完成复选框\n- [ ] 是\n- [x] 否\n- [ ] 注意格式是-与[间有一个空格,[ ]中有一个空格或一个x(有x时不能有空格)\n- [ ] 复选框是不能在印象笔记中勾选的。飞象或其他Markdown编辑器中是可以的。\n引用、脚注和目录 使用[^标签]是脚注，与其对应的是在文档显示在底部的脚注。会自动编号，同时在Markdown编辑器中查看时支持点击跳转。 例1 使用[内容][序号]两个连续的方括号定义的，是引用链接，可以文档结尾，统一使用[序号]:URL的方式，定义引用的链接，例如标签。 [TOC]关键字，字义目录，在需要使用的地方，加上[TOC]即可使用。 限于印象笔记对语法解析的支持，引用和脚注等功能，无法在印象笔记中直接使用。 使用Markdown语法，可以非常流畅的写出顺心的文字，同时它的语法又简单到五分钟内完成。相信经过这几分钟的笔记 ，你也能学会Markdown了！\n流程图\u0026amp;时序图（UML） 流程图/时序图是马克大象新版本增加的高级Markdown语法，可以方便的画出流程图和时序图。 流程图/时序图采用JS和CSS加载实现，所以它采用的是类似编程语言的写法定义。 流程图：首先用标签定义流程图里的元素，然后用语法来画流程 使用与代码块一样的三个`` 来标记流程图\u0026amp;时序图的开始和结束 ，流程图是flow标签，时序图是sequence`标签。 流程图定义： 首先定义流程图中各模块的名称，格式如下： tag =\u0026gt; type: Title 其中，type类型有start开始、 end结束、 operation过程、 condition分支等。 定义完各模块后，使用tag-\u0026gt;tag的方式，定义流程。分支tag名后，用括号标明分支选择的定义，如 tag(yes)-\u0026gt;tag。 例：\nk=\u0026gt;start: 开始 e=\u0026gt;end: 结束 o=\u0026gt;operation: 处理 c=\u0026gt;condition: 选择 k-\u0026gt;c c(yes)-\u0026gt;o c(no)-\u0026gt;e o-\u0026gt;e ```flow k=\u0026gt;start: 开始 e=\u0026gt;end: 结束 o=\u0026gt;operation: 处理 c=\u0026gt;condition: 选择 k-\u0026gt;c c(yes)-\u0026gt;o c(no)-\u0026gt;e o-\u0026gt;e ``` - 时序图定义： - 时序图使用`sequence`为语法标签 - 按顺序定义序列，使用 Title-\u0026gt; Title `:`Title，定义一个序列，`-\u0026gt;`与标签前后不要留空格。 - `Note` `right|left` `of ` title为过程标签 - Title `--\u0026gt;` Title为虚线序列 例：\nTag1-\u0026gt;Tag2: 第一序列 Note left of Tag1: 我在想想 Tag2--\u0026gt;Tag1: 虚线序列 ```sequence Tag1-\u0026gt;Tag2: 第一序列 Note left of Tag1: 我在想想 Tag2--\u0026gt;Tag1: 虚线序列 ``` 与大象笔记（Evernote）相关 笔记的第一个标题，即为大象中笔记的标题 在笔记开头（第一个标题下），使用@+（）即可选择保存至那一个笔记本，后面可加[ 和]来增加标签 Markdown语法的笔记保存是单向的，即马克飞象中的笔记可以同步到大象中，但大象中不能对马克飞象生成的笔记进行修改。只有通过点击大象中笔记右上方的红色标签来返回马克飞象修改。 示例脚注. 1:https://github.com/fletcher/MultiMarkdown/wiki/MultiMarkdown-Syntax-Guide#footnotes ↩ ","permalink":"https://www.aeieli.com/2024/06/05/markdown%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/","summary":"\u003cblockquote\u003e\n\u003cp\u003e本文是以马克飞象为工具学习Markdown语法，使用的都目前版本支持的语法。一些HTML等高级语法，暂时没有涉及。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003chr\u003e\n\u003cp\u003e[TOC]\u003c/p\u003e\n\u003ch4 id=\"标题\"\u003e标题\u003c/h4\u003e\n\u003cp\u003e以#开头标记的是标题\u003cbr\u003e\n多个\u003ccode\u003e##\u003c/code\u003e到\u003ccode\u003e#####\u003c/code\u003e标记的是不同大小的标题\u003cbr\u003e\n\u003cstrong\u003e注意，开头的标签和正文，最好空一格，虽然它不是必须的\u003c/strong\u003e\u003c/p\u003e","title":"Markdown语法学习笔记"},{"content":"使用Swift和Objective-C语言制作的Xcode代码对齐插件，使用正则匹配方式实现多种对齐效果。\nRegX代码对齐插件演示\nGithub源码地址：https://github.com/kzaher/RegX\n","permalink":"https://www.aeieli.com/2024/06/05/regx-%E6%96%B0%E7%9A%84xcode%E4%BB%A3%E7%A0%81%E5%AF%B9%E9%BD%90%E6%8F%92%E4%BB%B6/","summary":"\u003cp\u003e使用Swift和Objective-C语言制作的Xcode代码对齐插件，使用正则匹配方式实现多种对齐效果。\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"RegX代码对齐插件演示\" loading=\"lazy\" src=\"https://github.com/kzaher/RegX/blob/content/images/demo.gif?raw=true\"\u003e RegX代码对齐插件演示\u003c/p\u003e\n\u003cp\u003eGithub源码地址：\u003ca href=\"https://github.com/kzaher/RegX\" title=\"Github源码下载\"\u003ehttps://github.com/kzaher/RegX\u003c/a\u003e\u003c/p\u003e","title":"RegX --新的Xcode代码对齐插件"},{"content":" 近日，瑞银曝光了中国超级官二代道德姐李小琳公主的秘密账户，虽然金额『不高』，但248万美元的秘密存款，一把撕下了李小琳身上最后的遮羞布。\n作为中国最具实权的权贵家族的重要成员，李小琳一直不同于其他红二代的低调，反而与已经被关进秦城监狱的薄熙来很相似，一贯的高调。在胡当权时期，由于对于权力限制的缺乏，身穿名牌高档时装，以名媛自居的李大姐，就成为闪光灯下的明星式人物。她的一些名言也广为传播，其中最为有名的『要给老百姓建立道德档案』的提法，也给这位自称『能力之外的资本等于零』的超级官二代赢得了『道德姐』的戏称。\n其实，李小姐道德不道德，高尚不高尚，正如中国的官场之贪腐一样，大家都是你知我知大家知，只是都以『你懂的』来装糊涂。而『道德姐』、『能力之外的资本等于零』等观点之所以被传播，反映的正是人们对她的反讽。但对于这位心理强大的女强人来说，蝼蚁众生的一点不屑，完全不会影响这位高贵小姐的心情。只有当掌权如新任习皇帝的怒吼，才能让这位李大小姐，收起国际名牌皮毛大衣，改用便宜超市布手袋来表示忠心。\n其实看一看昨天的另一条新闻，就不难明白当下中国官场反腐的笑话之所在。昨天美国对摩根公司的调查，不幸牵出一位在任的中国商务部部长大人，为了自己不成材的儿子，低三下四的去求摩根的中层领导，只是为了儿子可以获得美国的工作绿卡。为此还不惜多次承诺可以用权力来帮助摩根公司。可最后，这位部长公子，也仅仅靠父亲的面子得到了两年的工作，之后还是因为『表现不佳』被辞退。\n贵如李大小姐，由于家族生来高贵，人脉广泛。她可以完全不能其他资本，就使用本身的能力就足够纵横官商两界。因为有足够多的人供她驱使，鞍前马后的可以为她铺路搭桥，创造机会。她只要适时的表现出自己的『能力』，无论是金钱还是官帽，都会如约而至。\n而那些真正寒门学子，通过努力奋斗进了体制，通过半生努力，升至一官半职，但在贪腐伸手时，必须亲自上阵，没有章法吃相，很容易露出『能力之外的资本』，最终在靠山倒台后，被当做典型示众。\n自古都是太监办事贪污受贿，而太子王爷们，除了谋反，都是道德完人，就是因为，这些太子王爷们，需要的东西，自有太监狗腿子来办好。\n可怜百姓，都还昐着青天大老爷能还他一个朗朗乾坤。\n","permalink":"https://www.aeieli.com/2024/06/05/%E4%BB%8E%E6%9D%8E%E5%B0%8F%E5%A7%90%E7%9A%84%E9%81%93%E5%BE%B7%E6%96%87%E7%AB%A0%E8%AF%B4%E8%B5%B7/","summary":"\u003cblockquote\u003e\n\u003cp\u003e近日，瑞银曝光了中国超级官二代道德姐李小琳公主的秘密账户，虽然金额『不高』，但248万美元的秘密存款，一把撕下了李小琳身上最后的遮羞布。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e作为中国最具实权的权贵家族的重要成员，李小琳一直不同于其他红二代的低调，反而与已经被关进秦城监狱的薄熙来很相似，一贯的高调。在胡当权时期，由于对于权力限制的缺乏，身穿名牌高档时装，以名媛自居的李大姐，就成为闪光灯下的明星式人物。她的一些名言也广为传播，其中最为有名的『要给老百姓建立道德档案』的提法，也给这位自称『能力之外的资本等于零』的超级官二代赢得了『道德姐』的戏称。\u003c/p\u003e","title":"从李小姐的道德文章说起"},{"content":" 这是我之前发表在新浪博客里的技术文章，一并转过来收集。\nU5317U4eac这样的Unicode编码中文编码字符，经常会出现在iOS开发过程中。在断点调试的时候，控制台打印出来的都是这种编码，而不是中文，如何打印输出这种文字，真的很头疼。\n之前在唐巧的博客中，看到他提到，可以在系统终端中，使用\u0026quot; echo\u0026quot;命令来将Unicode的字符转义成中文，可是在自己的mac上试验却始终不成功。今天在QQ群里再次看到别人可以使用这一命令来输出中文，正好比较闲，就搜索了一下问题的解决方案。\n从万能的谷歌那里找到问题的根源，是由于Mac自带的终端bash版本过低，3.8.x的版本，无法支持echo 输出中文。那么只要将系统自带的bash升级到最新版本（至少要4.2.x以上）即可。\n首先在终端中执行以下命令，用来安装bash最新版本：\nbrew install bash （很多人在这一步失败，那是因为你没有安装 brew, 请参考这篇文章安装\n或者直接执行：\nruby -e \u0026#34;$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)\u0026#34; 安装\n在命令执行结束后，你会看到bash被安装到那个目录下(类似 /usr/local/bash/4.x.x)，记录下来，在这个目录后加上”bin/bash“内容，形成类似：/usr/local/bash/4.x.x/bin/bash 这样的完整路径，复制这个完整路径。\n执行：\nsudo vim /etc/shells 修改/etc/shells文件，将刚才的完整路径复制到这一文件中，执行:wq!保存退出\n执行\nchsh 将其中一行类似\u0026quot;Shell:\n/usr/local/bin/bash\u0026quot; 中Shell: 后的路径，改成刚才的完整路径。\n继续 :wq! 保存退出\n重启终端\n执行\necho $BASH_VERSION 如果输出的版本是4.2.x或者更高，现在你就可以在终端中，使用\necho -e \u0026#34;U5317U4eac\u0026#34; 来输出中文了！恭喜！注意，是echo -e +需要输出的字符串\nPS：如果在chsh命令里修改的路径错误，退出重启终端会因为无法载入bash出错，这时，可以使用终端的偏好设置》启动 中的Shell的打开方式，使用命令（完整路径）： /bin/bash来使用系统默认的bash启动终端，当然，这里使用命令也可以使用上面的完整路径来直接启动最新版本的bash。\n参考链接：\n修改系统默认Shell：\nhttp://blog.yuaz.net/archives/292\nUpgrade Bash to 4+ on OS X\nhttp://buddylindsey.com/upgrade-bash-to-4-on-os-x/\n","permalink":"https://www.aeieli.com/2024/06/05/%E5%A6%82%E4%BD%95%E8%AE%A9mac%E7%B3%BB%E7%BB%9F%E7%9A%84echo-e%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%E4%B8%AD%E6%96%87%E7%AD%89unicode%E7%BC%96%E7%A0%81%E5%AD%97%E7%AC%A6%EF%BC%88mac%E7%B3%BB%E7%BB%9F/","summary":"\u003cblockquote\u003e\n\u003cp\u003e这是我之前发表在新浪博客里的技术文章，一并转过来收集。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e\u003ccode\u003eU5317U4eac\u003c/code\u003e这样的Unicode编码中文编码字符，经常会出现在iOS开发过程中。在断点调试的时候，控制台打印出来的都是这种编码，而不是中文，如何打印输出这种文字，真的很头疼。\u003c/p\u003e","title":"如何让Mac系统的echo -e命令输出中文等Unicode编码字符（Mac系统默认命令行环境bash版本升级修改)"},{"content":"在环保部大人发话要检查应急响应机制的实施情况之后，北京政府这帮人，慌忙在又一波雾霾来袭的时候，拉响了红色警报。\n可与此同时，维基百科的所有页面，都被封了。\n面对那显而易见的雾霾，官大人们，只有领导发话的时候才看得见。\n面对那无形的心灵枷锁，所有人都在沉默，似乎墙外的世界都不存在。\n虽然我可以翻墙，虽然我有种种的手段，可以接触到那自由的网络。但那种对你心灵的强奸，对你意志的玩弄，仿佛让你随时能听到，他们得逞后得意的笑声，仿佛让他们疯狂的表情，随时出现在你的眼前。\n恨他们，也恨自己无能。\n看着自己的孩子，年纪小小，就已经知道雾霾之毒，就要戴上口罩，去面对这个充满毒气的环境。\n我怎么能让他长大之后，再去面对那心灵之毒，面对那理智之毒？\n","permalink":"https://www.aeieli.com/2024/06/05/%E5%86%99%E5%9C%A8%E9%9B%BE%E9%9C%BE%E3%80%81%E7%BB%B4%E5%9F%BA%E8%A2%AB%E5%B0%81%E4%B9%8B%E5%90%8E/","summary":"\u003cp\u003e在环保部大人发话要检查应急响应机制的实施情况之后，北京政府这帮人，慌忙在又一波雾霾来袭的时候，拉响了红色警报。\u003c/p\u003e\n\u003cp\u003e可与此同时，维基百科的所有页面，都被封了。\u003c/p\u003e","title":"写在雾霾、维基被封之后"},{"content":"又是一年新春，这是在外过的第四个春节了，失去走亲访友的热闹喧嚣，对春节的感觉只剩余一个长假的概念。\n古人视春节为一年重中之重，大约是有许多一年中重中之重的事，在春节间要做。可做为一个流浪在外的游子，春节不走亲，不访友，不祭祖，甚至连一些燃烟放炮的习俗形式都免掉之后，春节的重要性已经降低许多。但作为一个沿袭下来的重要节日，它对我，对于我的家庭还是有许多重要的意义吧。\n只希望，在新春一年里，等待许久的事情能够完成。\n只希望，在新春一年里，父母亲人身体康健，心情愉快。\n至于自己，努力学习新技术，更深入研究老技术，一技之长傍身，一身立于天下。\n读10本技术书，记10篇长笔记。\n读10本人文书，更新10种观点。\n读10本小说书，争取能通读英文。\n陪妻陪子，于他乡建故家。\n","permalink":"https://www.aeieli.com/2024/06/05/%E6%96%B0%E5%B9%B4%E9%9A%8F%E8%AE%B0/","summary":"\u003cp\u003e又是一年新春，这是在外过的第四个春节了，失去走亲访友的热闹喧嚣，对春节的感觉只剩余一个长假的概念。\u003c/p\u003e\n\u003cp\u003e古人视春节为一年重中之重，大约是有许多一年中重中之重的事，在春节间要做。可做为一个流浪在外的游子，春节不走亲，不访友，不祭祖，甚至连一些燃烟放炮的习俗形式都免掉之后，春节的重要性已经降低许多。但作为一个沿袭下来的重要节日，它对我，对于我的家庭还是有许多重要的意义吧。\u003c/p\u003e","title":"新年随记"},{"content":" 正则表达式是一种强大的工具，虽然看起来非常复杂，实际上遵循着非常严格和简单的规则。通过并不太长时间的学习，你就能了解如何写出适合自己使用的正则表达式。 这里，是我在学习正则表达式的时候，记录的一些学习心得。入门我是通过网上非常有名的这篇\u0026lt;30分钟正则表达式入门\u0026gt;来完成学习的。在记录完笔记后，在各种应用场合，不断的尝试写出适合的正则表达式，我非常容易的掌握到正则表达式的规则。希望你也能抽出半天时间（30分钟当然是不可能的），就可以完成正则表达式这一强大工具的学习。 原文是针对C#正则技巧的内容，和OC应稍有区别，但入门知识基本相同。OC和大多数其他语言，不支持C#中的平衡组等复杂用法 Mac上正则表达式推荐工具可以使用:Reggy来做验证和测试，免费开源好用。\n基本概念 hi\n- 匹配所有等于hi的字符（不区分大小写）\n\\bhi\\b\n- \\b为元字符(metacharacter)，代表一个单词的开头和结尾（分界处-一般是空格、标点、换行）.\n- 精确匹配hi单词\n\\bhi\\b.*\\bLucy\\b\n- 查找hi和Lucy中间的内容\n- .代表除换行符以外任意字符\n- *代表数量，任意次数\n- .*代表任意数量不包含换行符的字符\n0\\d\\d-\\d\\d\\d\\d\\d\\d\\d\\d 或者 0\\d{2}-\\d{8}\n- 以0开头，两位数字后有-连字号，后面跟8位数字\n- \\d是匹配数字,-不是元字符，只是普通字符\n- {2}由大括号包含的数字，意思是前面的元字符必须匹配几次\n- {2,4}是指匹配不少于2次，不多于4次\n其他元字符： \\s 匹配任意空白符，包括空格，制表[tab]，换行、中文全角空格 \\w 匹配字符或下划线或汉字 + +号也是匹配数量，但不同与*，+是必须重复匹配1次以上（*可以匹配0次），?是重复0次或一次 元字符 说明 * 重复零次或多次 + 重复一次或多次 ? 重复零次或一次 {n} 重复n次 {n,} 重复n次或更多次 {n,m} 重复不少于n次，不多于m次 ^ 和$ 匹配查找字符串的开头和结尾，如果是增加了处理多行的选项，^和$意思是匹配一行的开始和结束 \\ 是转义，会将后面的特殊元字符，转为普通字符（*、+、^、$、.等） 字符类 由[和]包含起来的内容，即为需要匹配的内容，注意[``]里的.?!不需要加转义 []内的-，代表从字符集起始到结束，例如[0-9]与\\d意思一样，[a-z0-9A-Z]则代表所有英文字母和数字集合 \\(?0\\d{2}[) -]?\\d{8} : \\(是转义(，\\(?代表首部出现(一次或零次 \\d{2}匹配0出现之后有2位数字 后面的[) -]是指后面可以有）、空格和-，[) -]?代表它们可以出现一次或零次 \\d{8}为最后8位数字 分支条件 有几种规则，满足任意一种即为匹配 |隔开的规则，即为分支规则 0\\d{2}-\\d{8}|0\\d{3}-\\d{7}:两种规则0\\d{2}-\\d{8}或0\\d{3}-\\d{7}满足任意一条即可(3位数字-8位数字或4位数字-7位数字) 分支要注意各条件的顺序，匹配时从左至右匹配，如果满足某个分技，则不再管另一分支 \\d{5}-\\d{4}|\\d{5} 和 \\d{5}|\\d{5}-\\d{4}两个正则不一致 前者是匹配美国邮编的标准（前5后4共9位数字，或者是5位数字） 后面只匹配5位的数字 分组 使用(和)包围的条件，是为一组 可以对组（或称子表达式）使用后缀元字符条件，来限定这一分组匹配重复次数等 反义 查找非规定范围以外的字符 基本上小写是正常，大写是反义 反义排除的只是字母列表，无关顺序，即[^abc]，会排队a,b,c三个字母，而不是排队abc顺序的三个字母。 元字符 说明 \\W 任意非字母、数字、下划线、汉字的字符 \\S 任意非空白符的字符 \\D 任意非数字的字符 \\B 任意非开头和结束的位置 [^x] 任意非x的字符 [^abcd] 任意非abcd的字符 后向引用 使用小括号()包围起来的分组，会自动拥有一个从左自右的从1开始的编号 正则会先把匹配分组的结果捕获出来，以相应编号来组织，可以用\\编号的形式来对这相对应的结果进行进一步处理 \\b(\\w+)\\b\\s+\\1\\b 匹配重复出现的单词（叠词）：\\b(\\w+)\\b的结果会被捕获到编号为1的分组中，\\s+一个或多个空格，\\1引用编号1分组的结果，即寻找一个单词空格后，再重复一次的单词，例Go Go\n在括号开始的地方，用?\u0026lt;名字\u0026gt;或者?'名字'可以自定义分组名. 自定义的分组名，使用\\k\u0026lt;名字\u0026gt;来调用 (?:)如果在括号开始用?:的话，即表示这一括号即不保存捕获的结果，也不给这一括号分配组号 零宽断言 零宽断言是指查找某些内容前后的文本，但不包含这些内容本身。 \\b,^,$这几个关键字，其实也是一种零宽断言 零宽断言主要用来查找 (?=关键词表达式)： （零宽度正预测先行断言）断言关键词出现的位置后面能匹配表达式。\n\\b\\w+(?=ing\\b) 匹配以ing结尾的单词前半部分 ： being 会匹配出be\n(?\u0026lt;=关键词表达式)(零宽度正回顾后发断言)：断言关键词出现的位置前面能匹配表达式\n(?\u0026lt;=\\bre)\\w+\\b 匹配以re开头的单词的后半部分: replay 会匹配出play\n(?!关键词表达式)（零宽度负预测先行断言）：断言关键词出现的位置后面不能匹配表达式\n\\b\\w*q[^u]\\w*\\b:匹配q后面不包含u的单词，但这一正则无法筛除最后一位是q的情况，则\u0026quot;Iraq fighting\u0026quot;也会被匹配。因为[^u]占用了一个字符位。 \\b\\w*q(?!u)\\w*\\b:使用零宽负预测先行断言，即可解决这种问题，它只匹配位置，并不消费（使用）任何位置。\n(?\u0026lt;!关键词表达式)(零宽度负回顾后发断言)：断言关键词出现的位置前面不能匹配表达式\n贪婪与懒惰（最大匹配和最小匹配） 默认是贪婪匹配：即在匹配条件的情况下，尽可能多的匹配字符。 在条件后加上?即可显式声明为懒惰匹配，即尽可能少的匹配字符 aabab 字串中，按a.*b,默认会匹配整个字符串 a.*?b：则只匹配aab和ab\n处理选项 大小写 多行模式：使^和$匹配行首和行尾，而不仅仅是整个字符串的开头和结尾。 单行模式：更改.的含义，使.代表所有字符（包含换行符） 忽略空白：忽略表达式中的非转义空白，并启用#代表注释 显示捕获：仅显示捕获被声明的组，而不是给所有括号内的组默认命名（1～n) 平衡（对称）/递归匹配 需要匹配成对出现的内容 (?'标签名'条件) 满足条件，则把标签名入栈 (?'-标签名'条件) 若满足条件，标签名出栈，如果栈为空，匹配失败 (?(标签名)yes|no) 如果标签名的栈中有内容，则匹配yes规则，否则匹配no规则 (?!) 总是失败的匹配，用来在平衡递归匹配中，中断匹配条件 注释 (?#注释):注释最好启用处理选项中的”忽略模式里的空白符“设置（C#） ","permalink":"https://www.aeieli.com/2024/06/05/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/","summary":"\u003cblockquote\u003e\n\u003cp\u003e正则表达式是一种强大的工具，虽然看起来非常复杂，实际上遵循着非常严格和简单的规则。通过并不太长时间的学习，你就能了解如何写出适合自己使用的正则表达式。 这里，是我在学习正则表达式的时候，记录的一些学习心得。入门我是通过网上非常有名的这篇\u003ca href=\"http://deerchao.net/tutorials/regex/regex.htm\"\u003e\u0026lt;30分钟正则表达式入门\u0026gt;\u003c/a\u003e来完成学习的。在记录完笔记后，在各种应用场合，不断的尝试写出适合的正则表达式，我非常容易的掌握到正则表达式的规则。希望你也能抽出半天时间（30分钟当然是不可能的），就可以完成正则表达式这一强大工具的学习。 \u003cem\u003e原文是针对C#正则技巧的内容，和OC应稍有区别，但入门知识基本相同。OC和大多数其他语言，不支持C#中的平衡组等复杂用法\u003c/em\u003e Mac上正则表达式推荐工具可以使用:\u003ca href=\"http://reggyapp.com/\"\u003eReggy\u003c/a\u003e来做验证和测试，免费开源好用。\u003c/p\u003e\n\u003c/blockquote\u003e","title":"正则表达式学习笔记"},{"content":"- Docker是轻量级的虚拟机\n- 利用Linux系统新的特性，需要新版\n-\n","permalink":"https://www.aeieli.com/2024/06/05/__trashed/","summary":"\u003cp\u003e- Docker是轻量级的虚拟机\u003cbr\u003e\n- 利用Linux系统新的特性，需要新版\u003cbr\u003e\n-\u003c/p\u003e","title":"Docker容器使用经验"},{"content":"研究了一下脚本，给数据库定时做全量备份，并定时删除过期（7天前）的备份。\n过两天有心情，再加个e-mail命令，可以将备份发送到指定邮箱。\nbakdir=\u0026#34;/home/sqlbak/\u0026#34; filename=\u0026#34;`date +%y%m%d`.sql\u0026#34; backname=\u0026#34;`date +%y%m%d`.tar.gz\u0026#34; backusername = \u0026#34;sqlbakuser\u0026#34; if [ ! -x \u0026#34;${bakdir}\u0026#34; ];then mkdir ${bakdir} fi cd ${bakdir} mysqldump ${backusername} \u0026gt; ${filename} tar zcf ${backname} ${filename} rm -f ${filename} lastfilename=\u0026#34;`date +%y%m%d --date \u0026#39;7 days ago\u0026#39;`.tar.gz\u0026#34; rm -f ${lastfilename} 说明：\n第一行指定备份的目录，我这里是/home/sqlbak ，你可以修改为你需要的目录\n文件名命名规则是 前缀 date + 年月日 + .sql ， 最终保存的是名为.tar.gz后缀的压缩文件\n注意提前建立名为sqlbakuser的具有备份权限的mysql用户\n将该脚本加入到定时启动中，每天定时启动即可。我一般设置为凌晨2～4点\n服务器上我没做定时发送邮件的原因，是我做了一个定时任务在本地，每天定时从服务器上scp下来备份文件，如果没有下载成功，重试几次后本地报警，比较方便。\n","permalink":"https://www.aeieli.com/2018/06/30/mysql-%E8%87%AA%E5%8A%A8%E5%AE%9A%E6%97%B6%E5%A4%87%E4%BB%BD-%E5%AE%9A%E6%97%B6%E5%88%A0%E9%99%A4%E8%BF%87%E6%9C%9F%E5%A4%87%E4%BB%BD-%E8%84%9A%E6%9C%AC/","summary":"\u003cp\u003e研究了一下脚本，给数据库定时做全量备份，并定时删除过期（7天前）的备份。\u003cbr\u003e\n过两天有心情，再加个e-mail命令，可以将备份发送到指定邮箱。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebakdir=\u0026#34;/home/sqlbak/\u0026#34;\nfilename=\u0026#34;`date +%y%m%d`.sql\u0026#34;\nbackname=\u0026#34;`date +%y%m%d`.tar.gz\u0026#34;\nbackusername = \u0026#34;sqlbakuser\u0026#34;\n\nif [ ! -x \u0026#34;${bakdir}\u0026#34; ];then\nmkdir ${bakdir}\nfi\ncd ${bakdir}\nmysqldump ${backusername} \u0026gt;  ${filename}\ntar zcf ${backname} ${filename}\nrm -f ${filename}\nlastfilename=\u0026#34;`date +%y%m%d --date \u0026#39;7 days ago\u0026#39;`.tar.gz\u0026#34;\nrm -f ${lastfilename}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e说明：\u003c/p\u003e","title":"Mysql 自动定时备份 + 定时删除过期备份 脚本"},{"content":"刚才遇到一个有意思的问题，NSPredicate为什么使用like进行条件匹配时无法识别出结果。\n研究一番获得解决方法，记录在这里：\n首先NSPredicate初始化时候，使用的Format的语句，并不是标准的NSString，所以其中的%@和%k，是NSPredicate特殊定义的含义，与通常意义的NSString并不一致。\n所以很多人下意识可能会写出如下语句：\n[NSPredicate predicateWithFormat:@\u0026#34;%k like[cd] %@ \u0026#34;, Attri_Name, keyword]; 但是这种查询会直接崩溃，当你上网搜索一下，可能会改进一下，写出下面的条件查询。\n[NSPredicate predicateWithFormat:@\u0026#34;%k like[cd] \u0026#39;*%@*\u0026#39; \u0026#34;, Attri_Name, keyword]; 这种情况下，运行正常，但你会发现匹配不到结果。\n其实，我们需要这么做：\nNSString *key = [NSString stringWithFormat:@\u0026#34;*%@*\u0026#34;,keyword]; [NSPredicate predicateWithFormat:@\u0026#34;%k like[cd] %@ \u0026#34;, Attri_Name, key]; 也就是说，你需要直接将查询的限定条件，以一个字符串的对象传给NSPredicate才能解析，而不能指望NSPredicate给你处理。\nNSPredicate的Like，一般适合用于使用？号来匹配精确的前后置字符数量条件，像上面这种前后*的条件，其实可以直接使用CONTAINS查询替换。\n","permalink":"https://www.aeieli.com/2016/07/20/nspredicate-%E7%9A%84-like-%E7%94%A8%E6%B3%95/","summary":"\u003cp\u003e刚才遇到一个有意思的问题，NSPredicate为什么使用like进行条件匹配时无法识别出结果。\u003c/p\u003e\n\u003cp\u003e研究一番获得解决方法，记录在这里：\u003c/p\u003e\n\u003cp\u003e首先NSPredicate初始化时候，使用的Format的语句，并不是标准的NSString，所以其中的%@和%k，是NSPredicate特殊定义的含义，与通常意义的NSString并不一致。\u003c/p\u003e","title":"NSPredicate 的 like 用法"},{"content":"","permalink":"https://www.aeieli.com/%E6%B1%82%E7%9F%A5%E8%B7%AF%E6%97%A0%E6%AD%A2%E5%A2%83%EF%BC%8C%E4%BA%BA%E7%94%9F%E8%8B%A6%E7%9F%AD/","summary":"","title":"求知路无止境，人生苦短"}]