Tag: 编程

键入gcc main.c – Ekaterina Kalache –中会发生什么

键入gcc main.c会发生什么 gcc是一个进行预处理,编译,汇编和链接的编译器。 让我们更仔细地研究这些过程。 让我们在名为main.c的文件中编写一个简单的C程序(必须具有.c扩展名才能执行C程序)。 并在其中编写我们的代码。 保存文件并返回提示后,我们需要t0编译文件,以便可以执行它。 我们使用命令gcc和文件名。 这将开始编译过程,我们可以分为以下步骤: 1,预处理 预处理程序将删除注释(/ *此处的文本将被预处理程序* /删除)。 它还将包含来自标头(#include )的库。 它将用代码替换宏名称。 现在我们的文件进入编译器。 2.编译 编译器将生成一个汇编代码,并将我们的代码转换为汇编语言。 现在可以将其传递给汇编器。 3.组装 汇编程序会将代码转换为二进制代码,该二进制代码将仅包含1和0,因此计算机可以理解它。 现在,我们的代码已准备好传递给链接器。 4.链接器 链接器会将我们的代码与代码运行所需的库链接,并将所有内容打包到单个可执行文件中。 通过运行“ gcc main.c”命令后列出文件,我们可以看到它。 在我们gcc-ed main.c之前 在我们gcc-ed main.c之后 现在,我们有了名为a.out的可执行文件。 这是一个默认文件,如果我们不指定应将可执行代码放入的文件,则会创建该文件。 最后,我们可以继续执行代码。 我们还可以决定创建一个可执行文件,并使用– o选项将其命名为所需的任何名称,后跟所需的文件名,例如helloC。 在这种情况下,所有内容都将打包到可执行文件helloC中。

NSUserDefaults与CoreData

创建应用程序中最重要的方面之一是利用数据,但是在某些情况下,您的Internet连接可能不可用,因此使您的应用程序无用。 某种程度的数据持久性至关重要,这意味着我们可以在离线使用应用程序时存储数据。 有一些保留数据的方法,但是我要讨论的两种是NSUserDefaults和CoreData。 我想简要说明每种数据持久性选项的优缺点。 NSUserDefaults 这是使用键值对在没有数据库的情况下存储数据的最简单方法。 这种方法是存储少量数据的理想方法。 在大多数情况下,最好使用NSUserDefaults保存用户的设置和非关键数据。 NSUserDefaults支持以下类型: NSString NS编号 NSDate NSDictionary NSData 优点 相对容易存储和检索数据 非常适合存储小尺寸数据(例如:用户设置) 易于学习和实施 缺点 不适合存储大量数据 存储大量数据时性能会下降 不适合存储敏感数据 核心数据 一个允许无需实际使用数据库即可持久存储数据的框架。 该框架类似于使用SQLite中的关系数据库。 优点 可以存储大量数据(手机上的内存越多,可以存储的数据就越多) 如果关系模型设置正确,可以非常快 能够更改对象本身而不更改整个数据库 缺点 学习困难 需要有效的数据结构和架构设计 迁移数据可能很困难

如何分割字符串— Swift 3.0

当我尝试通过使用for-in循环遍历字符串来拆分字符串时,不断出现以下错误: 尽管此错误告诉我,与数组不同,无法使用for-in循环拆分字符串,但它未提供有关如何修复错误的指导。 自然,我从Stackoverflow寻求帮助。 在下面,您将找到我搜索的结果:两种分割字符串的方法……。 选项1:在要拆分的字符串的末尾添加.characters 。 在下面的示例中,循环遍历字符串,并逐个字符(包括空格)对其进行拆分。 最终结果: 正如您在左侧看到的那样,使用.characters可以拆分字符串中的单词以及每个单词中的字母。 根据最终目标,返回字符串中每个单词的每个字符可能会造成一些混乱。 但是,当您想更改字符串中的每个字符时,使用.characters拆分字符串很有用。 在下面的示例中,我使用.characters将stringOfWords中的每个字符(包括空格)替换为图像(“🦄”)。 最终结果: 选项2:使用components(separatedBy 🙂创建一个数组,其中包含要拆分的字符串中的每个单词。 在下面的示例中,字符串中的每个单词都分成一个数组,然后可以使用for-in循环进行迭代。 最终结果: 当目标是以相同方式更改字符串中的每个项目(或本例中的单词)时,此选项很有用。 例如,在下面的示例中,我使用components(separatedBy 🙂将stringOfWordsArray中的每个单词更改为Pig Latin。 我不希望每个字符都发生变化,而是希望每个单词在每次迭代过程中都以相同的方式进行更改(将原始单词的第一个字母移动到单词的末尾并添加“ ay”)。 最终结果: 在决定使用.characters还是component(separatedBy :)时 ,问自己“为什么拆分字符串? 我的最终目标是要更改/使用字符串中的每个字符 ,还是要更改/使用字符串中的每个单词 ?”如果答案是前者,则应使用.characters 。 相反,如果是后者,则可以使用components(separatedBy 🙂 。 以下有用的链接…。 components(separatedBy 🙂 — Stackoverflow 获取字符串的第n个字符-Stackoverflow 字符串和字符概述-Apple的Swift编程语言(Swift 3)

使您的发展更好。 使用代理。

在本文中,我想描述如何使用Charles桌面应用程序设置代理。 我相信你们中的许多人都使用API​​或使用一些REST服务。 如果您还没有听说过代理,我相信这篇文章中的知识将对您的未来发展有用。 以下示例涉及iOS环境以及在macOS系统上进行配置。 什么是代理? 为了告诉您什么是代理服务器,我使用在Charles文档中找到的定义 HTTP代理是一种服务器,它从您的Web浏览器接收请求,然后代表您向Internet发送请求。 然后将结果返回到您的浏览器。 因此,Charles应用程序是一种监视器,用于检查您的网络流量,代表您执行所有请求并将响应返回给您。 我真的需要吗? 是! 当您创建使用某些API的应用程序时,它可能会对您有所帮助。 您将可以查看服务器的请求和响应。 此外,Charles应用程序允许您为端点设置断点,并允许您编辑请求或响应正文,因此您可以为应用程序测试各种方案。 同样,您可以看到您的应用程序确实有多少请求。 如何配置Charles? 首先,转到Charles网站并下载安装文件。 安装过程完成后,您将看到应用程序的主屏幕。 开始时,我建议选择顶部的“ Sequence选项卡。 一段时间后,您应该会在Mac上看到所有您执行的请求。 现在,我们有两种方法来配置Charles。 第一种方法是为iOS Simulator配置它。 第二个选项是为iOS设备配置Charles。 iOS Simluator配置 单击帮助-> SSL代理->在iOS Simualator中安装Charles Root证书。 您将看到提示: 然后单击确定,并确保您应该重新启动模拟器。 完成上述步骤后,Charles便已配置好并可以与您的模拟器一起使用。 iOS设备配置 在设备的Wi-Fi连接设置中,选择与Mac使用的连接,然后点击。 然后向下滑动,然后选择“代理设置为手动”。 在IP字段中,请输入您Mac Wi-Fi使用的相同IP地址。 在port字段中,输入8888 。 要在Mac上查看Wi-Fi的IP地址,请执行以下操作: 在Mac上的wifi图标上用选项按钮右键单击 然后在您的iOS设备上访问http://www.charlesproxy.com/getssl/并安装证书。 我建议通过Safari进行操作,因为它会将您从URL重定向到iOS设备上的“证书设置”。 然后只需安装证书。 安装过程完成后,您将能够在Mac上的Charles应用程序中查看来自iOS设备的所有请求。 好的,所有配置都可以,但是如何使用呢? 配置流程完成后,您将看到Charles主窗口以及您的网络数据。 出于这篇文章的目的,我编写了一个简单的应用程序,该应用程序使用了免费的rest API https://www.freegeoip.net/ 。 该API为我们提供了有关任何域的一些地理信息。 例如: […]

仅使用iPhone对React Native应用进行编程

我是工作狂 我不会轻易说出来。 暂停开发我的应用程序对我来说是令人难以置信的压力和困难,尤其是在有很多事情要做的时候。 因此,当我发现与父母和女友进行为期10天的欧洲之行时,我非常担心牺牲宝贵的工作时间。 那应该是我对欧洲假期的最初反应吗? 可能不会。 但是我对自己下定决心,只要有空闲时间或每个人都入睡后,我仍然可以完成一些工作,因此我仍然可以取得一些进步。 这是双赢! 我仍然可以在意大利和法国旅行并享受我们的郊游,而且我仍然可以完成一些工作。 但是出现了一种新的并发症。 乘飞机的早晨,我发现无法携带笔记本电脑。 现在我们有一个问题。 我知道我必须适应。 您可能会猜到我根据标题决定尝试的内容。 没错,我可以想到的处理任何代码的唯一方法是,如果我在iPhone上找到了一种相对有效的编码方法。 这是我的方法。 进行设置 几次Google和App Store搜索后又经过几次反复试验,我确实在飞机起飞前几个小时就整理好了设置! 我需要的第一个也是最重要的应用是Github客户端,它允许我执行以下操作: 访问我的应用的私人Github存储库。 在其上添加和编辑任何文本文件。 拉,推和提交我对其所做的任何更改。 我发现有很多应用程序可以让您查看项目,但是只有少数应用程序支持编辑。 在尝试了一些选项之后,我决定使用工作副本。 它满足了我的所有要求,拥有一个性感的用户界面,拥有157个评分,平均评分为4.8星,而且我什至可以免费试用! 我非常喜欢它,我觉得值得为专业功能付费。 为了使事情变得更好,开发人员仍然非常活跃,并定期发布更新! 感谢您提供出色的移动Github客户端Anders Borum。 您值得一枚金牌! App Store链接:https://itunes.apple.com/us/app/working-copy/id896694807?mt = 8 我的移动设备设置中唯一缺少的部分是自定义键盘,可让您尽快输入代码。 物理智能手机键盘之所以售罄,是因为我们没有时间停下来购买,因此唯一的选择是下载自定义iOS键盘。 虽然我经常下载并尝试新的有趣的应用程序,但我并没有探索许多自定义键盘。 我从未感到有必要冒险超越Google的GBoard(这是最好的)。 我试用了一些开发键盘,并认为CodeKey Pro是适合该工作的键盘。 用最少的偶然键盘按键,对我来说感觉最好。 它还根据您设置的语言提供自定义快捷方式。 就我而言,我使用Javascript是因为我的应用程序是基于React Native构建的。 感谢您在我的移动开发设置上的精采,Abhinav Dimri! 应用商店链接:https://itunes.apple.com/us/app/codekey-pro-custom-keyboard-designed-for-programmers/id1054647516?mt=8 和繁荣,我准备在旅途中编写代码! 温馨提示:虽然没有必要,但在旅途中带上外接电池很方便。 “但是阿明! 您是如何测试代码的?” 我没有 这不是最佳实践,但是我所能做的就是编写代码,仔细检查拼写错误,并在回来时进行调试。 也许可以使用Expo的移动应用程序来运行该应用程序(我不使用Expo,所以我不知道),但是我的React […]

应用开发简介

有一个应用程序 关于成为一名程序员,我比其他任何人都被问到的问题是“嘿,兄弟,我想学习制作应用程序,我应该从哪里开始?”或其他形式的变化。 一旦有人开始学习某种语言或希望开始学习某种语言,那么可能出现的第一件事就是我如何使用已经获得/将要获得的编程技能来创建可以向人们展示的应用程序。 这个问题的问题在于它太模糊了。 自苹果发布首款iPhone并带来“应用程序”概念以来,已经过去了将近10年,该应用程序可以部署在可在操作系统上运行的“应用程序商店”上。 在整个应用程序革命之前,操作系统上运行的所有内容通常都被称为软件或应用程序。 而且它不像应用程序开发那么出色。 随着智能手机及其操作系统(如Android和iOS)的疯狂成功,您开发的应用程序将在全球数十亿拥有智能手机和互联网连接的人的手中。 通过应用商店,您可以为应用设定价格,或者使用应用内购买或仅需几行代码就可以包含在应用中的广告,使这些应用获利也变得非常容易。 这意味着成为“应用程序开发人员”实际上是一种可行的职业,可以为您提供稳定的收入来源。 随着越来越多的新程序员加入到越来越多的应用程序开发人员队伍中,应用程序已经从完成了计算器或气象应用程序之类的小型应用程序,发展成为令人难以置信的复杂软件,可以完成从叫车到打车的所有工作。您可以与您的朋友联系,打电话给您的家人到世界一半的地方,甚至可以监控您的健康状况并帮助找到治疗癌症的方法。 这意味着整个应用程序生态系统还刺激了对其他相关业务(如服务器后端,数据存储解决方案和IDE的实际编码)的需求。 这是苹果公司针对iPhone的广告,其中大量的应用程序是他们的主要卖点 因此,现在回到如何制作应用程序这一主题,您将需要做出许多决定: 我正在开发什么样的应用程序? 会是游戏吗? 还是可以帮助人们更有效地完成工作的工具? 还是它将成为人们的交流平台? 我要在哪个平台上分发它? 将用于网络吗? 还是用于移动设备? 如果用于移动设备,则使用哪个平台,Android,iOS或Windows Phone? 会是跨平台的吗? 我擅长什么语言,我需要学习什么语言? 我是否具有为要构建的平台编程所需的硬件和软件? 在找到上述问题的答案之后,您将有良好的基础开始在该应用程序上进行实际工作。 现在,所有应用程序的构建方式都不相同,每个类别的工作流程略有不同。 让我来看看其中的一些。 我通过学习HTML,CSS和javascript开始编程。 这些语言是现代网络的基础,对于开始编程的人来说,它们是非常好的“网关语言”。 这是因为所有这些语言的入门门槛都非常低,可以容忍初学者程序员犯的常见错误,并且它们是一些最受欢迎的编程语言,因此在互联网上无处不在。 诸如堆栈溢出之类的网站上充斥着有关这些语言的信息,您真正面临的问题很可能已经由堆栈溢出的真正有用的社区解决,您所需要知道的只是外观。 现在,按照他们的传统常识,没有人会认为这些语言中的任何一种都是您用于应用程序开发的语言,但是您会感到惊讶。 Web应用程序或在浏览器中运行的应用程序仅使用这些语言编写,现在甚至可以在Node.js的帮助下使用JavaScript编写后端服务。 这些应用程序既可以托管在您的服务器上(例如web.whatsapp.com或inbox.google.com),也可以使用Chrome网络应用商店打包和部署,这些应用程序使chrome浏览器的用户即使在离线状态下也可以使用该应用程序, chrome图书(我听说你很窃笑,但chromebook的销量仅次于macbook,并且由于其极低的价格而增长很快)是它们唯一的应用程序来源。 您还可以使用phonegap / Xamarin / Titanium mobile等服务在移动设备上分发基于Web的应用程序。 这绝对不适用于所有类型的应用程序,因为网络应用程序的性能受到严重限制,它们的本机功能也是如此,例如对指纹读取器,蓝牙和其他网络功能的正确访问。 以下是您可能需要在此处开始的一些事项: 一个好的文本编辑器: 很多人可能只对终端上的VIM或emacs甚至记事本感到满意。 但是许多其他文本编辑器为表带来了很多好处,例如代码突出显示,代码建议,自动完成,花括号完成等。 我会推荐的一些非常好的工具是Notepad ++,Adobe Brackets,Sublime和Github Atom。 最后,文本编辑器的选择完全由您决定,您应该选择最适合自己的一种。 节点程序包管理器(NPM): 在下载软件包及其依赖项时,这是一个非常宝贵的工具,在为您的项目下载工具和库时,它将真正为您提供帮助。 […]

自学成才的软件开发人员:为什么开源对我们很重要

这是一个关于我对开源的看法如何随时间变化以及如何对我的职业生涯产生帮助的故事。 开源简介 大约13年前(在高中时),一个朋友(Netcyrax)向我介绍了开源社区。 他向我介绍了有关开放源代码及其运行方式的所有内容。 然后,他给了我一张Ubuntu CD,并告诉我Ubuntu正在通过发送免费副本来推广其操作系统。 第二天,我使用56k连接访问了www.ubuntu.com,并订购了50份Ubuntu。 我的意图是将它们出售给其他人,而不是免费提供。 那是15岁的我,我不了解开放源代码的目的。 无法理解目的 然后我开始编程。 我已经知道了开源,但实际上我不明白为什么我必须共享我的宝贵代码行。 为什么免费共享我花了几个月时间开发的程序源代码? 如果有人偷了怎么办? 如果我的“竞争对手”使用我的源代码来改进他们的产品怎么办? 当时我不明白的是,我不是一名杰出的软件开发人员,我的程序可以由经验丰富的软件开发人员在几天之内(而不是几个月)从头开始开发。 使用开源库很方便 是2008年,我有了第一部iPhone(3G)。 苹果宣布推出iOS 2和iOS SDK。 我决定(在业余时间)成为一名iOS开发人员。 由于还没有人使用过iOS SDK,因此我不得不自己学习开发应用程序。 我使用WebView创建了一个简单的应用程序,并且业务逻辑在使用JavaScript构建的Web应用程序内部。 我对iOS SDK感到非常失望(菜鸟开发人员+ Objective-C +手动引用计数=灾难),因此我暂停了本机iOS开发两年。 同时,我正在试验混合的SDK,例如Titanium,Adobe Air-ActionScript。 当我回到iOS 5(回到本机)时,一切都不同了。 在大约一个月的时间里,我设法构建了第一个真实的应用程序并将其上传到App Store。 但是发生了什么变化(自动引用计数除外)? 答 :iOS开发的开源社区。 ASIHTTPRequest(用于网络请求)和SDWebImage(用于下载和缓存图像)帮助我构建了第一个应用程序。 版本控制和GitHub 大多数开源项目和库都托管在Github上。 所以我当时使用Github下载我的库,但是由于我是在业余时间编程的,并且没有商业环境的经验,所以我不能说Git和Github之间的区别。 在构建了一些iOS应用之后,我对自己的技能充满信心,因此我决定申请iOS机会。 在第一次面试中的某个时刻: -访者:您使用什么版本控制? 我是什么意思版本控制? -访者:我的意思是您如何保留代码库的版本? SVN? 吉特? -Me:时间机器(OS X的备份软件)! 因此,在与访问者进行了交谈之后,我决定我想了解更多有关Git(以及一般而言的版本控制)的知识,并希望在自己的项目中使用它。 我阅读了很多有关Git的文章,以及如何在团队中使用它。 我学会了在BitBucket存储库中使用“提交”和“推送”。 我将其用作代码的备份和版本控制,但不用作协作工具。 […]

Golang:将推送通知发送到iOS设备

假设: 您的计算机中已安装Go语言 支持APNs的iOS示例应用程序用于测试 步骤1:生成证书PEM文件。 本文将帮助您生成PEM https://www.raywenderlich.com/123862/push-notifications-tutorial 步骤2:为APN安装Go库 去获取github.com/anachronistic/apns 步骤3:在main.go中编写以下函数。 将证书PEM文件放置在config文件夹中。 您可以根据需要更改推送URL。 func SendPushToClient(pushText string,pushToken string){ fmt.Println(“ SendPushToClient”) 有效负载:= apns.NewPayload() 有效负载。警报= pushText pn:= apns.NewPushNotification() pn.DeviceToken = pushToken pn.AddPayload(有效载荷) 客户端:= apns.NewClient(“ gateway.sandbox.push.apple.com:2195”,“ ./config/pushcert.pem”,“ ./config/pushcert.pem”) 响应:= client.Send(pn) 警报,_:= pn.PayloadString() fmt.Println(“ Alert:”,alert) fmt.Println(“ Success:”,分别为成功) fmt.Println(“错误:”,分别为错误) } 步骤4:从主函数调用“ SendPushToClient”函数。 在以下代码中替换客户端令牌 func main(){ SendPushToClient(“您好,来自APN”,“ ”) } 步骤5:编译并运行 去跑主 完整源代码main.go 包主 导入( […]

团队合作使梦想成真

或者,是编译C程序的四个阶段。 编译C程序是一个多阶段的过程。 该过程可以分为四个单独的阶段:预处理,编译,组装和链接。 传统的C编译器通过调用其他程序来处理每个阶段来协调这个过程。 由于眼见为实,因此我将使用以下程序来说明该过程的每个步骤: #include 整型 主(无效) { puts(“你好,霍尔伯顿!”); 返回0; } 该程序将称为hello.c。 预处理 编译的第一阶段称为预处理。 在此阶段,预处理器将以#字符开头的行解释为预处理器命令。 在解释命令之前,预处理器会进行一些初始处理。 这包括连接连续的行(以\结尾的行)和去除注释。 要打印预处理阶段的结果,请将-E选项传递给cc : gcc -E hello.c 在此步骤中,预处理器转到上面程序顶部一行中提到的头文件,并将其与hello.c文件的内容连接在一起。 #1“ hello.c” #1“ ” #1“ ” #1“ /usr/include/stdc-predef.h” 1 3 4 #1“ ” 2 #1“ hello.c” #1“ /usr/include/stdio.h” 1 3 4 #27“ /usr/include/stdio.h” 3 4 #1“ /usr/include/features.h” 1 3 4 #374“ […]

解决编码挑战

模糊#2 可能的解决方案 简介:从模糊1移至模糊2 模糊1是Firehose软件工程程序中对面向对象编程(OOP)的介绍。 模糊1只不过是简单地输出由阵列阵列组成的图像(黑白),该阵列用于表示图像的各个像素。 这并不难。 为了清楚起见,您需要使计算机输出以下内容: 要在“模糊1”中做到这一点,您需要做的就是一起擦几根棍子,瞧,你起了火。 不,但是认真,这是关键成分 您需要一个带有参数的类。 Image类本质上是特定对象的方法和变量的模板定义。 Image类本质上为我们正在做的事情起了个名字。 但是,由于在这种情况下,我们要处理一组像素,因此需要找到一种方式来存储和表示计算机可以理解的方式。 因此,对于我们的情况,最简单的操作是创建一个数组数组。 您将需要一个使用该参数的初始化器 从那里您只需要应用一种将输出参数的方法类型 这些是这样的: 这就是它的长短。 但是,模糊2所需要的远不止于此。 经过大约1个月的时间,实际的解决方案似乎比我想象的要容易。 同时,我学习了很多有关如何编写代码的知识。 什么是Blur2? 模糊2要求您采用给定的阵列数组,并对单个像素(单元)进行模糊处理,并对紧接其周围的像素进行模糊处理。 为了更清楚地了解这一点,请看以下图片: 因此,作为编码人员,您需要查看代码,然后解密它所需要的内容,以及如何将您的想法转化为一系列代码,这些代码序列将输出使模糊原始图像周围单个像素的图像。 因此,如果以上面的两个像素转换为例,您可以看到您的代码最终应该输出与右侧图像相同的结果-您将从左侧的图像开始,但是随即完成右边的内容。 这是我首先要做的 起初我冻结了。 只是冻结。 “这到底意味着什么?” 如果您以前曾经有过这种感觉,那么您将确切地知道这是什么样的。 但是,从那时起,我花时间尝试将问题分解为合理的步骤序列,这些步骤可以根据我现有的代码知识以及其他开发人员的经验来解决。 这是我冷静下来后所做的事情 规则1:总是用简单的英语写出你想做的事情。 由于这样做之后才有意义,因此首先想出一个解决问题的计划即可为您提供参考。 显然,接下来的工作将是您需要阅读的所有代码,但是查看您想做什么并检查推理中可能存在的差距是一个不错的起点。 所以这是我的原始想法: 所以我得到了需要模糊处理的图像。 大。 我已经将我的数组连接在一起以组成一个数组数组,所以现在我需要弄清楚要模糊的实际像素在哪里 我想遍历所有像素和所有行以确定这些实际像素在哪里并将坐标存储在某处 从那里,我需要找到一种方法来模糊所标识位置的上下左右像素。 这是我犯的错误 :我在互联网上查看了其他人对此的想法,而自己本人并没有全力以赴。 这可能会更快,并且可能会在短期内带您到达目的地,但稍后会遇到问题。 对我来说,我并不完全理解其他人使用的所有代码。 我最终花了很多时间测试和检查他们的代码,而不是尝试自己开发代码。 这让我放慢了脚步,因为我没有专注于寻找对我有用的东西。 第一步 我需要先让我的代码遍历每个单元格和每一行,因此我建立了一个允许这样做的系统: 此方法有一个目标:找出1的坐标,这需要几个步骤。 换句话说,这是在寻找已经模糊的实际像素的坐标。 您会注意到, 如果cell == […]