Ⅰ windows 进程管理源代码详解,要详细的,
Windows 是闭源开发的商业软件,受商业版权法保护,别说大家都没有,就算有也不能给你的(被微软起诉那可不是小事)。
linux的是开源的,干嘛不去读Linux源码呢?
新版本的太长,写不开,给你最经典的0.11版的进程管理源码。其他的你自己去查。作为一个好的程序员,必须学会充分利用搜索引擎。
---------------------------------------
linux0.11通过一个进程数组管理进程,最大允许64个进程存在。进程的状态有就绪态,运行态,暂停态,睡晌散迅眠态和僵死态等。睡眠态又可分为可中断和不可中断两种。对于进程的管理,我觉得按照进程的状态来讲会清晰一些。
1.0号任务
0号比宴此较特殊,是"纯手工制作",下面就是制作过程
mem_init(main_memory_start,memory_end);
trap_init();
blk_dev_init();
char_dev_init();
tty_init();
time_init();
sched_init();
buffer_init(buffer_memory_end);
hd_init();
floppy_init();
sti();
move_to_user_mode();
这么多init当然不全是为0任务准备的,他们是初始化系统。对任务0来说,重要的是sched_init()和move_to_user_mode()两个。sched_init()中手动设置了任务0的任务段描述符tss和局部段描述符ldt,并设置了tr和ldtr寄存器:
set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss)); //设置tss段描述符
set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt));//设置ldt描述符
...
ltr(0); //加载tss描述符地址到tr
lldt(0); //加载ldt描述符地址到ldtr
我们来看一下任务0的tss和ldt是什么样子
/*ldt*/ {0,0},\
{0x9f,0xc0fa00},\
{0x9f,0xc0f200},\
/*tss*/{0,PAGE_SIZE+(long)&init_task,0x10,0,0,0,0,(long)&pg_dir,\
0,0,0,0,0,0,0,0,\
0,0,0x17,0x17,0x17,0x17,0x17,0x17,\
_LDT(0),0X80000000,\
{}\
},\
从ldt 可以看到,任务的代码和数据段均为640k,基址为0,DPL=3。这说明虽然任务0的代码还是处在内核段内,但是任务的级别已经是用户态了。从tss也可以看到这一点,代码和数据都被置为0x17,也就是局部段描述符表第2项。还可以看到任务0的内核掘历太堆栈被设置在init_task之后的一页处,用户态堆栈就是move_to_user_mode之前的内核态堆栈。这和普通进程不一样,普通进程的用户态堆栈在其64Mb地址空间的末端。
move_to_user_mode是在堆栈中创建一个任务切换的假象,用iret跳转到外层3,这样cpu就会自动根据tr加载tss,并初始化各个寄存器运行任务0。所以,任务0其实就是内核空间中的用户态任务。
2.进程的创建
进程创建是由系统调用sys_fork完成的,主要使用了两个函数find_empty_process和_process。前者在进程在进程数组中找一个不用的进程号给子进程,后者完成子进程信息的创建,主要是复制父进程的信息。
我们来看一下_process的代码:
int _process(int nr,long ebp,long edi,long esi,long gs,long none,
long ebx,long ecx,long edx,long fs,long es,long ds,
long eip,long cs,long eflags,long esp,long ss)
{
struct task_struct *p;
int i;
struct file *f;
//首先为子进程的进程描述符分配一块内存
p=(struct task_struct *)get_free_page();
if(!p)
return -EAGAIN;
//将新任务结构指针加入数组中
task[nr]=p;
//复制当前用户的任务结构到子进程中。当然堆栈不复制
*p=*current;
//将子进程的状态设为不可中断等待,防止现在被调度
p->state=TASK_UNINTERRUPTIBLE;
P->pid=last_pid;
p->father=current->pid;
p->count=p->priority;
p->signal=0;
p->alarm=0;
p->leader=0;
p->utime=p->stime=0;
p->cutime=p->cstime=0;
p->start_time=jiffies;
p->tss.back_link=0;
//新进程的内核态堆栈在进程描述符页末端
p->tss.esp0=PAGE_SIZE+(long)p;
P->tss.ss0=0x10;
//ip为父进程调用fork的下一条指令
p->tss.eip=eip;
//fork的返回值对子进程来说是0,对父进程来说是它的pid,通过这个区别,在fork调用返回后,父子进程的代码段便被分割来,
p->tss.eax=0;
//虽然他们是在一个代码文件中写的
p->tss.ecx=ecx;
p->tss.edx=edx;
p->tss.ebx=ebx;
p->tss.esp=esp;
p->tss.ebp=ebp;
p->tss.esi=esi;
p->tss.edi=edi;
p->tss.es=es&0xffff;
p->tss.cs=cs&0xffff;
p->tss.ss=ss&0xffff;
p->tss.ds=ds&0xffff;
p->tss.fs=fs&0xffff;
p->tss.gs=gs&0xffff;
p->tss.ldt=_LDT(nr);
p->tss.trace_bitmap=0x80000000;
//如果父任务使用了协处理器,还要保存到tss中
if(last_task_used_math==current)
_asm("clts;fnsave %0"::"m"(p->tss.i387));
//为新任务设置新的代码和数据段基地址。注意,因为linux0.11只支持64M的进程空间,所以进程的线性地址空间在64M的边界处。
//然后为新任务复制父进程的页表。通过_page_tales,父子任务此时共用一个只读的代码数据段。在写操作时,写时复制会为新进程申请新的物理页面。
if(_mem(nr,p)){
task[nr]=NULL;
free_page((long)p);
return -EAGAIN;
}
for(i=0;i<NR_OPEN;i++)
if(f=p->filp)
f->f_count++;
if(current->pwd)
current->pwd->i_count++;
if(current->root)
current->root->i_count++;
if(current->executable)
current->executable->i_count++;
//设置新任务的tss和ldt描述符
set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss));
set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt));
//返回子进程的pid
return last_pid;
}
参数都是堆栈中的值,nr是调用_process之前的find_empty_process的返回值,作为任务数组的序号。
3.进程的调度
进程创建之后并不是立即执行。系统会在适当的时刻调用系统调度函数schele,它会选择适当的进程运行。调度函数可能在系统调用结束之后,进程暂停/ 睡眠/退出,时钟中断等多个地方调用。调度函数主要是通过进程的时间片来选择一个运行时间最短的进程运行。如果没有找到就运行空闲pause系统调用,在 Pause中,调度函数又会被调用。下面是主要代码
while(1){
c=-1;
next=0;
i=NR_TASKS;
p=&task[NR_TASKS];
//寻找就绪任务中运行时间最短的任务
while(--i){
if(!(*--p))
continue;
if((*p)->state==TASK_RUNNING&&(*p)->counter>c)
c=(*p)->counter,next=i;
}
//如果找到,就退出。否则重新计算任务的时间片。注意,如果没有任务,next始终为0,结果就被切换到任务0
if(c)break;
for(p=&LAST_TASK;p>&FIRST_TASK;--p)
if(*p)
(*p)->counter=((*p)->counter>>1)+(*)->priority;
}
switch_to(next);//通过长跳转,转换任务到新任务。
}
时钟中断是执行调度的重要措施,正是由于不断的执行调度,系统才能在多个任务之间进行切换,完成多任务操作系统的目标。在调度器初始化时,除了手动设置了任务0,还对8253开启了定时器中断,对系统"点火".中断中调用了do_timer函数。现在这是个很短的函数:
void do_timer(long cpl)
{
...
//根据优先级调整进程运行时间
if(cpl)
current->utime++;
else
current->stime++;
//处理定时器中断队列
if(next_timer){
next_timer->jiffies--;
while(next_timer&&next_timer->jiffies<=0){
void(*fn)(void);
fn=next_timer->fn;
next_timer->fn=NULL;
next_timer=next_timer->next;
(fn)();
}
}
..
//对进程时间片减1。如果大于0 ,表示时间片还没有用完,继续
if((--current->counter>0)return;
//注意,内核态任务是不可抢占的,在0.11中,除非内核任务主动放弃处理器,它将一直运行。
if(!cpl)return;
//调度
schele();
}
4.进程的终止
进程可以自己中止,也可以被中止信号中止。do_exit执行退出。如果它有子进程的话,子进程就会成为孤儿进程,这里会将它的孩子托付给进程1(即init进程)管理。在成为僵死进程之后,还要通知父进程,因为他的父进程可能在等它呢。
Ⅱ 源码gs是什么意思
gs就是Gear score
GS是通信接口类型,为NSS(猜闭移动子系统)中SGSN与MSC/VLR之间的接口。Gs接口,采用7号信令承载上承载BSSAP+协议。
SGSN通过GS接口和MSC配合完成对MS的移动性管理功能,包括联合的Attach/Detach、联合的路由区/位置区更新等操作。SGSN还将接收从MSC来的电路型寻呼信息,并通过PCU下发到MS。如果不提供Gs接口,则无法进行寻呼协调,网络只能工作在操作模式II或III,不利于提高神谈系统接通率;如穗瞎裂果不提供Gs接口,则无法进行联合位置路由取位置更新,不利于减轻系统信令负荷。
Ⅲ 软件开发
方向很多 就一般java方向而言(另外还有C++、C#等多种):
Unix/Linux操作系统
Unix开发环境
Unix操作系统概述、Unix文件系统、Unix的Kernel和Shell、远程登录的原理、用户管理命令、基本文件和目录操作命令、Unix操作系统的特殊字符、使用vi命令编辑文本文件、使用FTP进行文件传输、初始化文件及环境变量的配置、Shell脚本及crontab命令。
熟练掌握Sun Solaris Unix系统基本操作命令,能够胜任Unix/Linux系统下的Java程序开发和管理工作。
Java SE开发
Java语言基础
Java SE 6.0核心语念稿尺法归纳讲解,包括Java语言的特点、环境的配置、开发基本命令、类的定义技巧、方法调用过程、对象生成原理与内存分布、标识符、关键字和数据类型、运算符和表达式、Java商业运算要点、流程控制语句、Java数组和链表等算法和数据结构;同时掌握Eclipse开发工具的使用。
熟练掌握Java核心语法
Java面向对象编程
囊括了Java面向对象的精髓,包括面向对象三大特性——封装、继承与多态,各种修饰符在面向对象思想下的综合运用,抽象类的特点和使用技巧,面向接口编程的思想和实践,内部类的应用,JDK核心类包括Object、String、Date和Calendar等类的使用和设计思想,正则表达式,自动封箱和解箱,Java异常处理,Java集合框架,泛型的语法和使用等。
熟练掌握Java面向对象思想
Java高级应用
主要研究:中高级软件工程师仔高的必修利器——Java反射编程,Java图形开发组件的开发步骤和应用技巧,事件模型的设计理念和应用,Java多线程编程,Java的I/O流,Java网络编程等。
熟练掌握Java高级编程,这部分是作为高级程序员必须掌握的技术
XML语法与解析
XML(eXtensible Markup Language)的中文名称是可扩展标记语言,是树形的概念层次结构,简而言之它就是一种保存结构化数据的格式。XML作为一种面向内容的描述语言,通过基于树形数据结构的层次化概念分类体系模型,在很大程度上弥补了HTML作为网络标准语言在概念层次关系的语义表达上的不足。
主要学习内容:XML的意义、语法结构、XML良构的规范;DTD的意义和语法、使用名称空间的技巧;Schema的意义、语法,使用Java API解析XML;基于Java DOM和SAX的XML处理技术。
掌握目前最通用的网络数据格式,并能熟练在商业开发中应用
数据库编程
Oracle SQL
Oracle公司的Oracle数据库产品是当今的高端企业级应用的主流产品。我们主要学习:Oracle 10g数据库原理,SQL语句(DDL、DML、TCL、DCL)的语法,项目中经典SQL语句重现,Oracle数据库函数包括字符函数、数值函数、日期函数、数据类型转换函数以及组函数,数据库的设计,表连接包括等值连接、非等值连接、自连接和外连接,SQL子查询,Oracle序列对象在项目中的运用,索引及视图,系统表的应用技巧,Oracle SQL的错误排查及调优解决方案。
掌握Oracle数据库设计、操作和开发
MySQL数据库
MySQL5.0数据库的管理和开发要领,掌握MySQL和Oracle数据库的异同点。
掌握MySql数据库的设计、操作和开发
JDBC编程
JDBC为敬余Java开发者使用数据库提供了统一的编程接口,使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。学习的主要内容有:JDBC的编程步骤,重要的编程接口,JDBC异常处理,JDBC中使用事务,Batch Updates批量更新,Blob/Clob等新数据类型,JNDI,DataSource,数据库连接池的管理等。逐步掌握基于JDBC的Oracle,SQLServer,DB2,MySQL等数据库连接技术。
熟练掌握Java语言对各种数据库的连接技术
系统分析与设计
软件开发流程及UML
学习软件开发过程包括瀑布模型、统一开发过程(USDP),CMMI5级软件设计规范,掌握统一建模语言UML,掌握软件的静态建模和动态建模。掌握面向对象中对象的关系。
掌握软件开发流程及UML
设计原则与模式
原则和模式是分析设计人员与程序员在开发过程中经验的总结,学习模式就是获取经验。
掌握面向对象的设计原则:“开—闭”原则(OCP)、里氏代换原则(LSP)、依赖倒转原则(DIP)、接口隔离原则(ISP)、组合/聚合复用原则(CARP)、迪米特法则(LoD)。
掌握主流的设计模式:工厂模式(Factory)、单例模式(Singleton)、观察者模式(Observer)、组合模式(Composite)、状态模式(State)等,以及重要的架构模式:Dao模式、MVC模式。
掌握面向对象的设计原则和模式。区别于激情代码,重点在于知道软件为什么要这么做,保证代码质量,保证科学的开发流程。按照CMM3的标准来设计软件和管理开发过程。
Web开发基础
HTML
基于浏览器的语言HTML:
了解HTML基本文档结构、常用的meta,掌握HTML列表和表格基本操作,了解HTTP GET和POST请求及响应的协议格式,掌握表单的基本原理,掌握GET和POST提交方式及其区别,熟练掌握常用表单元素。
掌握企业级应用客户端页面技术
CSS
CSS意为层叠样式表(Cascading Style Sheets)用于定义HTML元素的位置和样式。CSS样式定义通常存储在单独的文件中, 可以极大提高工作效率。掌握CSS基本语法和CSS选择器,掌握CSS定位技术,了解CSS内外边距、边框等特性。
掌握企业级应用客户端页面样式技术
JavaScript
基于浏览器的动态脚本技术JavaScript:
JavaScript 被设计用来向 HTML页面添加交互行为,是一种被浏览器解释执行的脚本语言。我们可以应用JavaScript来响应事件, 实现复杂交互,验证数据, 提高系统健壮性,获取和改变HTML元素及CSS属性,动态改变页面外观,逐步向RIA(Rich Internet Applications)迈进。
掌握JavaScript基本数据类型及其运算,熟练使用数组、日期等,掌握基本的对于页面元素的操作,掌握Prototype.js的基本方法,掌握HTML DOM模型,Window对象,操作Cookie,定时器等。
掌握企业级应用客户端动态脚本技术
Java Web开发
Servlet编程
学习要点:Web服务器的安装和配置,编写及部署Servlet,读取请求信息,生成响应信息,维护客户状态,过滤请求和响应,监听器的应用,对持久层资源的访问,使用包装器拦截响应,Session与Cookie技术,Servlet互操作,访问应用上下文,MVC架构模式的思想和运用。
JSP编程
JSP是在Java服务器端运行的页面,JSP本身就是一个基于文本的文档,他不仅可以包含静态的HTML内容,也可以包含动态的Java代码,服务器容器可以将JSP转换成Servlet发布,并接受请求,提供响应。
学习内容:JSP的特点、运行原理及执行过程,JSP的脚本元素,JSP指令的分类及详解,JSP中中常用的动作,JavaBean组件在JSP中的应用,JSP内置对象详解,JSP异常处理及提高程序健壮性要领,重定向与转发的本质区别,URL回写,自定义标签要领,EL表达式,JSTL核心标签库,字符集的处理和国际化。
Web系统架构
着重掌握B/S架构、B/S/A/D架构下的程序设计与开发,深入理解Web MVC架构模式,完成Web应用的调试和部署,动态发布Web应用。
Ajax编程
Ajax(Asynchronous JavaScript and XML)由 HTML、JavaScript技术、DHTML和DOM组成,这一杰出的方式可以将笨拙的Web界面转化成交互性优越的Ajax应用程序。
主要内容:Ajax技术构成及核心编程,发送请求及处理响应,Ajax数据传输格式(纯文本、XML及JSON),XMLHttpRequest详解,Ajax库及框架介绍。
Ⅳ 问道游戏架设步骤 问道游戏私服架设源码
1、服务器一台,1-1-1也可以搭建,但人数不可以多,任务开启不可多下载链接里面的服务端搭建教程:1.先安装宝塔2、放行安全组的相应端口具体要放行的端口有:3306、888、8888、5000、8101、8110、8120、8160-8168(这个是范围之8160是一线,依次类推)
2、安装数据库配置环境
3、登陆宝塔面板,在首页弹出的框中选择要安装的环境,第三个不用选择,其中mysql改为5.1,phpmyadmin改为4.0,然后选择编译安装即可。等待大约30-50分钟自动安装结束
4、配置数据库设置数据库的超级用户(root)的密码,并添加允许远程访问的root账户②、用宝塔面板的软件管理页面,重载mysql服务配置,使我们添加的远程访问生效
5、开始部署游戏数据①、第一次使用N11连接到我们服务器的mysql数据库(连接编码选择utf8),执行all.sql文件以创建游戏所需的数据库和基础数据②、断开数据库连接,设置数据库连接编码为936,然后重新连接,将dl_adb_all数据库转存为sql文件(结构和数据)③、用n++编辑我们保存好的dl_adb_all.sql文件,具体操作就是替换里面的所有外网ip为我们自己的服务器ip,如果需要改区名,就替换里面的所有问道一区为你想要的区名④、用n11删除掉dl_adb.all数据库中的表,然后运行我们保存的dl_adb_all.sql文件进行重建表结构和数据
6、部署服务器端的文件配置服务器端文件,修改aaa ccs csa dba目录下的ini配置文件的信息①修改数据库相关的IP为127.0.0.1,修改***_daili的地址为服务器的IP②修改数据密码为我们设置的数据库密码2、复制线路驱动文件rungs(想架设几条线就复制几个),复制gs/gs目录下的gs1.ini文件(同样是几条线路就复制几个)①修改gs1.ini中的ip为服务器IP②修改gs*.ini中的线路名分别问你自己数据库中设置的线路名
Ⅳ PIL利用ghostscript漏洞
基本是跟着nearg1e大神的文章走的,自己比较菜,只能膜膜大神了
https://github.com/neargle/PIL-RCE-By-GhostButt
Ubuntu16.04,PIL1.1.7,ghostscript-9.19(version <= 9.21)
首先是一个简单的Demo
这个非常简单,就是获取图片size的Demo,这里调用了PIL里Image的Image.open和Image.load函数,加载图片
进下源码,看open函数里昌中,由于这里我已经了解这个漏洞大概了,我直接看open函数对格式的判断吧
看到accept(prefix),这个prefix是前缀,文件头,也就是说这里应用了文件头,我们再跟下这个accept
这样的还有很多,也就是说,我们使用的后缀不要紧,重要的是文件头表示这是什么文件,我们试一下:
首先找一张普通图吧,这备迅配张图片是png格式,我改成jpg,然后用脚本走下。
那么我改改文件头呢?
是可以的,做到让PIL懵逼
我跟着nearg1e大神的思路走了下就是阅读 EpsImagePlugin 的源码
load之后,我们走向EpsImagePlugin
命令是 gs -q -g%dx%d -dNOPAUSE -dSAFER -sDEVICE=ppmraw -sOutputFile=%s - >/dev/null 2>/dev/null
这里就是dSAFER参数,这个参数限制了我们对文件删除、重命名以及命令执行的行为,但是牛逼的 GhostButt CVE-2017-8291 刚好就是 dSAFER 参数的 bypass。但是,这个漏洞,我一个web狗表示很纠结,于是,我先进行下不带dSAFER的尝试
我们直接把源码里的dSAFER注释掉,然后就可以了
不带dSAFER的使用,发现一切比较舒畅,我们直接利用gs的pipe通道就可以直接命令执行
我们使用这个包装过的poc,我们可以改为png后缀,进行image.load操作,发现没毛病。之后就直接进行cve吧
这让我一个web狗很纠结啊,表示二进制很渣啊。
所以,我就直接用msf吧,生成了如下poc
但是很纠结的是不行啊。
于是我又在9.21版本试仿指了一次,结果发现,可以了。
也就是说这个cve只适用于9.21版本的,所以兄弟们注意了。
由于自己不是pwn大神,所以这个cve就先放一下吧,以后功力涨了再说,先把web端搞好。
Ⅵ 有一定规模,比较正规的java软件公司是什么样的
极其流行,同样也是竞争力极其大的一种商业模式。虽然国内软件开发公司都发展壮大起来了,但是各地软件开发公司的实力及资质仍然参差不齐。下面为大家介绍下近期国内软件开发公司的排名汇总。
1:华盛恒辉科技有限公司
上榜理由:华盛恒辉是一家专注于高端软件定制开发服务和高端建设的服务机构,致力于为企业提供全面、系统的开发制作方案。逗碧在开发、建设到运营推广领域拥有丰富经验,我们通过建立对目标客户和用户行为的分山简举析,整合高质量设计和极其新技术,为您打造创意十足、有价值的企业品牌。
在军工领域,合作客户包括:中央军委联合参谋(原总参)、中央军委后勤保障部(原总后)、中央军委装备发展部(原总装)、装备研究所、战略支援、军事科学院、研究所、航天科工集团、中国航天科技集团、中国船舶工业集逗碧团、中国船舶重工集团、第一研究所、训练器材所、装备技术研究所等单位。
在民用领域,公司大力拓展民用市场,目前合作的客户包括中国中铁电气化局集团、中国铁道科学研究院、济南机务段、东莞轨道交通公司、京港地铁、中国国电集团、电力科学研究院、水利部、国家发改委、中信银行山简举、华为公司等大型客户。
2:五木恒润科技有限公司
上榜理由:五木恒润拥有咐圆员工300多人,技术人员占90%以上,是一家专业的军工信息化建设服务单位,为军工单位提供完整的信息化解决方案。公司设有股东会、董事会、监事会、工会等上层机构,同时设置总经理职位,由总经理管理公司的具体事务。公司下设有研发部、质量部、市场部、财务部、人事部等机构。公司下辖成都研发中心、西安研发中心、沈阳办事处、天津办事处等分支机构。
3、浪潮
浪潮集团有限公司是国家首批认定的规划布局内的重点软件企业,中国着名的企业管理软件、分行业ERP及服务供应商,在咨询服务、IT规划、软件及解决方案等方面具有强大的优势,形成了以浪潮ERP系列产品PS、GS、GSP三大主要产品。是目前中国高端企业管理软件领跑者、中国企业管理软件技术领先者、中国最大的行业ERP与集团管理软件供应商、国内服务满意度最高的管理软件企业。
4、德格Dagle
德格智能SaaS软件管理系统自德国工业4.0,并且结合国内工厂行业现状而打造的一款工厂智能化信息平台管理软件,具备工厂ERP管理、咐圆SCRM客户关系管理、BPM业务流程管理、
OMS订单管理等四大企业业务信息系统,不仅满足企业对生产进行简易管理的需求,并突破局域网应用的局限性,同时使数据管理延伸到互联网与移动商务,不论是内部的管理应用还是外部的移动应用,都可以在智能SaaS软件管理系统中进行业务流程的管控。
Ⅶ openwrt是基于debian
openwrt是基于debian原因如孝蔽下
openWRTOpenWrt可以被描述为一个嵌入式的 Linux 发行版。(主流路由器固件有 dd-wrt,tomato,openwrt,padavan四类)对比一个单一的、静态的系统,OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。开发背景当Linksys释放 WRT54G/GS 的源码后,网上出现了很多不同版本的固件(Firmware)去增兆尺强原有的功能。大多数的Firmware都是99%使用Linksys的源码,只有1%是加上去的,每一种Firmware都是针对特定的市场而设计,这样做有2个缺点,第一个是难以集合各版本Firmware的长处,第二个是这版本距离Linux正式发行版越来越远。OpenWrt 选择了另一条路,它从零开始,一点一点的把各软件加入进去,使其接近Linksys版Firmware的功能,而OpenWrt 的成功之处是它的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的Linux 电脑系统。发展历程OpenWrt 项目由 2004 年 1 月开始, 第一个版本是基于Linksys提供的GPL源码及uclibc中的 buildroot 项目, 这个版本称为 “stable” 版, 在网上至今仍有很多项目使用这个版本, 较为有名Freifunk-Firmware和Sip@Home.到了2005年初, 一些新的开发人员加入了这项目, 几个月后他们释出了第一个 “experimental” 版本, 这和以前版本不同的是, 这版本差不多完全舍弃了Linksys 的GPL源码, 使用了buildroot2作为核心技术, 将OpenWrt完全模块化,OpenWrt使用Linux正式发行的核心源码(2.4.30),加上了一些补丁和网络驱动,开发队伍更为OpenWrt添加了许多免费的工具,可以直接把Image写入Flash (mtd)里面,设定无线功能和VLAN交换功能,这个版本名为“White Russian”,而巧猜州1.0版本于2005年底公布。
Ⅷ 如何开发一个app
从以前的大哥大被少数人才能拥有,到现在的人手一部智能手机,在感叹科技的发展时,人们对手机中的应用也越来越挑剔,一款用户体验良好的app应用自然会受到广泛欢迎,而对开发app技术的要求也越来越全面。那么如何开发一个app让用户体验良好呢?开发app时应该注意什么,下面我们通过六个步骤来详细说明。
app开发有三种模式,定制开发、模板二次开发和免编程制作,模板二次开发和免编程制作,成本低,周期短,但开发出来,用户体验差,部分功能可能会受到限制,无法修改成客户心里预期的样子,一般像没有实力的开发团队或公司知道客户不懂技术层面,就来忽悠客户,您可要谨慎了。
按需求定制开发,这种模式相信大家不再陌生了,虽然过程经历长些,但结果是令人满意的,具体流程是这样的:
1、首先客户需要明确自己企业和产品所针对的目标用户群体,通过app想要实现什么目的或解决什么问题,app本身需要哪些功能,最好建立文档,这样在和产品经理沟通时,能提高效率,思路更清晰。
2、评估需求,根据客户提出的要求,列出需求文档,需要技术人员参与对需求的实现进行评估,包括实现的难易程度,开发成本的计算,需求文档确认后,对后期编程工作有很大的帮助。
3、产品原型UI设计,设计部门根据需求文档说明设计出UI原型,并对各个功能细节作出效果UE,最终由产品经理和客户进行确认或调整。
4、开发团队根据原型进行分配任务,开始敲代码,这个阶段是耗时最久的,前端开发-后端开发-接口对接-第三方接入-定期项目会议沟通和管控项目开展-开发预算审计。
5、.测试阶段:项目开发完成后,由测试专员针对APP进行多机型测试,测试内容包括:APP内容测试、APP性能测试、APP功能测试、APP视觉测试、对于BUG调试修复。测试合格,确认没有BUG后与客户进行沟通,开始走验收流程。
5、测试,工程开发完后,由测试工程师对app进行功能测试、性能测试、内容测试、BUG调试纠正等。最后交付客户确认。
6、源码交付客户,上线,发布到各大应用平台,后期还需要维护,企业本身可以招聘专业人员进行维护或托管外包公司都可以。
小结:从零开始,一层层敲代码完成,过程繁琐,但结果圆满,成本根据app的实现难易来决定的,虽然成本高昂但用户体验良好,能赢得市场的先机,比其他方式更安全,更稳定。
Ⅸ 如何制作app软件
随着移动手机的普及,移动APP应用软件也流行起来。“启汇网络”市场部通过调查得出一组数据:20%左右的企业已经拥有或者正在开发自己的app应用软件,60%左右的公司已经把开发app软件列入近期公司发展项目中。可以看出,大部分公司和站长都有想法把自己的网站制作成app软件,跟紧潮流步伐。但app开发涉及到的技术比较专业,开发语言要想熟悉掌握也并非一件易事。那么,在技术还未过关的情况下,如何制作app应用软件呢?
接下来,我将给大家介绍一些适合制作简单app的软件,让各位在未掌握app开发语言情况下,依然能制作出属于自己的app应用软件。
一:Appmakr
AppMakr是一个可以让你在几分钟之内创建应用程序的一种服务,无需编码能力。使用该工具,你可以创建iPhone和Android应用。还有一些可供选择的功能,包括将网站连接到你的应用程序、HTML5功能、推送通知和广告支持。通过AppMaker账户,你可以创建无限数量的应用程序。
目前Appmakr是国外比较流行的应用生成工具,在国内也享有一定知名度。
二:AppCan
AppCan属于移动应用开发平台,应用引擎支持Hybrid
App的开发和运行。并且着重解决了基于HTML5的移动应用目前"不流畅"和"体验差"的问题。使用AppCan应用引擎提供的Native交互能力,可以让HTML5开发的移动应用基本接近Native
App的体验。
与Phonegap支持单一webview使用div为单位开发移动应用不同。AppCan支持多窗口机制,让开发者可以像最传统的网页开发一样,通过页面链接的方式灵活的开发移动应用。基于这种机制,开发者可以开发出大型的移动应用,而不是只能开发简易类型的移动应用。
三:appBook
appBook平台是多平台移动应用制作工具,可以广泛用于书籍制作,个人杂志发行,宣传手册,支持iPad、iPhone、Andriod等平台,不支持pc平台。真正做到了一次编译多平台发布。目前appbook平台有:iebook平台、及、appbook应用制作平台.
曾经我也适用用软件制作APP,目的是达到了,但做出来的app比较生硬。后来我和启汇网络(广州一家比较专业的APP开发公司)技术总监Daniel聊起app开发,Daniel认为:要做好app开发,必须要有核心的app开发技术,有经验的app开发团队,才能做好满意的app应用软件。
真正要做好一个APP,也要掌握一定的app开发技术才是王道!
Tag:如何制作app,app移动应用,app外包公司,app客户端制作