rss2email.ru |
Глум над рекламой и брендами | Вишневые креветки в домашнем аквариуме | Благотворительный фонд Чулпан Хаматовой | Удобные штучки |
TheAppleBlog News, reviews, walkthroughs, and real-life application of Apple products http://theappleblog.com рекомендовать друзьям >> |
- iPhone Dev Sessions: Finding Your Way With MapKit
Looking for directions on how to create a simple map within an application can be challenging. Sometimes the simplest of typos or a missed step in the process can become very frustrating. Many of the examples start with a finished solution and attempt to explain the code after it was written. This walkthrough, from the first step, will attempt to dissect each challenge one by one in an effort to allow the reader to pick and choose which antidotes are applicable to their particular situation.
Creating an Application with a Map
For starters, create a new View-based Application and open the default .xib file that is created. All that is really needed to get the point across is a view controller. This example will utilize a .xib file and Interface Builder, but the interactions with Interface Builder are limited to establishing a reference and a delegate. If you prefer to do the example entirely in code, that should be just fine too. From within Interface Builder, drag and drop a Map View component from the Library Window onto the View. You may want it to be just this easy, but there are a few things that we need to do before exiting Interface Builder. Take a look at the Attributes of the Map View you just added in the Inspector Window:
The options are pretty straight forward to configure. Quit Interface Builder, but be sure to save all work before exiting. If you try to build and run the project at this point, it will fail. This is because the MapKit Framework has not jet been added to the project. From within Xcode, select the Frameworks folder and Add an Existing Framework to the Project. Now the project should build and execute properly. In the simulator, all that should display is a map of the world (assuming you have network connectivity on the Mac you are using to develop with).
Centering the Map
As a first step, let’s try and take control of the World by centering the Map on just the United States. As a first step in this process, one needs to know the actual latitude and longitude of the center of the United States. Breaking away from Google (who has defined the center of the U.S. elsewhere), we will use a small park near the town of Lebanon, Kansas since they have a historical monument declaring itself as the center of the country, rather than a spot just north of a country club in Coffeyville, Kansas. When working with a Map View, it wants to center on a region, more specifically a MKCoordinateRegion. Now this region in turn wants to know a location (or CLLocationCoordinate2D) and a span (or MKCoordinateSpan). Basically a region is initially configured with a center point and knowledge in coordinate terms as to how far to zoom in/out on the map. How far to zoom would define the span. The first step is ensuring that both that the MapKit and the CoreLocation frameworks have been added to the view controller's header:
#import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h>
At this point it is time to establish the center of the United States by creating a location with the appropriate latitude and longitude.
CLLocationCoordinate2D location; location.latitude = 37.250556; location.longitude = -96.358333;
Now for the tricky part. The span object will need to know about the four corners of the area in question, not just the center. The furthest points north, south, east and west. Once these coordinates are known, it is a simple calculation to determine the span. Rather than using an exact number, pad the span by 4 percent in order to make a more natural looking map:
MKCoordinateSpan span; span.latitudeDelta = 1.04*(126.766667 - 66.95) ; span.longitudeDelta = 1.04*(49.384472 - 24.520833) ;
The center location is known and set, and the span is known and set. These are the requirements of the region:
MKCoordinateRegion region; region.span = span; region.center = location;
Then in Interface Builder, select the Map View Component, and from the Connections Tab inside the Inspector, create a New Referencing Outlet and assign it to the File's Owner (which in this case is the View Controller). Quit and Save Interface Builder and run the application. In the header file, be sure to create an IBOutlet for the MapView, otherwise you will not have anything to wire up when using Interface Builder.
IBOutlet MKMapView *myMapView;
All that is left to do is to wire up the MapView that was created in Interface Builder with the View Controller, and set the region of the map View.
[myMapView setRegion:region animated:NO]; [myMapView regionThatFits:region];
The continental United States should now be centered within the simulator. This technique can be used at any time to center the map within any region. All that is needed is the max and min latitude, the max and min longitude, and the center lat/lng coordinates. There are other means to control the span based on just knowing the center location. What I have found is that knowing the center is not always as easy as it sounds, especially when dealing with a list of locations. It is far easier to keep track of the furthest point north, south, east and west in an effort to determine the couners of the area in question.
Annotating a Map
Annotating a map is basically just adding pins to it. This can occur programmatically by accessing data that has been stored locally or is accessed via a remote API, or can be the result of getting location information from either the device in the form or Core Locations API or by data entered by the user like an address. In the end, in order to get it to show up on a map (however the data is collected, stored or referenced), it must conform to the MKAnnotation protocol. The only required property of an object that adopts this protocol is a CLLocationCoordinate2D of the name coordinate:
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate
There are also two optional instance methods that can be implemented. These are not required to be added to a map, but are necessary if one wants to support callouts on the pins that display on the map. These two methods return strings and are named title and subtitle:
- (NSString *)title - (NSString *)subtitle
Keep in mind that since you are not subclassing, any object can adopt this protocol and be added to a map as an annotation. In its simplest form, an implementation of an annotation would have at least the following declared in its header:
#import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface AdoptingAnAnnotation : NSObject { } @property (nonatomic, readonly) CLLocationCoordinate2D coordinate; - (NSString *) title; - (NSString *) subtitle; @end
What is great about the MKAnnotation protocol is that any class can adopt it. This means that if you already have a model object that has address information contained within it, you could adopt the MKAnnotation protocol in the existing class and delegate access to information already contained within that class to the optional title and subtitle accessor methods. Keeping the example simple, the following is the basics that are required to support the MKAnnotation protocol in a simple to reuse implementation:
#import "AdoptingAnAnnotation.h" @implementation AdoptingAnAnnotation @synthesize latitude; @synthesize longitude; - (id) initWithLatitude:(CLLocationDegrees) lat longitude:(CLLocationDegrees) lng { latitude = lat; longitude = lng; return self; } - (CLLocationCoordinate2D) coordinate { CLLocationCoordinate2D coord = {self.latitude, self.longitude}; return coord; } - (NSString *) title { return @"217 2nd St"; } - (NSString *) subtitle { return @"San Francisco CA 94105"; } @end
Thats it! Depending on how you want to have annotations added to the map, this could be behind the scenes by parsing through the result of a network call that returns data that must be parsed through, or by using CoreLocations and adding a button to the user interface to add annotations each time the button is clicked. Using the simple implementation of a class that adopted the MKAnnotaiton protocol above, the following code would could be added anywhere within the ViewController:
AdoptingAnAnnotation *someAnnotation = [[[AdoptingAnAnnotation alloc] initWithLatitude:37.786521 longitude:-122.397850 ] autorelease]; [mMapView addAnnotation:someAnnotation];
Custom Pins
Default red pins are fine, but you may want to use custom annotations as well. The simplest form of customizing the annotations is to simply change the color of the pin. So we get to the main event, a means to display the annotated class on the map that we have added to the view. The first step is to decide which class will be the delegate to the MKMapView that was added to the View. Typically this is the ViewController that the MapView was added to. This can be done in Interface Builder by making the ViewController the delegate to the MapView, or in code by setting the delegate of the MapView to self in one of the init methods of the View Controller. Once this is complete, it is assumed that the View Controller has adopted the MKMapViewDelegate protocol. Once the header of the View Controller has been updated to indicate this fact, all that is required is that the following method is implemented in the View Controller class:
- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation { MKPinAnnotationView *customPinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease]; customPinView.pinColor = MKPinAnnotationColorPurple; customPinView.animatesDrop = YES; customPinView.canShowCallout = YES; return customPinView; }
In this way, one has control over some of the basic aspects of the pin annotations that are added to the mapView. If you find that the above code does not work for you, check and double-check that the delegate for the map view has been set up properly. This can be done in Interface Builder or in code as follows:
[myMapView setDelegate:self];
Custom Annotations
Taking control of the Pins by implementing the mapView method in the MKMapViewDelegate protocol is a good start, but most want to abandon pins all together and utilize custom images on the MapView instead. The technique is identical, but the difference is in the implementation:
- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation { MKAnnotationView *customAnnotationView=[[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease]; UIImage *pinImage = [UIImage imageNamed:@"ReplacementPinImage.png"]; [customAnnotationView setImage:pinImage]; customAnnotationView.canShowCallout = YES; return customAnnotationView; }
The difference is that in this situation a MKAnnotationView is used instead of the MKPinAnnotation class. Try as you might, adding images to pins will not work. Setting a MKAnnotations's image property will achieve the desired results. This is where several online code examples can be misleading by using the same reference name like pinView or annoView and only change the Class in the alloc statement. And since this is all in the MapKit framework, the imports do not need to change. Therefore this one subtle difference is often the culprit of several hours of pain and suffering.
NOTE: It is recommended that one resize the image prior to compilation using a tool like preview rather than attempt to resize the image in code.
Annotation Callouts
As we saw earlier, annotations can have titles and subtitles. These are optionally displayed when the user taps on a given pin or custom annotation. In the prior code examples, we set the property of ShowCallout to YES. These callouts can also have images associated with them. These images are not meant to be the same image that was utilized as the pin image as these will be displayed in the callout above the pin when the pin receives a tap event. This technique will expand upon the one utilized in either of the two prior examples by adding the following two lines of code inside of the MKAnnotationView delegate method:
UIImageView *leftIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LeftIconImage.png"]]; customAnnotationView.leftCalloutAccessoryView = leftIconView;
You’re not required to use the MKAnnotationView in order to add an image to the left callout accessory view. This can also be done with the MKPinAnnotationView.
NOTE: It is recommended that you resize the image prior to compilation using a tool like Preview rather than attempt to resize the image in code.
Assigning Actions to Annotation Callouts
Finally there is the matter of assigning an action to an annotation's callout. Typically, these actions pop another view onto the stack, but really can do anything. What is required here is that a button be added to the AnnotationView (either the MKPinAnnotiaonView or the MKAnnotationView example above). This button will assign one of its control events to a method typically in the same ViewController that is also the delegate to the MapView itself:
UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; [rightButton addTarget:self action:@selector(annotationViewClick:) forControlEvents:UIControlEventTouchUpInside]; customAnnotationView.rightCalloutAccessoryView = rightButton;
Just as in the prior example, this code should be added to the delegate method implemented in the View controller. For example, if all of the details were added to the MKAnnotationView, the code would look as follows:
- (MKAnnotationView *) mapView:(MKMapView *) mapView viewForAnnotation:(id ) annotation { MKAnnotationView *customAnnotationView=[[[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil] autorelease]; UIImage *pinImage = [UIImage imageNamed:@"ReplacementPinImage.png"]; [customAnnotationView setImage:pinImage]; customAnnotationView.canShowCallout = YES; UIImageView *leftIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"LeftIconImage.png"]]; customAnnotationView.leftCalloutAccessoryView = leftIconView; UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure]; [rightButton addTarget:self action:@selector(annotationViewClick:) forControlEvents:UIControlEventTouchUpInside]; customAnnotationView.rightCalloutAccessoryView = rightButton; return customAnnotationView; } - (IBAction) annotationViewClick:(id) sender { NSLog(@"clicked"); }
Conclusion
These are the basic building blocks that are used when working with maps on the iPhone. These building blocks can be used in isolation, or can be added together to work with each other in concert. For instance, when adding an annotation to a map, the map can be re-centered taking the location new annotation into account. While these bare bones examples are not a true representation of a real world application, they were meant to illustrate the basics in a very minimalist approach that simply works.
References
- iPhone OS Reference Library - MKMapView Class Reference
- iPhone OS Reference Library - MKAnnotation Protocol Reference
- iPhone OS Reference Library - MKMapViewDelegate Protocol Reference
- iPhone OS Reference Library - MKAnnotationView Class Reference
Переслать - Let's Get Serious: Safari Reader Is Not the Death of Media
It must be “beat up on Apple” week. Not only has the company come under fire for new license terms in the iPhone OS that appear to block Google’s AdMob service, but some are crying foul over a new feature in the latest version of Safari, known as “Reader,” which strips out advertising from web pages. The complaints over the licensing terms for the iPhone actually have some merit, but the howls of outrage over the Safari feature — which one commentator described as “dropping a nuclear bomb on the entire web economy” — border on the ridiculous.
Just to recap, the Reader feature (which is only available on certain web pages) is triggered by a small icon in the browser address bar, which when clicked pulls up a separate window within the Safari browser that contains just the text of the page, with graphics but without any advertising. This is the source of the outrage, as it’s seen by some as a dagger aimed directly at the heart of web publishers that rely on advertising. Wired magazine says the feature was designed to push publishers into designing apps instead of just letting readers browse their content, while Ars Technica calls it another “evil genius” plan from Apple.
The feature is hardly a brand-new Apple invention, however; it’s based on open-source code from a feature called Readability, which does exactly the same thing and is available for multiple browsers. And there are (and have been for some time) plenty of other services that do similar things: one popular one, called Instapaper, saves a version of a web page that can be viewed later without any images or advertising. Another very popular web extension or plugin, known as Ad Block, does exactly what it says on the package: blocks all advertising from every web page a user visits.
Do these extensions and plugins remove advertising? Yes, although in the case of Safari Reader, Readability and Instapaper, the user downloads the entire page and presumably sees the ads before they decide to implement the feature. So are they killing the advertising-based content business? Hardly. The fuss over the Safari feature seems particularly absurd, since the browser has less than 5 percent market share (although it is much higher on mobile devices like the iPhone and iPad, for obvious reasons). As for the new feature being a surreptitious attempt to push content companies to develop apps, that seems a little Machiavellian, even for Apple — especially since only a fraction of readers are ever going to use the Reader feature.
As a writer for The Guardian put it, the best thing about these kinds of features and plugins is they force media outlets to recognize just how broken the reader experience is on a lot of websites, with giant ads everywhere and other design choices that are made for purposes rather than readability. As he notes, if Safari Reader and other features like it do nothing else, perhaps they will remind content sites that appealing to readers should be their primary goal.
Related content from GigaOM Pro (sub req'd): Social Advertising Models Go Back to the Future
Переслать - Sponsor post: Sponsor post: Atimi – How to Successfully Market Your Mobile App
One of the most common mistakes companies make in developing an app, whether for iPhone, Android or BlackBerry devices, is the failure to create a broader marketing strategy. Without one, apps will go unnoticed in app stores or on the web. At Atimi Software Inc., app development integrates a marketing strategy that includes both traditional marketing and media outreach. Reaching out to the media to have your app written up or reviewed is not only a great way to gain publicity, but also a means to gain valuable feedback on the app.
Targeting your app to a specific demographic is also a key part of Atimi's app development process. All too often the targeted demographics are too large. Given the level of competition in app stores, funds should be spent with a concise focus until the user base is large enough to further expand.
However, creating a marketing plan is only one (albeit a large one) aspect of marketing an app. Users are quick to make a decision in an app store, so having a compelling app icon will ensure your app stands out and isn’t confused with competitors. Moreover, screenshots in iTunes are another important opportunity for marketing. Whether the images describe the app or displays the app in action, consider the screenshots as another valuable marketing opportunity: use only the best. Atimi understands that app development is a significant investment, and that funds should be allocated to market the app using some of the outlined strategies.
Переслать - The Future of Mac: Truckin'
Steve Jobs revealed at the D8 conference his vision of what the future of the Mac looks like: a Ford F250. Not in design, and maybe not in build quality, but in everyday utility. As Jobs put it “I think PCs are going to be like trucks. Less people will need them.” I think he’s right. I’d even go so far as to say that when Jobs says “PCs,” he’s including desktop and notebook Macs as well. All of the “old world” devices that came before the iPad.
I’ve been using an iPad as my sole computer at home for the past two weeks. For the most part, its been wonderful, but there are a few things that make it obvious that the iPad is not a complete replacement for a Mac, at least not for me. For my parents, neighbors, and most normal people who are not obsessed with technology, it just might be perfect. I’ve said before how simple the iPad is to use, so simple that my three-year old son has no problem launching Netflix and finding a Scooby-Doo movie to watch. For me, the friction starts when I visit a web page and want to upload a document, or when I want to organize my photo library, or, when I find something that I’d like to save. The iPad is a wonderful device, but some things are just hard to do on it. For some things, you still need a Mac.
Development is the obvious first thing that comes to mind. Xcode is not available for the iPad, and I wouldn’t be surprised if it was never available for it. Xcode is one of the few applications that really eats up the screen real estate, especially when combined with Interface Builder. Compiling code is also taxing on the CPU, especially for projects with a large code base. It would be interesting to see Apple release “Xcode Lite”, a stripped down version of Xcode that only compiled iPhone OS apps, but I don’t think Apple has any desire or motivation to do that. There are a handful of web development apps available in the App Store, but none of them compete with their desktop equivalents. Even finding simple features like syntax highlighting is difficult.
College students might be a great target audience for the iPad, especially if textbooks can make their way into iBooks. However, many colleges have online components, and require the student to interact by posting their research or assignments, or participate in group chats. Using only the iPad, making it through such a course might be possible, but unlikely without falling back to a computer for certain tasks. For research, collaboration, and interaction, the iPad just isn’t enough on its own, but it’s be a great addition to a student’s backpack.
Power users demand a lot from their machines, and while developers are finding new ways to push the iPad’s abilities, most of the people I know who fall into this category are not going to be willing to let go of their collection of custom scripts. Being a power user is about bending the machine to your will, finding ways to remove all the small obstacles between you and accomplishing your task. The iPad is super simple to use, but one of the costs of that simplicity is the loss of the ability to customize and tweak.
It’s important to keep in mind that the iPad is still a 1.0 product. This is Apple’s initial foray into the tablet space, and keeping with how it rolls, it’s starting with what it considers the bare minimum. What Apple has done with the iPad is create a solid base to build its next platform on. However, it doesn’t mean that the Mac is going away anytime soon, or at all. Less and less people have needed trucks over the years, but they are still selling trucks. When you need to get a job done, there’s no substitute.
Переслать - Did the New York Times Just Declare War on News Aggregators?
Updated: The New York Times, like many newspapers, has been trying to find an online business model that works, including experimenting with iPhone and iPad apps, as well as a pay wall that’s expected to launch soon. Now, the newspaper company appears to be sending its lawyers after news aggregators that use its RSS feeds in commercial applications. According to a report from All Things Digital, the Pulse newsreader application for the iPad was pulled from the Apple store after a legal threat from the NYT over unauthorized use of the company’s RSS feeds. According to the email notice that Apple sent the developers of the app, the senior counsel for the newspaper said:
The Pulse News Reader app makes commercial use of the NYTimes.com and Boston.com RSS feeds, in violation of their Terms of Use. Thus, the use of our content is unlicensed. The app also frames the NYTimes.com and Boston.com websites in violation of their respective Terms of Use.
The newspaper’s lawyer also noted in his email that the Pulse app includes the New York Times feed when a user downloads the app, and that the newspaper’s feed is “prominently featured in the screen shots used to sell the app on iTunes.”
Ironically, the removal of the app came on the same day that Pulse was praised by Apple CEO Steve Jobs during his keynote presentation at the company’s Worldwide Developers Conference. The app was even written about positively by the New York Times itself, in a blog post that highlighted how easy Pulse was to use for browsing multiple news sources, and how the fact that it was a paid app should give media organizations hope that readers might pay for content on the iPad and other such devices.
It’s not clear why the New York Times decided to target the Pulse app, however, apart from the fact that it is (or was, until it was pulled) one of the most popular paid apps on the iPad. There are dozens of applications and services that do fundamentally the same thing as the news-reading app does, by pulling in the RSS feeds of media sites such as the New York Times — and many of them are paid applications, just as Pulse is. There are also many websites, including Yahoo and Google’s customized homepages, that allow users to embed RSS feeds from other sites.
What may have contributed to the complaint is that Pulse also has a view that shows the newspaper’s website inside a Pulse frame. Although there is no obvious advertising in the app, such framing of a site’s content has led to legal challenges against news aggregators in the past, including a high-profile case launched in 1997 by the Washington Post, CNN, Reuters and a number of other media entities against a site called TotalNews, which embedded news content from other outlets inside a frame.
Update: When asked whether the newspaper’s threats towards the Pulse news app were an indication that it would be pursuing other news aggregators as well, a spokesman for the New York Times told PaidContent that it would look at other situations “on a case-by-case basis.”
Update 2: The Pulse app has reappeared in the iPad app store, according to a tweet from one of the company’s founders, and it still contains New York Times content as it did before the complaint. It’s not clear why the app has been reinstated, but according to a post on the NYT Bits blog, the newspaper is not happy about it.
Related content from GigaOM Pro (sub req’d): What We Can Learn From The Guardian’s New Open Platform
Post and thumbnail photos courtesy of Flickr user bloomsberries
Переслать - Apple Increasing Platform Opacity and Kicking Out Competitors with iAd
Steve Jobs’ keynote at WWDC this year struck me as being particularly unkind to third-party media and analysis sources, and maybe that’s because he’s bitter about the whole Gizmodo iPhone 4 scoop/theft thing that went on. One thing he definitely made clear, he wants statistics coming from vetted sources, not from just any mobile market research firm.
Pursuant to that goal, Apple recently changed the terms of its developer agreement to keep out third-party analytics companies like Flurry who regularly produce reports on market share and the App Store based on data gathered from other advertisers working in the App Store ecosystem.
Here’s the relevant section of the developer agreement, as posted by All Things D:
3.3.9 You and Your Applications may not collect, use, or disclose to any third party, user or device data without prior user consent, and then only under the following conditions: The collection, use or disclosure is necessary in order to provide a service or function that is directly relevant to the use of the Application. For example, without Apple's prior written consent, You may not use third party analytics software in Your Application to collect and send device data to a third party for aggregation, processing, or analysis. The collection, use or disclosure is for the purpose of serving advertising to Your Application; is provided to an independent advertising service provider whose primary business is serving mobile ads (for example, an advertising service provider owned by or affiliated with a developer or distributor of mobile devices, mobile operating systems or development environments other than Apple would not qualify as independent); and the disclosure is limited to UDID, user location data, and other data specifically designated by Apple as available for advertising purposes.
Now it shouldn’t shut down all competition, as you can use your advertising stats to sell ad space, but only for that purpose, and only at Apple’s discretion. That’s right, Apple gets final say on whether or not you can share the data you collect through advertising. And the terms are cloudy enough to allow for the prevention of use of these statistics by large companies that also happen to have advertising arms which aren’t their primary business, like, say Google and AdMob.
It’s one thing to try to block out competitors, and that’s a question better left to anti-trust inquiries, but to purposefully try to obfuscate the attempts of third party research and analysis firms in order to better control every aspect of your marketplace, internal and external, is downright discomfiting. One thing’s clear: Apple is nervous about the upcoming war with Google over the mobile market, and it’s doing everything it can to make sure the public can’t interpret that war in a way it finds unflattering.
Related GigaOM Pro Research: Why 2010 Still Won't Be the Year of Mobile Advertising
Переслать - 25 Safari Extensions You Can Install Now
Apple’s new Safari 5 brings support for browser extensions, which the company plans to showcase on its own gallery in a few months. In the meantime, we’ve compiled a list of some of our favorites.
To learn more about using Safari, check out our Safari 101 screencast on TechUniversity (subscription required).
Web & Utilities
AdBlock
The AdBlock extension is a great way to remove unwanted content from your browsing experience. Download the extension and load your web pages without as many intrusive ads. There’s even beta options to remove Google ads and YouTube ads.
BuiltWith Analysis
The BuiltWith Analysis extension provides an insider look into a website with one click. You can see what JavaScript libraries a site uses, who provides analytics as well as other nitty-gritty details that are totally public, but often obscured in tons of HTML source code.
Invisible Status Bar
Google’s Chrome browser does away with the status bar at the bottom of your window and only shows it when you hover over a link. The Invisible Status Bar extension does the same thing for Safari!
Live CSS Editing
The Live CSS Editing extension provides a quick way to load up a page and test modifications to the CSS in real time.
Bit.ly Shortener
The Safari Bit.ly Shortener extension makes it easy to shorten a URL with Bit.ly. Simply load the URL in your browser and then click the button!
PageSaver
The Svay.com PageSaver extension will, in one click, save the visible portion of a web page as an image and automatically download it into your Downloads folder.
ScribeFire
ScribeFire is an extension for using a centralized place for posting to all of your blogs, supporting a variety of typical blog features including formatting, categories and tags. ScribeFire’s Safari Extension brings support for this right into Safari.
Snapper
Similar to PageSaver, Snapper also saves the currently viewable portion of a website as a PNG and automatically downloads it for you.
Type to Navigate
The Type to Navigate extension is pretty darn cool. If you’re browsing a page and there’s a link you want to follow, just start typing any word that’s contained within it. It’ll highlight the link and then you just press Return to load it. If it’s not the right link, press Command + G to move to the next one.
E-Commerce
Amazon.com Search Bar
If you frequent Amazon.com, you’ll want the Amazon.com Search Bar extension. It’ll add a new Amazon.com bar to Safari giving you one-click access to your shopping cart, wish list, the latest deals and a quick way to search Amazon.com.
InvisibleHand
The InvisibleHand extension will subtly let you know when it finds a cheaper price to a product elsewhere on the Internet. The list of supported retailers is fairly decent for the U.S., UK and Germany, but more are being added frequently.
Social
FaceBlock
The FaceBlock extension blocks all of the annoying ads on Facebook. I always feel a little sadness for the advertisers that are paying for impressions that I never have to see. Oh well.
safari140
This gem of an extension allows you to post directly to Twitter from within Safari. Links are automatically shortened by is.gd.
Share with Facebook
The Share with Facebook extension gives you one-click access to share your current URL with your Facebook account.
Webbla
If you use Webbla for managing your bookmarks, take a look at the Webbla browser extension, which allows you to quickly add or modify them.
YouTube Full Screen
This extension is a great way to enable full-screen support of YouTube videos if you’re using YouTube’s HTML5 player instead of its Flash player.
Productivity
Background Tabs
The Background Tabs extension will allow you to open a new tab in the background by simply pressing the V key.
Gmail Checker
The Gmail Checker extension will give you an icon and badge in your Safari toolbar to show unread messages on your Gmail account. Keep an eye on their website for updates because the next version will support Google Apps users.
GoMBoX
The GoMBoX extension transforms your Google Images experience by showcasing results in a Lightbox overlay, allowing you to see larger versions without having to leave your search results page.
Instapaper
If you love Instapaper, check out Instafari, a simple one-click way to save an article to your Instapaper account.
InstaPaper Greystyled and Article Tools
The Greystyled and Article Tools extensions provide you with a cleaner style for your Instapaper.com account. Once the extension is installed, just visit instapaper.com to see the changes.
Google Reader – Simplified
If you’re a fan of Google Reader and the GreaseMonkey scripts that give it a simplified look, check out Lucidica, an extension that’s based off Helvetireader.
Safari Reload Button
If you’ve ever wanted to move the reload button for Safari out of the URL window and into its own button, the Safari Reload Button extension does just that.
Search Preview
With the Search Preview extension, you can preview the web pages that show up in your search results. This extension works with Google, Bing and Yahoo.
Toodlethings
If you use Toodledo for your task management, the Toodlethings extension re-styles the web interface with clean buttons and easier to read fonts.
For more great extensions, check out the Safari Extensions blog and keep an eye on Apple.com for its showcase that’s scheduled to premiere later this summer.
Have you written your own extension or found others? Share them in the comments below!
Переслать - TechUniversity: Font Management
Managing fonts has become a bit of a black art, but it doesn’t have to be. Using tools built right in to OS X, you can manage a font collection with ease.
In addition to covering OS X’s built-in Font Book application, we’ll explore a couple of more powerful apps as well.
Topics covered in this TechUniversity screencast on Font Management in OS X (subscription required):
- Interacting with fonts
- Installing fonts
- Organizing fonts
- Limitations of Font Book
- Font Explorer X Pro
- Fontcase
Below is a sample of the video. The full screencast clocks in at just over 15 minutes.
Переслать - Quick Tip: Sharing iPhone and iPad Apps On the Go
Suddenly you find yourself with some extra time on your hands and your spouse, child, or parent tells you about a great app. If this person is a member of your household, they can share the app with you via iTunes sharing. However, what if you are on the road with your spouse or children and want to try out one of their apps, or share one of your own? Apple provides an easy way to do this.
Apple allows you to download an app you’ve already purchased from the App Store. This is perfect for when you purchase an app and realize the app isn’t synced to the iPhone. Simply “repurchase” your app and Apple will let you know that you already purchased it and there won’t be any charge. Thus you can reinstall any app you already purchased while on the road without any need to re-sync. Essentially you share apps over the air between your device and your synced iTunes.
Sharing Apps
Sharing apps with a family member works very much the same way. To add your spouse or significant other’s app to your iPhone, iPad, or iPod touch, go to Settings, then Store. Choose Sign Out to sign out of your personal account.
Next, sign into the other person’s account. They’ll need to either give your their password or type it in.
Now that they are signed in to the App Store on your phone, they can download any app they’ve purchased and you will then be able to use that app on your phone. In addition to app sharing between you and your spouse, this is a great way that you can purchase apps for a child’s iPod touch, and then share only the apps you wish with that child. This might be much safer than giving them their own Apple Store account and your credit card! Keep in mind that you won’t be able to update your apps and the other person’s apps at the same time. To update their apps you’ll need to sign in as them and do updates separately.
Karma Violation?
Does this violate any rules, either Apple’s or karma’s? I don’t think so. Apple made the conscious decision to enable sharing between members of a household in iTunes, allowing family members to listen to each other’s music and watch each other’s videos. Household app sharing is explicitly allowed this same way. Apple is trusting its users to do the right thing with household and family app sharing, and we should return that favor by not abusing the system.
Переслать
rss2email.ru | отписаться: http://www.rss2email.ru/unsubscribe.asp?c=6893&u=24004&r=311667163 управление подпиской: http://www.rss2email.ru/manage.asp |