使用u盘安装系统:
制作Linux启动盘(u盘):
1.确保u盘有主分区,并有标记
2.在u盘上安装GRUB引导程序
$sudo grub-install --root-directory=/media/286F-6D86《u盘的路径》 /dev/sda1《u盘所在的硬盘(挂载点)》
3.创建boot/grub/grub.cfg文件
4.将所需的ubuntu.iso文件拷贝到指定目录中
ctrl+H显示隐藏的文件
存储设备都有分区表,存储在在一个存储设备的前512字节的地址(MBR)。
Linux的分区是不同于其它操作系统分区的,它的分区格式只有存放系统文件的分区Ext2等类型和Swap则作为Linux的交换分区。Linux至少 需要两个专门的分区(Linux Native和Linux Swap)。
一般将Linux安装一个或多个类型为“Linux Native”的硬盘分区,但是在Linux的每一个分区都必须要指定一个“Mount Point”(挂起点),告诉Linux在启动时,这个目录要给哪个目录使用。
SWAP分区不用指定“Mout Point”(载入点),既然它作为交换分区,给它指定大小,它至少要等于系统上实际内存,一般来说大小是内存的1.5倍。Linux Native是存放系统文件的地方,它能用EXT2、EXT3等的分区类型.对Windows用户来说,操作系统的文件必须装在同一分区里。对 Linux来说,可以把系统文件分几个区来装(必须要说明挂起点),也可以就装在同一个分区中(挂起点是“/”)。
可以创建哪些分区(常用几种):
/boot分区,它包含了操作系统的内核和在启动系统过程中所要用到的文件,建这个分区是有必要的,如果有了一个单独的/boot启动分区,即使主要的根分区出现了问题,计算机依然能够启动。这个分区的大小”安装文件“的大小。
/usr分区,是系统存放软件的地方,大小要考虑安装的软件的多少、大小。
/home分区,是用户的home目录所在地,分区的大小取决于有多少用户。如果是多用户共同使用一台电脑的话,这个分区是完全有必要的,并且根用户也可 以很好地控制普通用户使用计算机,如对用户或者用户组实行硬盘限量使用,限制普通用户访问哪些文件等。其实单用户也有建立这个分区的必要,因为没这个分区 的话,那么你只能以根用户的身份登陆系统,这样做是危险的,因为根用户对系统有绝对的使用权,可一旦你对系统进行了误操作,麻烦也就来了。
/var /log分区,是系统日志记录分区,如果设立了这一单独的分区,即使系统的日志文件出现了问题,它们也不会影响到操作系统的主分区。
/tmp分区,用来存放临时文件。对于多用户系统、网络服务器是有必要的。即使程序运行时生成大量的临时文件,或者用户对系统进行了 错误的操作,文件系统的其它部分仍然是安全的。因为文件系统的这一部分仍然还承受着读写操作,所以它通常会比其它的部分更快地发生问题。
/bin分区,存放标准系统实用程序。
/dev分区,存放设备文件。
/opt分区,存放可选的安装的软件。
/sbin分区,存放标准系统管理文件。
总之,一般需要一个SWAP分区,一个/boot分区,一个/usr分区,一个/home 分区,一个/var/log分区。当然这并不是硬规定,完全是依照个人来决定的。但记住至少要有两个分区,一个SWAP分区,一个/分区。
Leonbao:MapKit学习笔记 1、概述
插入MapView,设置Delegate(一般为Controller),Annotations记录兴趣位置点(AnnotationView用来显示兴趣位置点),annotation是可选的,选中的annotation会显示callout,用来显示信息。 2、设置地图显示类型:
mapView.mapType = MKMapTypeStandard;
mapView.mapType = MKMapTypeSatellite;
mapView.mapType = MKMapTypeHybrid; 3、显示用户位置
设置为可以显示用户位置:
mapView.showsUserLocation = YES;
判断用户当前位置是否可见(只读属性):
userLocationVisible
得到用户位置坐标:当userLocationVisible为YES时
CLLocationCoordinate2D coords = mapView.userLocation.location.coordinate; 4、坐标范围
MKCoordinateRegion用来设置坐标显示范围。
包括两部分:Center(CLLocationCoordinate2D struct,包括latitude和longitude),坐标中心
和Span(MKCoordinateSpan struct,包括latitudeDelta和longitudeDelta),缩放级别
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(center,2000, 2000);
以上代码创建一个以center为中心,上下各1000米,左右各1000米得区域,但其是一个矩形,不符合MapView的横纵比例
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:viewRegion];
以上代码创建出来一个符合MapView横纵比例的区域
[mapView setRegion:adjustedRegion animated:YES];
以上代码为:最终显示该区域 5、Delegate
使用MapView须符合MKMapViewDelegate协议 5.1、地图加载Delegate
当需要从Google服务器取得新地图时
mapViewWillStartLoadingMap:
当成功地取得地图后
mapViewDidFinishLoadingMap:
当取得地图失败后(建议至少要实现此方法)
mapViewDidFailLoadingMap:withError: 5.2、范围变化Delegate
当手势开始(拖拽,放大,缩小,双击)
mapView:regionWillChangeAnimated:
当手势结束(拖拽,放大,缩小,双击)
mapView:regionDidChangeAnimated: 判断坐标是否在MapView显示范围内:
CLLocationDegrees leftDegrees = mapView.region.center.longitude –(mapView.region.span.longitudeDelta / 2.0);
CLLocationDegrees rightDegrees = mapView.region.center.longitude +(mapView.region.span.longitudeDelta / 2.0);
CLLocationDegrees bottomDegrees = mapView.region.center.latitude –(mapView.region.span.latitudeDelta / 2.0);
CLLocationDegrees topDegrees = self.region.center.latitude +(mapView.region.span.latitudeDelta / 2.0); if (leftDegrees > rightDegrees) { // Int’l Date Line in View
leftDegrees = -180.0 – leftDegrees;
if (coords.longitude > 0) // coords to West of Date Line
coords.longitude = -180.0 – coords.longitude;
}
If (leftDegrees <= coords.longitude && coords.longitude <= rightDegrees && bottomDegrees <= coords.latitude && coords.latitude <= topDegrees) {
// 坐标在范围内
}6、Annotation Annotation包含两部分:Annotation Object和Annotation View Annotation Object必须符合协议MKAnnotation,包括两个方法:title和subtitle,分别用于显示注释的标题和子标题。还有 coordinate属性,返回CLLocationCoordinate2D,表示Annotation的位置
然后,需使用mapView:viewForAnnotation: 方法来返回MKAnnotationView或者MKAnnotationView的子类用来显示Annotation(注意:这里显示的不是选中Annotation后的弹出框) 你可以子类化MKAnnotationView,然后再drawRect:方法里面进行自己的绘制动作(这个方法很蠢) 你完全可以实例化一个MKAnnotationView,然后更改它的image属性,这样很简单。 7、添加移除Annotation
添加一个Annotation
[mapView addAnnotation:annotation];
添加一个Annotation数组
[mapView addAnnotations:[NSArray arrayWithObjects:annotation1, annotation2, nil]];
移除一个Annotation
removeAnnotation:
移除一个Annotation数组
removeAnnotations:
移除所有Annotation
[mapView removeAnnotations:mapView.annotations]; 8、选中Annotation
一次只能有一个Annotation被选中,选中后会出现CallOut(浮动框)
简单的CallOut显示Title和SubTitle,但你也可以自定义一个UIView作为CallOut(与自定义的TableViewCell一样)
可通过代码选中Annotation:
selectAnnotation:animated:
或者取消选择:
deselectAnnotation:animated: 9、显示Annotation
通过mapView:viewForAnnotation: 方法显示Annotation,每在MapView中加入一个Annotation,就会调用此方法
示例(与tableView:cellForRowAtIndexPath: 很相似)
- (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>) annotation {
static NSString *placemarkIdentifier = @”my annotation identifier”;
if ([annotation isKindOfClass:[MyAnnotation class]]) {
MKAnnotationView *annotationView = [theMapView dequeueReusableAnnotationViewWithIdentifier:placemarkIdentifier];
if (annotationView == nil) {
annotationView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placemarkIdentifier];
annotationView.image = [UIImage imageNamed:@"blood_orange.png"];
}
else
annotationView.annotation = annotation;
return annotationView;
}
return nil;
}10、取得真实地址
示例:
初始化MKReverseGeocoder MKReverseGeocoder *geocoder = [[MKReverseGeocoder alloc] initWithCoordinate:coordinates];
geocoder.delegate = self;
[geocoder start];
如果无法处理坐标,则调用reverseGeocoder:didFailWithError: 方法 - (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {
NSLog(@”Error resolving coordinates: %@”, [error localizedDescription]);
geocoder.delegate = nil;
[geocoder autorelease];
}
如果成功,则调用reverseGeocoder:didFindPlacemark: 并把信息存储在MKPlacemark 中
didFindPlacemark:(MKPlacemark *)placemark {
NSString *streetAddress = placemark.thoroughfare;
NSString *city = placemark.locality;
NSString *state = placemark.administrativeArea;
NSString *zip = placemark.postalCode;
// Do something with information
geocoder.delegate = nil;
[geocoder autorelease];
}
前两天无意中发现java中可以把对象写入文件(因为平时没太注意,所以没有发现,其实这也是team leader叫我们翻译C#代码的时候发现的)。正好今天晚上闲着无聊,就来看看这个是怎么回事了。
java的IO包当中提供了,向文件中写入文件和读取文件的方法。好吧,来看下具体怎么回事吧。我们先写一个像文件当中写单个对象的方法吧。
public void writeObject() { try { HashMap<String,String> map = new HashMap<String,String>(); map.put("name", "foolfish"); FileOutputStream outStream = new FileOutputStream("E:/1.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outStream); objectOutputStream.writeObject(map); outStream.close(); System.out.println("successful"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
这里我们将一个map对象插入一个txt文件当中。java的IO包当中提供了Object的文件流。代码很简单,我们下面来看一看从该文件当中读取这个对象吧
public void readObject(){ FileInputStream freader; try { freader = new FileInputStream("E:/1.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(freader); HashMap<String,String> map = new HashMap<String,String>(); map = (HashMap<String, String>) objectInputStream.readObject(); System.out.println("The name is " + map.get("name")); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
代码也很简单,我们使用ObjectInputStream 的readobject的就可以读取文件中的对象,再按照封装对
象时候的类型进行强制转换一下。输出结果是aa foolfish。
上面提供的是对单个对象的存入和读取。对多个不同的对象该方法也适用。还是用代码来说明下吧。我们同时插入两个不同的对象,一个map,一个list。
public class ObjectToFile { public void writeObject() { try { HashMap<String,String> map = new HashMap<String,String>(); map.put("name", "foolfish"); List<String> list = new ArrayList<String>(); list.add("hello"); list.add("everyone"); FileOutputStream outStream = new FileOutputStream("E:/1.txt"); ObjectOutputStream objectOutputStream = new ObjectOutputStream(outStream); objectOutputStream.writeObject(map); objectOutputStream.writeObject(list); outStream.close(); System.out.println("successful"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void readObject(){ FileInputStream freader; try { freader = new FileInputStream("E:/1.txt"); ObjectInputStream objectInputStream = new ObjectInputStream(freader); HashMap<String,String> map = new HashMap<String,String>(); map = (HashMap<String, String>) objectInputStream.readObject(); ArrayList<String> list = new ArrayList<String>(); list = (ArrayList<String>) objectInputStream.readObject(); System.out.println("The name is " + map.get("name")); System.out.println("aa " + list.get(1)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String args[]){ ObjectToFile of = new ObjectToFile(); of.writeObject(); of.readObject(); } }
怎么样,运行一下,可以实践该功能吧。不过这里还有个问题,对于多个相同类型对象的方法可以写入,但是读取的方法暂时还没有找到,不过既然能写进去,那么也应该可以读取出来。恩,是这样的,hoho。回去再看看文档。下班咯