首页 文章 精选 留言 我的

精选列表

搜索[监督学习],共10000篇文章
优秀的个人博客,低调大师

android学习笔记(1)

1.android概念 android是一个软件合集,包括操作系统,中间件和关键应用程序.(取自android sdk所带的文档) 2.android的体系结构 官方给出来的体系结构如下: 可以看到,自顶向下,android体系结构分为4层:应用程序层,框架层,库与运行时层,linux内核层. 应用程序 我们自己开发出来的程序属于这一层.应用程序使用java编程语言来写. 应用程序框架 提供了一些api,有很好的复用性. 库与运行时 库是一些基本的程序包(C/C++实现);运行时和java的运行时类似. linux内核 提供了操作系统所需的最基本的东西(包括一些驱动) 3.android历史 2005年Google收购Android公司 2007年Google联合总共34家公司成立开放手机联盟(open handset alliance,OHA) 2008年9月22日,Google第一款手机T-Mobile G1面世 2009年2月,android sdk 1.1发布 本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/08/01/2124002.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

AIDL深入学习

以下两种方式都是基于bindService启动服务。 1)一种简单的实现跨进程的方式(Binder,Messenger) http://www.open-open.com/lib/view/open1469493830770.html 使用Messenger的好处就是如果有多个请求,不会冲突,会将请求放入请求队列中一个一个执行任务。 首先要明确哪个是客户端,哪个是服务端。 Service是声明在服务端工程里的,因为要被客户端工程调用到,所以是隐式声明的: ` <service android:name=".aidl.MessengerServiceDemo" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.lypeer.messenger"></action> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </service> <activity android:name=".aidl.ActivityMessenger"/>` 服务端工程安装好后,开启客户端工程,绑定服务端声明的服务。(服务端服务不一定要事先开启了,声明了即可。) 注意:客户端工程隐式调用服务端开启的那个service,传给intent的包名是服务端的包名,并非自己的包名。 `public class MainActivity extends AppCompatActivity { static final int MSG_SAY_HELLO = 1; Messenger mService = null; boolean mBound; private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { //接收onBind()传回来的IBinder,并用它构造Messenger mService = new Messenger(service); mBound = true; } public void onServiceDisconnected(ComponentName className) { mService = null; mBound = false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.sample_text).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sayHello(view); } }); } //调用此方法时会发送信息给服务端 public void sayHello(View v) { if (!mBound) return; //发送一条信息给服务端 Message msg = Message.obtain(null, MSG_SAY_HELLO, 1, 2); try { mService.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } @Override protected void onStart() { super.onStart(); //绑定服务端的服务,此处的action是service在Manifests文件里面声明的 Intent intent = new Intent(); intent.setAction("com.lypeer.messenger"); //不要忘记了包名,不写会报错 intent.setPackage("com.example.lianxiang.cmakedemo1"); bindService(intent, mConnection, Context.BIND_AUTO_CREATE); } @Override protected void onStop() { super.onStop(); // Unbind from the service if (mBound) { unbindService(mConnection); mBound = false; } } }` 这样,在客户端就可以操作,实现与服务端工程的一个交互。 Messenger实现的进程间的交互,只是信息的传递,客户端无法直接调用服务端的方法,所以AIDL就是解决的这个问题。 2)AIDLhttp://www.open-open.com/lib/view/open1469493649028.html(上) 按照博主所说的,结果能实现。 2-1)新建aidl文件,注意新建的规则。 2-2)注意aidl及java类的目录的问题,并且保证服务端与客户端都存在aidl与java文件。 2-3)服务端声明service,service里调用aidl自动生成的java类。 2-4)客户端绑定服务端的service,调用aidl转化的类。 本文转自屠夫章哥 51CTO博客,原文链接:http://blog.51cto.com/4259297/2065985,如需转载请自行联系原作者

优秀的个人博客,低调大师

7、yum 学习笔记

Linux的程序包管理: 软件包的组成部分: 二进制程序 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 库 lib, /usr/lib, /lib64, /usr/lib64, /usr/local/lib, /usr/local/lib64 /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf 配置文件 /etc 帮助文件 man文件, info文件, README, INSTALL, ChangeLog man COMMAND 到某路径下查找与命令名同名的通常以.gz结尾的压缩文件的名字 /usr/share/man/ ldd命令: 查看应用所依赖的共享库 ldd [options] FILE... rpm包的使用: rpm包命名格式: 源程序:name-version.tar.{gz|bz2|xz} version: major.minor.release rpm包:name-version-release.arch.rpm release:通常包含rpm的制作发行号,还包含适用的OS bash-4.3.2-2.el6.x86_64.rpm 来源合法性验正: 源程序:通过md5或sha1校验码验正; rpm包:发行商提供的合法性是可信的 验正包完整性:校验码 验正来源合法:公钥 获取rpm包的途径: 1、发行商的光盘或站点服务器 以CentOS为例: http://mirrors.163.com http://mirrors.sohu.com 2、http://rpmfind.net 3、http://rpm.pbone.net rpm包管理:安装 # rpm -ivh [install-options] /path/to/rpm_package 安装软件包,显示安装进度 [install-options] --test 仅测试,不真正执行安装过程 --nodeps 忽略依赖关系 --replacepkgs 重新安装 原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件 rpm包管理:卸载 #rpm -e [install-options] package_name 卸载软件包 [install-options] --nodeps 忽略依赖关系 rpm包管理:查询 #rpm -qa 查询所有已经安装的包 #rpm -q package_name 查询某单个包是否安装 #rpm -qi package_name 查询包的描述信息 #rpm -ql package_name 查询包安装之后在当前系统生成文件列表 #rpm -qd package_name 查询包安装后生成的帮助文档 #rpm -qc package_name 查询包安装后生成的配置文件 #rpm -qf /path/to/somefile 查询某文件是哪个包安装生成的 #rpm -q --scripts package_name 查询包相关的脚本 脚本有四类: preinstall 安装前脚本 postinstall 安装后脚本 preuninstall 卸载前脚本 postuninstall 卸载后脚本 查询尚未安装的rpm包文件的相关信息: #rpm -pqi /path/to/package_file 查询包的描述信息 #rpm -pql /path/to/package_file 查询包安装之后在当前系统生成文件列表 #rpm -pqd /path/to/package_file 查询包安装后生成的帮助文档 #rpm -pqc /path/to/package_file 查询包安装后生成的配置文件 rpm包之升级: #rpm -Uvh [install-options] /path/to/package_file 升级或安装 #rpm -Fvh [install-options] /path/to/package_file 升级 [install-options] --nodeps 忽略依赖关系 --force 强行安装 rpm包管理:检查包安装后生成的文件是否被修改过; #rpm -V package_name S file Size differs M Mode differs (includes permissions and file type) 5 digest (formerly MD5 sum) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P caPabilities differ rpm包管理:检验来源合法性和软件包完整性 包完整性:通过单向加密机制(md5|sha1) 来源合法性:通过公钥加密机制(RSA) 导入制作者的公钥,CentOS发行版的公钥在iso文件中; 导入命令:rpm --import /path/to/gpg-key-file #pm -K --nosignature /path/to/package_file 只检查完整性,不检查来源合法性 #pm -K --nodigest /path/to/package_file 不检查完整性,只检查来源合法性 #pm -K /path/to/package_file 既检查完整性,又检查来源合法性 rpm包管理:数据库重建 数据库:/var/lib/rpm/ #rpm --initdb 初始化,如果事先不存在一个数据库,则新建之; #rpm --rebuilddb 重建,直接重建数据库,会覆盖原有的库; yum客户端: 1、配置文件:指定各可用的yum仓库; 2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地; 3、分析元数据:根据具体操作请求完成元数据分析, 可能包括检查依赖关系、文件列表等信息; 4、执行具体操作: 客户端配置文件指定对应服务器访问方式: ftp ftp://server/path/to/repo http http://server/path/to/repo nfs nfs://server/nfs_path file file:///path/to/repository 要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中: /etc/yum.conf /etc/yum.repos.d/*.repo 配置文件格式:由两段组成,类似windows的ini配置文件 [main] :主配置段 [repo] :仓库配置段 配置repo: [repo_ID] name=String baseurl=仓库的访问路径 enabled={1|0} gpgcheck={1|0} gpgkey=公钥文件(可以在本地,也可是服务器端路径) cost=定义此仓库开销,默认为1000 [base] name=CentOS 6.5 X86_64 relase baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/ enabled=1 gpgcheck=1 gpgkey=http://172.16.0.1/cobbler/ks_mirror/centos-6.5-x86_64/RPM-GPG-KEY-CentOS-6 yum的各命令: # yum repolist 列出所有可用yum repo #yum clean all 清理缓存 #yum list [all|installed|available] 列出[所有的安装包|已安装包|可安装包] # yum info package_name 列出包的描述信息 # yumwhatprovides|provides /path/to/somefile 查询某文件是由哪个包安装生成的 # yuminstall package_name 安装指定的程序包 # yum reinstall package_name 重新安装指定的程序包 # yumerase package_name 卸载指定的程序包 # yumcheck-update 检查可升级的包 # yumupdate package_name 升级指定的程序包 # yum downgrade package_name 降级指定的程序包 # yum grouplist 列出所有包组 # yum groupinfo "group_name" 显示包组信息 # yum groupinstall "group_name" 安装指定的包组 # yum groupremove "group_name" 卸载指定的包组 如果系统为CentOS 5,常用的开发包组为“Development Tools”和“Development Libraries” 如果系统为CentOS 6,常用的开发包组为“Development Tools”和“Server Platform Development” 安装本地包: # yum install /path/to/package_file 手动禁止检查来源及完整性:--nogpgcheck # yum --nogpgcheck install /tmp/zsh-2.3.1-2.el6.x86_64.rpm 练习:安装相关的包组,确保如下命令可执行 # gcc --version gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4) Copyright (C) 2010 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. #yum -y groupinstall "Development tools" "Server Platform Development" yum repository: 文件服务器 repodata/: repomd.xml: 测试实现yum repository的配置: 1、准备文件服务器;使用httpd为例,请事先确保已经安装httpd程序包; 2、在/var/www/html目录,使用一个目录来保存准备制作成为yum仓库的所有rpm包; # cd /var/www/html # lftp 172.16.0.1/pub/Sources/6.x86_64 # lftp: > mirror openstack # bye 3、创建yum仓库 # rm -rf /var/www/html/openstack/repodata # createrepo /var/www/html/openstack 4、启动httpd服务 # service httpd start 5、配置使用自建的yum仓库 [openstack] name=Openstack Repository baseurl=http://172.16.100.7/openstack/ enabled=1 gpgcheck=0 6、配置好epel的yum源 7、测试使用 # yum install openstack-keystone 程序包管理之编译安装: 源程序: 项目工程:把代码分散于多个源代码文件 GNU/make autoconf: configure脚本 检查编译环境是否编译需求,并定义当前程序编译时启用哪个特性或功能,以及安装路径的定义等等; 结果:会根据Makefile.in文件生成makefile文件 automake: Makefile.in文件 用于结合configure脚本生成makefile文件 makefile文件是make命令的配置文件 编译安装的步骤: 1、拿到源代码,并解压: # tar xf package-version.tar.{gz|bz2|xz} 注意:展开后的目录名通常为package-version 2、切换至源码目录中 # cd package-version 3、执行configure脚本 # ./configure 4、编译 # make 5、安装 # make install configure脚本的通用功能: 我们需要定义的配置: 1、指定安装路径: --prefix=/usr/local/package_name --sysconfdir=/etc/package_name 2、指定启用/禁用的特性: --enable-feature: 例如--enable-fpm --disable-feature: 例如 --disable-socket 3、指定所依赖功能、程序或文件 --with-function:启用某功能 --without-function:禁用某功能 不同的程序,其configure脚本功能不同,要获取帮助: ./configure --help 练习: 1、编译安装nginx, 并启动之; 2、编译安装axel,并试用之; 3、编译安装httpd,并启动之; /usr/local/apache/bin 二进制程序: # vim /etc/profile.d/apache.sh PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH export PATH 头文件输出给系统: # ln -sv /usr/local/apache/include /usr/include/httpd 库文件输出: # vim /etc/ld.so.conf.d/httpd.conf /usr/local/apache/lib 让系统重新生成库文件路径缓存 # ldconfig 导出man文件: # vim /etc/man.config MANPATH /usr/local/apache/man 本文转自开源殿堂 51CTO博客,原文链接:http://blog.51cto.com/kaiyuandiantang/1942716,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS学习——ViewController(六)

ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图。 iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController)、导航控制器(UINavigationController)、标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等。 按结构可以对iOS的所有ViewController分成两类: 1、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。 2、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController的容器。如UINavigationController,UITabbarController。它们都有一个属性:viewControllers。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,因此后一个ViewController一般会依赖前一个ViewController。而UITabbarController表示一个Array结构,各个ViewController是并列的。 ViewController使用 UIViewController可以使用两种方式创建,1、xib方式,2、代码方式 1)xib方式 Command+N 新建文件,选Cocoa Touch UIViewController subclass,SubClass of UIViewController,勾选with XIB for user interface。定义ViewController名字是MainViewController,最终生成MainViewController.h MainViewController.m MainViewController.xib三个文件。在AppDelegate.m文件的 didFinishLaunchingWithOptions方法中加载xib文件。 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil]; self.window.rootViewController=vc; [self.window makeKeyAndVisible]; return YES; 加载xib文件后,在xib文件拖拽几个控件可看到效果。 2)代码创建 Command+N 新建文件UIViewController文件,在AppDelegate.m文件的didFinishLaunchingWithOptions方法中使用。在UIViewController的loadView方法中使用代码创建view。 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. self.window.backgroundColor = [UIColor whiteColor]; // MainUIViewController *vc=[[MainUIViewController alloc]initWithNibName:@"MainUIViewController" bundle:nil]; // self.window.rootViewController=vc; RootViewController *rc=[[RootViewController alloc] init]; self.window.rootViewController=rc; [self.window makeKeyAndVisible]; return YES; } 创建View - (void)loadView{ [super loadView]; UIView *view=[[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; view.alpha=0.5; view.backgroundColor=[UIColor cyanColor]; self.view=view; } ViewController的生命周期 前面写了iOS应用程序的生命周期,这里会写到ViewController的生命周期,这个更像Android的Activity的生命周期(见文章最后的图)。ViewController生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。 1)init方法 初始化ViewController本身。 2)loadView方法 当view需要被展示而它却是nil时,viewController会调用该方法。 如果代码维护View的话需要重写此方法,使用xib维护View的话不用重写。 3)viewDidLoad方法 执行完loadView后继续执行viewDidLoad,loadView时还没有view,而viewDidLoad时view已经创建好了。 4)viewDidUnload方法 当系统内存吃紧的时候会调用该方法,内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式。 在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)。 在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等。 一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行。 5)dealloc 释放其他资源或内存。 viewController的生命周期图 ViewController加载view过程,见下图(loadView) 1)loadView ViewController卸载View过程见(unLoadView) 2)unLoadView /** * @author 张兴业 * http://blog.csdn.net/xyz_lmn * iOS入门群: 83702688 * android开发进阶群: 241395671 * 我的新浪微博: @张兴业TBOW */ 参考: https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007457-CH1-SW1 http://xcodev.com/341.html http://iostrack.com/post/2012-07-20/40029700941 Activity生命周期 本文转自xyz_lmn51CTO博客,原文链接: http://blog.51cto.com/xyzlmn/1230733,如需转载请自行联系原作者

优秀的个人博客,低调大师

Hadoop学习笔记一

第一个hands-on入门程序: 参考 http://blog.csdn.net/sim_szm/article/details/12578055 搭建环境并跑WordCount程序,区别是我安装的是最新的hadoop版本0.23.11,JDK我使用的是Sun JDK,Linux使用的是国产的Kylin。 问题一:Error: JAVA_HOME is not set and could not be found. 解决方案: /etc/profile 文件中export JAVA_HOME ${HADOOP_HOME}/libexec/hadoop-config.sh 显式export JAVA_HOME ${HADOOP_HOME}/etc/hadoop/yarn-env.sh显式export JAVA_HOME 问题二:NameNode 没有启动 解决方案: 删除core-site.xml文件中配置的tmp目录 运行 hadoop namenode -format 命令 再运行sbin目录下的start-dfs.sh脚步启动NameNode和datanode 问题三:为何需要SSH 解决方案:Hadoop集 群成员的通讯机制都是使用SSH,即使是单机环境,内部脚本也会运行 ssh localhost进行处理,所以安装SSH是必须的。 本文转自sarchitect 51CTO博客,原文链接:http://blog.51cto.com/stevex/1535193,如需转载请自行联系原作者

优秀的个人博客,低调大师

lvm相关命令学习

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 我的博客已迁移到xdoujiang.com请去那边和我交流 基础环境 1、当前版本 cat /etc/debian_version 7.8 2、安装包lvm2 apt-get install lvm2-y 一、将sdbsdcsdd三块分区加到卷组(hadoop),并创建5G的逻辑卷(hadoop1),PE默认 1、使用pvcreate命令将sdbsdcsdd分区创建成物理卷(pvcreate-initializeadiskorpartition for usebyLVM) pvcreate /dev/sdb /dev/sdc /dev/sdd Writingphysicalvolumedatatodisk "/dev/sdb" Physicalvolume "/dev/sdb" successfullycreated Writingphysicalvolumedatatodisk "/dev/sdc" Physicalvolume "/dev/sdc" successfullycreated Writingphysicalvolumedatatodisk "/dev/sdd" Physicalvolume "/dev/sdd" successfullycreated EXAMPLES Initializepartition #4onthethirdSCSIdiskandtheentirefifthSCSIdiskforlaterusebyLVM: pvcreate /dev/sdc4 /dev/sde 2、使用pvs或pvdisplay命令查看 1)pvs(pvs-reportinformationaboutphysicalvolumes) PVVGFmtAttrPSizePFree /dev/sdb lvm2a--10.00g10.00g /dev/sdc lvm2a--10.00g10.00g /dev/sdd lvm2a--10.00g10.00g 2)pvdisplay(pvdisplay-displayattributesofaphysicalvolume) "/dev/sdb" isanewphysicalvolumeof "10.00GiB" ---NEWPhysicalvolume--- PVName /dev/sdb VGName PVSize10.00GiB AllocatableNO PESize0 TotalPE0 FreePE0 AllocatedPE0 PVUUIDOkVC5O-SWOq-daXZ-BrNy-Hy83-G9Sm-d8bMT4 "/dev/sdc" isanewphysicalvolumeof "10.00GiB" ---NEWPhysicalvolume--- PVName /dev/sdc VGName PVSize10.00GiB AllocatableNO PESize0 TotalPE0 FreePE0 AllocatedPE0 PVUUID7vg9eM-pIRR-Ahi0-BNvn-A1pr-WQa0-hvdC9X "/dev/sdd" isanewphysicalvolumeof "10.00GiB" ---NEWPhysicalvolume--- PVName /dev/sdd VGName PVSize10.00GiB AllocatableNO PESize0 TotalPE0 FreePE0 AllocatedPE0 PVUUIDMyPYTC-Vk4P-ltjL-SX6w-jK3V-422c-HACxOK 3、使用vgcreate命令创建hadoop卷组并将sdbsdcsdd加入到卷组里(vgcreate-createavolumegroup) vgcreatehadoop /dev/sdb /dev/sdc /dev/sdd Volumegroup "hadoop" successfullycreated 这里使用默认的PE4MB EXAMPLES Tocreateavolumegroupnamedtest_vgusingphysicalvolumes /dev/sdk1 ,and /dev/sdl1 withdefaultphysicalextentsizeof4MB: vgcreatetest_vg /dev/sdk1 /dev/sdl1 4、使用vgs或vgdisplay命令查看 1)vgs(vgs-reportinformationaboutvolume groups ) VG #PV#LV#SNAttrVSizeVFree hadoop300wz--n-29.99g29.99g 2)vgdisplay(vgdisplay-displayattributesofvolume groups ) ---Volumegroup--- VGNamehadoop SystemID Formatlvm2 MetadataAreas3 MetadataSequenceNo1 VGAccess read /write VGStatusresizable MAXLV0 CurLV0 OpenLV0 MaxPV0 CurPV3 ActPV3 VGSize29.99GiB PESize4.00MiB TotalPE7677 AllocPE/Size0/0 FreePE/Size7677/29.99GiB VGUUID9BpObQ-0qNt-7MRM-cJ4Y-aMyE-5ZEd-GoSi9N 5、使用lvcreate命令创建逻辑卷为hadoop1大小是5G(lvcreatecreatesanewlogicalvolume in avolumegroup) lvcreate-L5G-nhadoop1hadoop Logicalvolume "hadoop1" created -L,--sizeLogicalVolumeSize[bBsSkKmMgGtTpPeE] Givesthesizetoallocate for thenewlogicalvolume.AsizesuffixofK for kilobytes,M for megabytes, G for gigabytes,T for terabytes,P for petabytesorE for exabytesisoptional.Defaultunitismegabytes. 6、使用lvs或lvdisplay命令查看 1)lvs(lvs-reportinformationaboutlogicalvolumes) LVVGAttrLSizePoolOriginData%MoveLogCopy%Convert hadoop1hadoop-wi-a---5.00g 2)lvdisplay(lvdisplay-displayattributesofalogicalvolume) ---Logicalvolume--- LVPath /dev/hadoop/hadoop1 LVNamehadoop1 VGNamehadoop LVUUIDy8CHyc-G7du-h9jZ-XV4T-dvZC-bzv1-NdsbS0 LVWriteAccess read /write LVCreationhost, time debian,2015-06-1223:51:09-0400 LVStatusavailable #open0 LVSize5.00GiB CurrentLE1280 Segments1 Allocationinherit Readaheadsectorsauto -currently set to256 Blockdevice254:0 7、将 /dev/hadoop/hadoop1 格式化成ext4 mkfs.ext4 /dev/hadoop/hadoop1 8、写进 /etc/fatab 中并挂载 /dev/mapper/hadoop-hadoop1 /hadoop ext4defaults00 mount -a 9、查看是否挂载成功 df -Th FilesystemTypeSizeUsedAvailUse%Mountedon rootfsrootfs9.2G1.7G7.1G19%/ udevdevtmpfs10M010M0% /dev tmpfstmpfs99M256K99M1% /run /dev/disk/by-uuid/f730250f-21de-45dd-a3e7-6c5d74508f4b ext49.2G1.7G7.1G19%/ tmpfstmpfs5.0M05.0M0% /run/lock tmpfstmpfs961M0961M0% /run/shm /dev/sda5 ext417G180M16G2% /opt /dev/mapper/hadoop-hadoop1 ext45.0G138M4.6G3% /hadoop 二、将 /dev/mapper/hadoop-hadoop1 逻辑卷夸大到40G并挂载 1、使用pvcreate命令将sde分区创建成物理卷 pvcreate /dev/sde Writingphysicalvolumedatatodisk "/dev/sde" Physicalvolume "/dev/sde" successfullycreated 2、使用vgextend命令将sde加入到卷组hadoop(vgextend-addphysicalvolumestoavolumegroup) vgextendhadoop /dev/sde Volumegroup "hadoop" successfullyextended Examples vgextendvg00 /dev/sda4 /dev/sdn1 triestoextendtheexistingvolumegroupvg00 bythenewphysicalvolumes(seepvcreate(8)) /dev/sdn1 and /dev/sda4 . 3、先查看下卷组有多少PE vgdisplay ---Volumegroup--- VGNamehadoop SystemID Formatlvm2 MetadataAreas4 MetadataSequenceNo8 VGAccess read /write VGStatusresizable MAXLV0 CurLV1 OpenLV1 MaxPV0 CurPV4 ActPV4 VGSize39.98GiB PESize4.00MiB TotalPE10236 AllocPE/Size8956/34.98GiB FreePE/Size1280/5.00GiB VGUUID9BpObQ-0qNt-7MRM-cJ4Y-aMyE-5ZEd-GoSi9N 一共有10236个PE 4、使用lvextend命令将现有逻辑卷为hadoop1增大到40G(lvextend-extendthesizeofalogicalvolume) lvextend-l10236 /dev/hadoop/hadoop1 Extendinglogicalvolumehadoop1to39.98GiB Logicalvolumehadoop1successfullyresized -l,--extents[+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}] Extendor set thelogicalvolumesize in units oflogicalextents. 5、使用resize2fs命令扩大文件系统(resize2fs-ext2 /ext3/ext4 file systemresizer) resize2fs /dev/hadoop/hadoop1 resize2fs1.42.5(29-Jul-2012) Filesystemat /dev/hadoop/hadoop1 ismountedon /hadoop ;on-lineresizingrequired old_desc_blocks=1,new_desc_blocks=3 Performinganon-lineresizeof /dev/hadoop/hadoop1 to10481664(4k)blocks. Thefilesystemon /dev/hadoop/hadoop1 isnow10481664blockslong. 6、最后检查下是否扩大到40G了 df -Th FilesystemTypeSizeUsedAvailUse%Mountedon rootfsrootfs9.2G1.7G7.1G19%/ udevdevtmpfs10M010M0% /dev tmpfstmpfs99M260K99M1% /run /dev/disk/by-uuid/f730250f-21de-45dd-a3e7-6c5d74508f4b ext49.2G1.7G7.1G19%/ tmpfstmpfs5.0M05.0M0% /run/lock tmpfstmpfs961M0961M0% /run/shm /dev/sda5 ext417G180M16G2% /opt /dev/mapper/hadoop-hadoop1 ext440G143M38G1% /hadoop 三、参考文章 https: //wiki .archlinux.org /index .php /LVM_ %28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29 本文转自 xdoujiang 51CTO博客,原文链接:http://blog.51cto.com/7938217/1661595,如需转载请自行联系原作者

优秀的个人博客,低调大师

开始python学习了

今晚折腾了半天,终于在mac上把python开发ide搞好了。 本来是打算使用eclipse+pydev的,结果在eclipse marketplace里面搜索到得pydev插件无法安装,一直是提示网络连接错误。 后面找到Komodo edit,打开之后在界面上没有找到直观的运行和调试python的菜单选项,也放弃了。 接下来,安装了pythonCharm,界面有点类似android studio和eclipse,所以很快就找到了运行和调试菜单项。 所以,就选它了,O(∩_∩)O~。 本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/p/4449132.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

docker学习笔记(1)

(1)Docker介绍 关于Docker的介绍,我就不列举出来了。到百度、谷歌搜索。非常多介绍文章。以下我给出官网的介绍:https://www.docker.com/whatisdocker/ (2)体验Docker Docker官网提供了一个体验的交互教程:https://www.docker.com/tryit/ 想要尝尝鲜的能够去试一试。对docker有个大概了解。 (3)Ubuntu下Docker的安装 不同系统下docker的安装有些不一样,以下我是在ubuntu14.04 x64系统下安装。Docker官方推荐最佳的系统是Ubuntu x64。 $ sudo apt-get update $ sudo apt-get install docker.io $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.i 假设想要使用最新的Docker,要检查APT系统能处理https,文件 /usr/lib/apt/methods/https 应该存在,假设不存在。则须要安装包 apt-transport-https apt-get update apt-get install apt-transport-https 然后。加入docker repositor $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21 $ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\ > /etc/apt/sources.list.d/docker.list" $ sudo apt-get update $ sudo apt-get install lxc-docker 到这里,docker安装完毕,要检验docker是否成功安装,能够输入以下命令检查: $ sudo docker run -i -t ubuntu /bin/bas 备注:其它操作系统。如Centos、Debian的安装见官网教程:https://docs.docker.com/installation/#installation (4)经常使用命令 在上面的安装完毕后。在终端命令行下输入:docker,会列出非常多命令,以下我列举几个最经常使用的命令。 A、docker images--------------查看images B、docker ps--------------------查看正在执行的container C、docker pull ----------------下载image活repository D、docker commit------------创建新的image E、docker rm-------------------删除container F、docker rmi-------------------删除image G、docker run-----------------在新的container中执行image或command (5)在docker下安装ubuntu A、docker pull ubuntu:14.04 这个命令表示下载ubuntu 14.04版镜像 下载完毕后。我们能够输入docker images查看全部镜像。能够看到我们刚刚下载的ubuntu镜像。 B、执行ubuntu 14.04 镜像 docker run -i -t ubuntu:14.04 输入docker run命令能够查看run下的參数意义。成功执行后,我们会进入例如以下的终端显示界面: b2a2e188ae57表示HOSTNAME。这里你执行的结果可能和我不一样,以下你就能够在这个ubuntu系统下操作。 C、保存操作记录 在进入到虚拟系统后。我们在里面做一些操作,比如在根文件夹下创建一个test.txt文件。 touch test.txt。 然后退出系统:exit。 在下次我们再次执行这个系统时,会发如今根文件夹下不存在test.txt,也就是说我们之前的操作没有保存。要想保存在虚拟系统里的操作。要用到docker commit命令 在我们运行了touch test.txt创建了文件后,使用exit退出系统。 然后输入:docker commit b2a2 ubuntu:14.04,这里b2a2是之前执行的image的标示ID。不用输入所有。仅仅需4个左右字符就可以。 这个命令表示将之前对镜像的操作保存到ubuntu:14.04下。也就是我们执行的镜像,下次再次执行docker run -t -i ubuntu:14.04,就能够看到根文件夹下的test.txt文件。假设想对保存到新的镜像。仅仅需将ubuntu:14.04改成你想要的名称就可以。 如:docker commit b2a2 myubuntu,输入docker iamges。就能够看到myubuntu,当然之前的ubuntu:14.04还在。 參考: (1)https://docs.docker.com/installation/#installation 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5227674.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

IOS开发博客学习

M了个J :http://www.cnblogs.com/mjios/tag/objective-c/ http://www.cnblogs.com/tianjian/p/3358602.html Cocos2d-x VS环境配置 泰然论坛:http://www.ityran.com/archives/category/cocos2d-iphone 1.http://www.cnblogs.com/zilongshanren/archive/2011/09/19/2181558.html 非常适用的入门教程 2.http://www.cnblogs.com/BigPolarBear/tag/iOS/ 3.一些相应的环境配置,以及简单语法介绍,适合入门 http://blog.csdn.net/xiaominghimi/article/details/6937685 http://blog.csdn.net/sdhjob/article/details/8173176 沈大海 4.Cocos2d-x的使用 http://cocos2d.cocoachina.com/ http://cocos2d.cocoachina.com/resource 重要的博客http://blog.csdn.net/honghaier/article/details/7887873 Cocos2d-x视频教程 http://www.tudou.com/plcover/Yofz8yOj62c/ 5.http://www.cnblogs.com/zilongshanren/archive/2012/02/17/2356516.htm http://www.cnblogs.com/zilongshanren/tag/cocos2d/ 8.http://blog.csdn.net/honghaier/article/details/7887873重点 OC知识点 1.http://rzchina.blog.163.com/blog/#m=0&t=1&c=fks_084069084082083074087082094095085094080066084083087074083 本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3351269.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

SpringCloud学习资料大全

此篇文章主要整理一些优秀的博客及别人已经整理好的脚手架项目,帮助想用sc(spring cloud简称sc,后文同)而又无处下手的小白快速使用这个高(diao)大(zha)上(tian)的微服务框架。當然如果你對spring boot沒有瞭解的話,建議你先簡單學習一下然後再著手SC。 技术落地方案 http://www.jianshu.com/p/1c0ee18140c2 SC优秀博客 许进 跟我学Spring Cloud 方志朋 Spring Cloud 专栏 程序猿DD liaokailin的专栏 周立 Spring Cloud SpringCloud官方网站 [英文](http://projects.spring.io/spring-cloud/) [中文](https://springcloud.cc/) 推荐github和码云上的sc项目 脚手架项目 SpringCloud-Learning Spring Cloud微服务实战视频教程配套代码 基于 Spring Cloud 的微服务架构 文档类 使用Spring Cloud与Docker实战微服务

优秀的个人博客,低调大师

Android AIDL学习(二)

本文主要写在同一个module中如何使用不同进程的服务。 在测试机的/mnt/sdcard/路径下放一首mp3格式的音乐文件,故音乐文件的路径为/mnt/sdcard/music.mp3。 新建项目,使用默认module,在moudle下新建AIDL文件夹,创建一个AIDL文件IPlayServiceAIDL.aidl,并在文件中添加play()与stop()方法,aidl文件中不可使用private,protected,public等关键词,但返回值要标明,创建好之后点击build->make project来编译工程。 package com.mazaiting.aidldemo2; interface IPlayServiceAIDL { void play(); void stop(); void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); } 在项目的java目录下创建PlayService.java类,并继承Service。在PlayService中的onBind方法中返回一个IBinder对象,这个对象可new IPlayServiceAIDL.Stub()来得到,并实现其中的方法,如果哪个方法你不需要,则可以不实现它。 public class PlayService extends Service { private MediaPlayer mediaPlayer; public PlayService() { } @Override public IBinder onBind(Intent intent) { try{ mediaPlayer = new MediaPlayer(); String path = Environment.getExternalStorageDirectory()+"/music.mp3"; File file = new File(path); FileInputStream fis = new FileInputStream(file); mediaPlayer.setDataSource(fis.getFD()); mediaPlayer.setLooping(true); }catch (Exception e){ e.printStackTrace(); } return mBinder; } private IBinder mBinder = new IPlayServiceAIDL.Stub(){ @Override public void play() throws RemoteException { if (mediaPlayer.isPlaying()){ return; } mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); } @Override public void stop() throws RemoteException { if (mediaPlayer.isPlaying()){ mediaPlayer.stop(); } } @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } }; } 接下来在AndroidManifest.xml文件中对PlayService进行配置,首先先配置一个访问内存卡的权限,其次在service节点内配置android:process=":remote",此语句表示运行在remote进程中,最后在service节点下配置intent-filter,并在intent-filter中配置action,action的name属性就配置为PlayService的包名+类型。 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".PlayService" android:enabled="true" android:exported="true" android:process=":remote"> <intent-filter> <action android:name="com.mazaiting.aidldemo2.PlayService" /> </intent-filter> </service> </application> 简单的编写MainActivity.java的布局文件,两个水平排列的按钮,一个用于播放音乐,一个用于暂停播放。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="start" /> <Button android:id="@+id/btn_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="stop" /> </LinearLayout> 接下来实现MainActivity.java中的代码,按钮的初始化及设置点击事件不再赘述,在onResume方法中调用bindService对服务进行绑定, 此方法有三个参数,第一个参数为Intent,并为其设置Action,第二个参数为ServiceConnection对象,方法中用于获得AIDL远程调用的对象,第三个方法参数为一个int值,一般设置它为 Context.BIND_AUTO_CREATE。在onPause方法中调用unbindService对绑定的服务进行解绑。点击按钮时分别调用start,stop方法来控制音乐的播放与暂停。 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String ACTION = "com.mazaiting.aidldemo2.PlayService"; private Button btnStart,btnStop; private IPlayServiceAIDL mBinder; private ServiceConnection mConncet = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = IPlayServiceAIDL.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { mBinder = null; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } @Override protected void onResume() { super.onResume(); Intent service = new Intent(ACTION); bindService(service,mConncet, Context.BIND_AUTO_CREATE); } @Override protected void onPause() { super.onPause(); unbindService(mConncet); } private void initView() { btnStart = (Button) findViewById(R.id.btn_start); btnStop = (Button) findViewById(R.id.btn_stop); btnStart.setOnClickListener(this); btnStop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_start: try { mBinder.play(); } catch (RemoteException e) { e.printStackTrace(); } break; case R.id.btn_stop: try { mBinder.stop(); } catch (RemoteException e) { e.printStackTrace(); } break; } } }

优秀的个人博客,低调大师

Android AIDL学习(一)

在测试机的/mnt/sdcard/路径下放一首mp3格式的音乐文件,故音乐文件的路径为/mnt/sdcard/music.mp3 在Android Studio中创建一个空的Android项目,在项目下新建client与server两个module。 首先操作server这个module,先创建一个AIDL文件夹,在Studio中可以直接选择AIDL文件夹新建,因此不用考虑文件的路径,直接选择默认的就好,接下来在AIDL文件夹下新建IPlayServiceAIDL.aidl文件,直接选择AIDL文件新建,则可以省去自己写文件中的部分代码。接下来在添加两个方法,一个为play(),一个为stop(),切勿使用private,protected,public来修饰,但必须要写返回值。然后build->make project编译工程。 package com.mazaiting.server; interface IPlayServiceAIDL { void play(); void stop(); void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); } 编译成功后,如下图路径中所示,会生成一个IPlayServiceAIDL文件。 接下来在java的包下创建一个PlayService,创建时最好创建一个Service文件,这样可以少写一些代码。由于本文主要写AIDL的使用,故主要说明AIDL的使用流程,至于如何播放音频,后续再进行讲解。接着在 PlayService中的onBind方法中返回一个IBinder对象,这个IBinder对象是由IPlayServiceAIDL.Stub 创建出来的,IBinder对象创建方法如下: private IBinder mBinder = new IPlayServiceAIDL.Stub(){ @Override public void play() throws RemoteException { } @Override public void stop() throws RemoteException { } @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } }; 在onBinder方法中将mBinder返回就好。PlayService完整代码如下: public class PlayService extends Service { private MediaPlayer mediaPlayer; public PlayService() { } @Override public IBinder onBind(Intent intent) { try{ mediaPlayer = new MediaPlayer(); String path = Environment.getExternalStorageDirectory()+"/music.mp3"; File file = new File(path); FileInputStream fis = new FileInputStream(file); mediaPlayer.setDataSource(fis.getFD()); mediaPlayer.setLooping(true); }catch (Exception e){ e.printStackTrace(); } return mBinder; } private IBinder mBinder = new IPlayServiceAIDL.Stub(){ @Override public void play() throws RemoteException { if (mediaPlayer.isPlaying()){ return; } mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); } @Override public void stop() throws RemoteException { if (mediaPlayer.isPlaying()){ mediaPlayer.stop(); } } @Override public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException { } }; } 打开server这个module中的AndroidManifest.xml,并配置清单文件。 首先需要配置访问内存卡权限android.permission.READ_EXTERNAL_STORAGE,其次需要在service节点中配置android:process=":remote" 属性,表示运行在单独的进程,并在service节点下intent-filter中配置action为com.mazaiting.server.PlayService。配置清单如下: <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <service android:name=".PlayService" android:process=":remote" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.mazaiting.server.PlayService"/> </intent-filter> </service> </application> 6.接下来操作client这个module,在client中创建AIDL文件夹,将server中的IPlayServiceAIDL.adil文件拷贝到client的AIDL文件夹中,拷贝时注意文件的包名,路径一定要相同。如图: 目录结构 注意观察两个aidl文件夹下的包名及文件,是完全相同的。 7.在java中创建MainActivity.java,并创建activity_main.xml布局文件,其中布局文件内容为: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context="com.mazaiting.aidldemo1.MainActivity" > <Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="start" /> <Button android:id="@+id/btn_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="stop" /> </LinearLayout> 接下来编写Activity中的代码,远程调用时我们需要调用boolean bindService(Intent service, ServiceConnection conn, int flags)方法来进行绑定,其中Intent 为其设置PlayService的action,ServiceConncetion的创建代码如下: private ServiceConnection mConncet = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = IPlayServiceAIDL.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { mBinder = null; } }; mBinder是一个IPlayServiceAIDL对象,在onResume中调用bindService,在onPause中调用unbindService来解除绑定。 MainActivity中的全部代码如下: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static final String ACTION = "com.mazaiting.server.PlayService"; private Button btnStart,btnStop; private IPlayServiceAIDL mBinder; private ServiceConnection mConncet = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mBinder = IPlayServiceAIDL.Stub.asInterface(service); } @Override public void onServiceDisconnected(ComponentName name) { mBinder = null; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } @Override protected void onResume() { super.onResume(); Intent service = new Intent(ACTION); bindService(service,mConncet, Context.BIND_AUTO_CREATE); } @Override protected void onPause() { super.onPause(); unbindService(mConncet); } private void initView() { btnStart = (Button) findViewById(R.id.btn_start); btnStop = (Button) findViewById(R.id.btn_stop); btnStart.setOnClickListener(this); btnStop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_start: try { mBinder.play(); } catch (RemoteException e) { e.printStackTrace(); } break; case R.id.btn_stop: try { mBinder.stop(); } catch (RemoteException e) { e.printStackTrace(); } break; } } }

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册