Victor Choi

  • Home
  • Business
    • Internet
    • Market
    • Stock
  • Parent Category
    • Child Category 1
      • Sub Child Category 1
      • Sub Child Category 2
      • Sub Child Category 3
    • Child Category 2
    • Child Category 3
    • Child Category 4
  • Featured
  • Health
    • Childcare
    • Doctors
  • Home
  • Business
    • Internet
    • Market
    • Stock
  • Downloads
    • Dvd
    • Games
    • Software
      • Office
  • Parent Category
    • Child Category 1
      • Sub Child Category 1
      • Sub Child Category 2
      • Sub Child Category 3
    • Child Category 2
    • Child Category 3
    • Child Category 4
  • Featured
  • Health
    • Childcare
    • Doctors
  • Uncategorized

12/26/2016

Bug - CLLocationManager deferredLocationUpdatesAvailable always returns false in iOS10

 3:53 PM     CLLocationManager, deferredLocationUpdatesAvailable, iOS10     No comments   

Recently I tried to use this method for my development in iOS10. By the way the function isn’t work in iOS10. It always returns false value.

I hope that Apple fixs it as soon as possible.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

12/15/2016

iOS Keychain in Swift3

 4:03 PM     iOS, Keychain, Swift3     No comments   

In Swift3 you should cast all dictionary values to AnyObject if the objects are derived from NSObject.

Refer the link

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

12/13/2016

How to localize plist file?

 2:37 PM     internationalization, localization, plist, translation     No comments   

You must create InfoPlist.strings file and localize it. After that remember you need to key value to translate a text in infoplist file.
"NSLocationWhenInUseUsageDescription" = "BlahBlahBlah"
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

11/16/2016

Isn't LeftBarButtonItem showing on navigation bar?

 11:13 PM     LeftBarButtonItem, NavigationBar     No comments   

If you manually create a parent and child relationship between two view controllers, the child view controller might not have a navigation bar in this case. So you might be wondered why the navigation item of the child view controller doesn’t effect on the navigation bar. But you need to understand that the navigation bar on the child view controller is not the child view controller’s navigation bar. Because the child view controller is embedded into the parent view controller. So you need to create a LeftBarButtonItem on the parent’s navigation bar and customize the button with a target and an action pattern in the parent view controller.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Wait unitil a loop with asynchronous tasks finishes executing

 2:27 PM     dispatch, dispatch_group, GCD, loop, Swift, thread     No comments   

A completion Handler in iOS takes a thread to asynchronously get it done. So it means that we can’t know an exact point which the tasks finish. For example, if we use a for loop to execute several tasks in the background, how could we know all the task are done?

In this case you can use dispatch_group.

  1. Create a dispatch group which graps all the tasks in a for loop with dispatch_group_create().
  2. You point out a position which your code enters the dispatch group with dispatch_group_enter(groupname).
  3. You point out a position which your code leave the dispatch group with dispatch_group_leave(groupname).
  4. Lastly you can get a notification when all the tasks you assigned to a dispatch group is done with dispatch_group_notify.

If you want to see a concrete example for it, please refer this.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

9/10/2016

Activate Firebase without Cocoapods in Xcode 8

 2:12 PM     Cocoapods, Firebase, Xcode8     No comments   

I need to convert a project based on Xcode 7 to Xcode 8. In the project I use Firebase 2 (2.5.1) with CocoaPods. But the problem is that CocoaPods is not compatible to Xcode 8 and iOS10.
So I should do it manually without CocoaPods.

Deintegrate Cococapods from a project

First of all , I need to clearly deintegrate Cocoapods from my project.
I found this. And I can clearly remove Cocoapods from my project.

FireBase integration

The problem that I faced is a overwhelming Link errors below.


Firebase Link Errors

I need to add several libraries to use Firebase in Xcode 8 and iOS10.
  • SystemConfiguration.framework
  • libc++.tbd
  • libsqlite3.tbd
  • libicucore.dylib
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/30/2016

Simple Migration Options for CoreData PersistentStoreCoordinator

 1:46 PM     CoreData, Migration, PersistentStoreCoordinator     No comments   

If you change a scheme of your CoreData such as adding a new attribute, you can easily migrate it with options below.

do {
            try persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: [NSMigratePersistentStoresAutomaticallyOption: true , NSInferMappingModelAutomaticallyOption: true])
        } catch {
            fatalError("Error migrating store: \(error)")
        }
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/29/2016

New Fitbit Flex 2 , Fitbit Charge 2 and Apple Watch 2

 4:58 PM     Apple Watch 2, AppleWatch, Fitbit charge 2, New Fitbit Flex 2     No comments   

Fitbit Flex 2

Fitbit launched Fitbit Flex 2 which put a new function to track a swimming activity. It is similar to Misfit Shine.

Tracking a swimming activity

It tracks…

  • Laps
  • Duration
  • Calories
  • Distance

If it is compared to Misfit Shine’s Swimmer’s edition, Misfit Shine tracks everything which Fitbit Flex2 supports.

I think that Misfit Shine is more customized to track a swimming activity. Misfit Shine supports a unique feature calling ‘Swim Time Countdown’.

Water Resistance

Both of them support 50 meters water resistance.

Fitbit Charge 2

Several features which you should notice.

  • Improved its heart rate sensor.
  • Multi-Sports mode: tracks specific exercises like running , weights or yoga.
  • SmartTrack: Automatically records select exercises like hiking , biking , sports and more. Interested in experiecing how it works.

Fitbit VS Apple Watch 2

Now I wonder that the upcoming Apple Watch 2 supports more tracking features which Fitbit leads with their new products.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/21/2016

How can I use San Francisco mono font in Xcode7 ?

 2:20 AM     San Francisco mono, Xcode7     No comments   

Apple released a new coding font which calls San Francisco mono. I have used Source Code Pro which Adobe created. But I would like to test and use Apple’s one in Xcode7.

Basically San Francisco mono font is pre-installed in Xcode8 beta. So here is the way to use it in Xcode7.

  1. Install Xcode8 and find the location of the font.

  2. Copy them into your font directory in macOS. I used ~/Library/Fonts

  3. Launch Xcode7 and configure it as a coding font. (Xcode7 has a bug that you can’t select font collections in your macOS system. If you meet the problem, run the command below in Terminal and try it again.)

    defaults write -app Xcode NSFontPanelAttributes -string "1, 0"
    
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/15/2016

Why did I get the result nil through dataTaskWithURL ?

 3:54 PM     dataTaskWithURL, iOS Networking, NSURLSession     No comments   

If you use dataTaskWithURL , your intention might be getting a data from server and display the data to your UI. But, sometimes it makes a problem that the resulted data is nil.

To solve this issue, first of all you must recognize that dataTaskWithURL runs asynchronously. Conversely UI stuffs runs on the main thread on iOS. So the time that you get a data from the server might not be synced with the time you display the data to your UI. So in this case you might see a strange nil value on it.

You can simply think that I can run it sychronously. But, it would cause a bad user experience. So here is a solution which is creating another completionHandler to run it asynchronously. And then if you want to update your UI , remember that the task should be taken on main queue.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/14/2016

How can I change the modal transition of a presented view controller?

 5:47 AM     modal transition, modalTransitionStyle, presented view controller, presenting view controller     No comments   

In iOS the default transition between presenting view controller and presented view controller is .CoverVertical. But sometimes you might want to change it to a different animation style.

If you setup a presented view controller , it has a property which calls modalTransitionStyle and you can choose one of styles below,

  • CoverVerticial (Default)
  • FlipHorizontal
  • CrossDissolve
  • PartialCurl
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/13/2016

How to point your Godaddy domain to a2Hosting

 1:09 PM     a2hosting, domain, godaddy     2 comments   

I recently created an account in a2hosting to host a wordpress website. And then I need to point a domain in Godaddy to a2hosting account.

This video helped me to get it done.

By the way a2hosting’s default option doesn’t provide a public IP address for the account. I use a2hosting’s Shared Hosting Swift product. They charge the additional fee $4 for it.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/12/2016

The relationship between AnchorPoint and Position in Layer

 3:21 PM     AnchorPoint, CALayer, iOS, Layer, Position, View     No comments   

I felt difficult to understand the relationship between AnchorPoint and Position in Layer. So I found this in stackoverflow. And it helped me a lot to understand it.

Through my testing I got some principle.

  • If a layer’s frame is already defined , the anchorpoint doesn’t affect the position of the layer.

  • If you change an anchorPoint of a layer which already has a frame and a position , the origin of the layer’s frame will be changed by the setting of anchorPoint.

    let view = UIView(frame: CGRectMake(0,0,400,400))
    view.backgroundColor = UIColor.grayColor()
    let label1 = UILabel(frame: CGRectMake(100,100,100,20))
    label1.text = "Label1"
    print("AnchorPoint: \(label1.layer.anchorPoint) , Frame: \(label1.layer.frame)")
    print("Position: \(label1.layer.position)")
    label1.backgroundColor = UIColor.whiteColor()
    view.addSubview(label1)
    view
    
    // AnchorPoint to (1,1) 
    
    label1.layer.anchorPoint = CGPoint(x: 1.0, y: 1.0)
    label1.text = "Label1"
    print("AnchorPoint: \(label1.layer.anchorPoint) , Frame: \(label1.layer.frame)")
    view.addSubview(label1)
    view
    
  • If you set up a layer’s anchorPoint before you set up the frame of the layer, the position of the layer will be affected by setting of the anchorPoint.

    let label2 = UILabel()
    label2.layer.anchorPoint = CGPoint(x: 1.0, y: 1.0)
    label2.frame = CGRect(origin: CGPoint(x: 100,y: 100), size: CGSize(width: 100.0, height: 20.0))
    print("AnchorPoint: \(label2.layer.anchorPoint) , Frame: \(label2.layer.frame)")
    print("Position: \(label2.layer.position)")
    
    let label3 = UILabel()
    label3.layer.anchorPoint = CGPoint(x: 0.0, y: 0.0)
    label3.frame = CGRect(origin: CGPoint(x: 100, y: 100), size: CGSize(width: 100.0, height: 20.0))
    print("AnchorPoint: \(label3.layer.anchorPoint) , Frame: \(label3.layer.frame)")
    print("Position: \(label3.layer.position)")
    
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/11/2016

How can I start UIBezierPath animation from the top of a circle?

 4:05 PM     Circle Animation, iOS Circle Drawing Animation, UIBezierPath     No comments   

When you draw a circle by using core animation , you might use CAShapeLayer and UIBezierPath to draw it.

UIBezierPath(arcCenter: view.center, radius: view.bounds.width / 2, startAngle: startAngle, endAngle: endAngle, clockwise: true).CGPath

The code above there are startAngle and endAngle parameters which affect where your animation start and end. So if you want to draw the circle from a specific position to another position, I recommend this link.

If you want to start from the top of the circle , your startAngle should be M_PI + M_PI_2.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/05/2016

How to securely use xmlrpc

 1:48 PM     htaccess, Wordpress, xmlrpc attack, xmlrpc.php     No comments   

I like to post an article to wordpress through Byword or Ulysses. And those tools use wordpress’s xmlrpc.php.

By the way if you use xmlrpc.php with your own server , you might face up to infinite attacks which target xmlrpc.php. And I horribly experience it.

If you want to independently operate your wordpress blog on your own server , I recommend to block xmlrpc.php access from anonymous users with the code below.

<FilesMatch "xmlrpc\.php$">
    order deny,allow
    deny from all
    allow from [Your IP address]  // Allow the only your ip address
</FilesMatch>

Put the code above into your .htaccess file in the root folder of wordpress.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

8/04/2016

My experience on Upthere

 5:22 PM     No comments   

Upthere is a kind of new concept of cloud service such as iCloud, Dropbox, Google Drive. Mostly cloud services save your data in both local and cloud. It could be beneficial for someone who wants to back up their data.



The problem is taking too much storage in your local storage



iPhone 16GB model has been criticized by users because it isn’t enough to fully use. The storage is too small to install bunch of applications from Appstore. Also the size of photos and videos taken by users is getting bigger and bigger.



Upthere provides a solution for it. It doesn’t take much space in your phone or notebook. It just saves thumbnails of photos or videos which are much smaller than fully saving them. So you can save your space with it.



Not enough to replace conventional cloud services



The problem that I faced with Upthere is organizing my documents in it. It suggests Loop as a tool for organizing. But, it isn’t enough to replace the conventional folders. Even they don’t provide tags to organize my files. So I hope that they provide a way for making it better.






Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

7/31/2016

Omni Focus and AppleScript to recreate a task on a task

 9:38 PM     AppleScript, Automation, Delegated Task, Omni Focus     No comments   

Here is an AppleScript that you can recreate a task based on an initial task. It is useful when you send someone a mail and need to wait for the mail. So in this case you will have a delegated task in accordance to David Allen’s GTD rule.

So Curt Clifton who is a developer in Omni Group created the AppleScript above to process the case.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

7/20/2016

How to make your statusbar style white in iOS9

 7:47 PM     iOS9, StatusBar, StatusBar Color, StatusBar White, UIBarStyle     No comments   

Sometimes I am a little irrated by making the statusbar white in iOS development. It looks simple. But, the way to do it is a little complicated.

How to make your status bar style white in iOS9

Put the code below into your controller file or AppDelegate file.

self.navigationController?.navigationBar.barStyle = UIBarStyle.Black

When you type it, you might get serveral options for UIBarStyle. But BlackOpaque and BlackTranslucent were deprecated. So don’t be hesitated to choose one of them. If you want to make your statusbar white, choose UIBarStyle.Black. That’s simple.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

7/17/2016

The latest Swift's Regular Expression Tutorial

 2:36 AM     NSReuglarExpression, Regular Expression, Swift     No comments   

Recently I needed to extract a data from Apple’s HealthKit. They provide various queries in HealthKit framework. But it didns’t meet my intention.
So I started to use NSString substring function to extract the data. But, it wasn’t good to match the data that I want.
Finally I got the exact result by using NSRegularExpression and during the process this tutorial was really helpful.

And I think that this is the latest NSRegularExpression tutorial on the web.

So if you want to learn how to use a regular expression in Swift, I recommend the link above.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

7/13/2016

NSBatchUpdateRequest doesn't support updating relationship in Core Data

 6:51 PM     Core Data, NSBatchUpdateRequest, NSBatchUpdateRequest Relationship     No comments   

NSBatchUpdateRequest allows that you can directly store and modify your records rather than with an object graph.

By the way it seems that it doesn’t support updating or modifying a relationship in a core data.

If you want to learn how to use NSBatchUpdateRequest, here is a great and recent tutorial that I found.

So NSBatchUpdateRequest is essential that you handle with lots of data by using Core Data.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

7/10/2016

How to put a padding into a UITextField ?

 2:09 PM     Bottom Margin, Margin, Padding, Top Margin, UIEdgeInsets, UIEdgeInsetsInsetRect, UITextField     No comments   

In iOS development you can put a padding into a UITextField with a code below.

First of all , you can create a customized UITextField class for giving it an inset . And then you can put a code below into the class inherited UITextField class.

let padding = UIEdgeInsets(top: 7, left: 0, bottom: 7, right: 0)

override func textRectForBounds(bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}
override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}
override func editingRectForBounds(bounds: CGRect) -> CGRect {
    return UIEdgeInsetsInsetRect(bounds, padding)
}

UIEdgeInsets Type

UIEdgeInsets is defining a inset distnaces for views. You can easily customize your insets for a view with this type. Positive values will shrink the view and negative value will expand the view.

UIEdgeInsetsInsetRect Function

UIEdgeInsetsInsetRect adjusts a rectangle by the given edge insets. In this code you can adjust a rectangle for textfield’s text and etc with UIEdgeInsetsInsetRect. It receives UIEdgeInsets structure type as a parameter.

I hope that Apple provides a function or an interface that we can easily adjut insets through the interface builder.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

6/30/2016

Keynote Tutorial Character Style , How to use a character style in Keynote

 9:18 PM     how to use keynote, keynote, keynote presentation, keynote presentation examples, keynote software, keynote tutorial, keynote tutorial character style, what is keynote     No comments   



I have a quote to present. By the way I want to emphasize specific text in the quote. Also, I don’t like a font for the quotation mark of the base font of the quote text. So in this case I need two different styles for specific text or a character. How can we solve this problem?

Keynote provides a style function that you can create a pre-defined style format for all kinds of objects. And we can use three styles related to text objects in Keynote.

One is a style for a text object.
Second one is a style for a character.
Last one is a style for a bullet text.

Through this tutorial we are going to create two different styles as a character style. And we will adopt them into our sample quote in a slide.

See you the result of the tutorial below,


What you will learn through this tutorial

You are going to learn how to create a character style in Keynote and how to adopt the styles into your texts in an object. Also, you will get acknowleged how overriding a style is worked in Keynote.

Animate them with a Keynote animation

Through this tutorial I try to create a sample animation for practical use in your presentation. So in this tutorial you are going to see how an animation with character styles will work as a practical way.

What is ‘Final Keynote’ ?

Final Keynote is a tutorial for Apple Keynote application. Since 2007 I have taught people how to use Keynote. So I am trying to make a comprehensive tutorial for Keynote use.
So stay tuned.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

6/29/2016

Keynote Tutorial , How to make an embossed or an engraved text effect with Keynote

 7:55 PM     how to use keynote, keynote, keynote presentation, keynote presentation examples, keynote software, keynote tutorial, keynote tutorial text shadow, what is keynote     No comments   



Design in presentation is not a decoration. Design is taking care of your audience. One message in a slide has been frequently told in many presentation books or trainings. So how can we make the sentence which tell the message remarkable? Because the text should be impressive to the audience.

In Keynote we can use a shadow effect to text objects. Actually the shadow effect is not the only one. There is one more shadow effect which you can adopt into your text object at the same time. So you can make a special effect for your text.

The first effect is adopting it into text object. The other one is adopting it into each character of texts. That is a difference between two shadow effects which are able to be adopted into text objects.

See the sample of the shadow effects.


Keynote doesn’t have an inner shadow effect.

An engraved text effect in Keynote is a little hard to create. Because Keynoe doesn’t have a function to add an inner shadow effect in a text object.

Through this tutorial we are going to make a difference a border color and a fill color of text with Keynote’s shadow effect.

Keynote7 , give me a function to convert from text to shape object

Keynote is a vector based graphic tool. By the way, it’s not fully functional if we compare Keynote with Sketch or illustrator. But, the reason that Keynote is very powreful is that Keynote is really easy to use.

Therefore normal users who are not related to graphic fields can easily learn and use Keynote to design something. So I hope that Apple add a new Keynote feature which we can convert from a text object to a shape object.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

6/27/2016

Keynote Tutorial , Sound is a design,too

 4:05 PM     how to use keynote, keynote, keynote presentation, keynote presentation examples, keynote software, keynote tutorial, keynote tutorial sound effect, what is keynote     No comments   



When Steve Jobs unveiled iPad at the first, everyone expected that the price of iPad would be over 999 dollar. And then Steve Jobs broke the expectation with 499 dollars. But, it wasn’t stop with that. Steve Jobs dramatically showed the price of iPad at Keynote event.

When he firstly showed the price, he used a sound effect breaking a glass with visual animation on the slide. And the direction of the show was so dramatic and made it sense to the audience. I think that the sound engraved the moment on the brain of audience.

Through this tutorial we will learn how to use a sound effect in Keynote and then we will make a dramatic effect with a sample sound that I provide for you.

As a result, you will get the idea that we don’t have to limit our design with jus visual graphics. A sound is invisible. But, sometimes it is more effective than a visible thing.

Watch the trailer of this tutorial below


How should we use a sound clip on presentation design?

Using a sound clip on your presentation shouldn’t be frequent. Too many sound effects could be bad to the audience’s attention.

Always be careful to use a sound clip with animations or transitions in Keynote.

The sound clip should have a right meaning of your scene.

Think about Steve Jobs. His message was ‘The expectation of the price is broken.’ So the message , the animations and the sound clip shared a consistent theme to direct the scene.

Keynote can control your sound clip with animations.

Keynote provides two animations to control your sound clip.

First one is starting a sound clip and the other one is stopping a sound clip. If you have more sound clips than the only one sound clip in your slide , you can create a sound sequence with those animations.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

6/26/2016

Keynote Tutorial Text Format - Make your font consistent

 2:39 PM     how to use keynote, keynote, keynote presentation, keynote presentation examples, keynote software, keynote tutorial, keynote tutorial text format, what is keynote     No comments   



Text is essential for your presentation. There is no presentation which does not have a text. By the way the gap between ideal presentation and real presentation is too big. Still many presentations are conquered by texts. Too many texts make people boring and gone from your presentation. So I would like to suggest a practical way to make your presentation better. Selecting a right font is very important to make your text better to read.

Select a sans serif type font than serif type font. And secondly don’t select too many fonts for your presentation. I prefer 1 or 2 fonts. One more thing is Keynote supports a special effect which calls ‘Text morphing’ and it is great to use a different type of font between slides.

Make a paragraph style in Keynote

Keynote provides a style function which you can use a pre-defined paragraph style to text objects in Keynote. The great reason to use the style is because you can easily manage multiple texts at once and also it helps you to keep your text format consistent.

Select a right font in Keynote

When you select a font, you have to think about the audience at the first. Sometimes people like to use a font to present his/her personality. But, that’s not a first priority. Think about it is a readable font for your audience. Is the audience far from the screen able to read the text? That’s the point.

Text morphing in Keynote

Keynote’s magic move provide a special effect which calls text morphing. It automatically putting a smooth animation between slides. Each slide’s text object should be set up different fonts to maximize the effect.



As I mentioned above, a text is the essential for your presentation. There is no presentation without texts. To make your text better, try the steps above in Keynote. It will make your presentation solid, legible and consistent.


Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Time machine gives error "can't connect to a current time machine backup disk"

 6:42 AM     Pathfinder, Time machine, time machine error, Timemachine     No comments   

I suddenly faced this error. But, my time machine’s backup process was fine. The problem was occurred when I tried to run the time machine app to restore a data from previous backups. And the error message always came up.
can’t connect to a current time machine backup disk
So I tried to fix it by rebooting my mac and it doesn’t work. I thought that the networking wouldn’t be an issue to cause this problem. because my time machine was wired to my iMac through thunderbolt.

Folder’s Permission issue

I noticed that the time machine backup folder was not accessible. I tried to change the permission of the folder on Finder. But, it wasn’t possible. So I tried other way which is using Pathfinder app.

And I changed the permission to read the folder and owner of the folder from root to my account. After that the time machine data was finally accessible.

It was great because I could restore my backup which meant I didn’t lose my data. So if you have a problem like this, try to change the permission and the owner of the folder.
I think that if you don’t have Pathfinder app, you can use a command line tool to change them.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

6/24/2016

Keynote Tutorial Text Outline - Make your animation meaningful

 2:26 PM     how to use keynote, keynote animation, keynote presentation, keynote presentation examples, keynote software, keynote tutorial, keynote tutorial text outline, what is keynote     No comments   



When people see Keynote at first, mostly they are impressed by Keynote’s fantastic animation effects. I did that, too. But, you have to be careful before you use an animation, because an animation which doesn’t have a clear reason to use could cause a bad experience for your audience.

So through this tutorial I would like to engage you into implementing a meaningful animation with a text outline function of Keynote. In this case the core message of this animation is ‘we need to break a stereotype of our business model’.

Check out the trailer video below,



As you saw, the animation has a clear meaning to use. So I hope that you think it again when you try to create an animation in your slide.
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

6/23/2016

Keynote Tutorial How to improve your bullets

 1:00 AM     how to use keynote, keynote, keynote animation, keynote app, keynote presentation, keynote presentation examples, keynote software, keynote tutorial, keynote update, what is keynote     No comments   



Keynote Tutorial - How to improve your bullets by using Keynote

A bullet point based text is widely used on the presentation. But, the problem of the use is that a whole text of the bullet points are suddenly shown to the audience. And then the audience would feel burden to the amount of texts on the slide. So we need to improve the way to deliver the bullet text. And with Keynote you can easily improve the bullets.

So here is a trick that you can practically use on your future presentation. When you deliver several bullet points, you can animate them with Keynote’s bullet images. As a result, your audience will follow each bullet animation. This gives us a power to control the audience’s attention.

I always have thought about how the design should be worked on a presentation. Most people never think about it seriously. We have various design elements on Keynote such as text , shape , image , video , table , chart and animation. These elements should be designed with a clear objective. In this example you can learn how you design bullets better on your presentation.

This is a brief introduction of my video tutorial which calls ‘Final Keynote’ and I will put my experience and knowlege of Keynote presentation design into the tutorials.

So stay tuned!
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

5/29/2016

3 reasons I recommend Principle for Mac

 7:05 PM     Framer, iStart, Principle, Principle for Mac, UI Animation, User Interface, UX Animation     No comments   

Principle for Mac was developed by the previous Apple engineer ‘Daniel Hooper’. And I think that he made such a remarkable application which easily animates your Sketch design.

We already know that there are various prototyping animation tools. Framers, Flinto, UXPin, Invisionapp and so on… But, I think that Principle for Mac has a potentional to be populated among designers.

3 reasons that I recommend Principle for you

First, Principle makes a great quality animation based on your design. You might think Framer as one of the best UI animation tool in this area. I agree with it. By the way Principle seems that it doesn’t fall behind Framer in the race. Look at the animation that I created with Principle below.

Second, Principle is really easy to learn and use. I think that the weakness of Framer is not to easy. You have to learn Javascript or Coffeescript to create an animation. If you already have an experience to code, it could be no problem. But, I guess that mostly designers wouldn’t be good at coding. Designers are normally reactive to visible things or objects. Photoshop, illustrators and Sketch, those tools which desingers use everyday follows that notion.

Therefore Principle for Mac tries a different approach from Framer. Principle for Mac has almost same interface like Sketch which UI designers mostly use in these days. So you don’t need to learn the interface of Principle.

Also, Principle’s way to animate between artboards is like using Magic Move on Keynote. Let me say that it just works!

Third, Principle has various options to share your animation. Principle can export an animation work to an independent Mac app. So even though an user doesn’t have Principle for Mac, he or she can open and run it on his/her Mac. And it can also export animations to video or animated GIF file. I love this feature. I can share animations from Principle through all kind of channels, Facebook, Messanger, Twitter, Dribble, etc.

I think Principle team strategically put this into Principle for marketing.

Some ideas for Principle for Mac

Principle recently released version 1.2. And I think that they are rapidly updating Principle in the near future.

Through my experience I come up with several ideas for Principle.

  • More options to control audio and video layers’ properties.
  • Easily add a typing animation
  • Share the animation through web
  • AppleScript support

Principle Examples

Principle References

  • Principle for Mac
  • Principle Repo
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

5/02/2016

LG found their own path.

 4:25 PM     No comments   

I think that LG tries to be the best. It finally found their own path to innovate.



LG succeeded to put a finger print sensor into their smarthphone’s screen.



According to this What is Apple going to do with their iPhone7? I hope that Apple does this thing,too.






Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

4/29/2016

Why does Google build smart lenses?

 11:06 PM     google glass, offline conversion tracking, smart lense     No comments   

Google always wants to build a platform for advertising. By the way Google’s territory has been limited to online ads.

Let’s us think about a display ad on offline. Sometimes you might see a special offer which is advertised on a shop’s external display and then you visit the shop to look around what their product or service is. In this case a conversion was created by the offline display ad. But, Google can’t track this so far.

Smart lenses for offline advertising

If you wear smart lenses, Google might be able to track what you see on the offline and then Google can track how a conversion is created on the offline. So Google’s advertising service could be expanded to the offline.

Recently Google got succeeded to develop a smart lense. If this is commercialized, the case above could be happend in the near future.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

4/25/2016

Will the type 1 diabetes be conquered?

 12:40 AM     Type 1 Diabetes     No comments   

My fater has had a diabets for long time. And recently I read this article which could be a real solution for ultimately curing diabetes.

I hope that this solution is commercialized as soon as possible.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

The killer app for iPad Pro with Apple Pencil

 12:39 AM     Apple Pencil, iPad Pro, Keynote with Apple Pencil     No comments   

Apple has been struggled to boost iPad’s sales. The recent Apple’s earning call also warned that the sales of iPad are getting difficult to boot even though Apple launched a brand new product calling iPad Pro.

So I would like to suggest that Apple should focus on popularizing iPad Pro’s Apple Pencil to normal users.

What if you can draw a rectangle on Apple Keynote software on iPad Pro? It could be a seeling point of iPad Pro to normal users.

The combination of Keynote app on iPad Pro + Apple Pencil would be better than Keynote app on Mac. Because drawing functionality will attract normal users into Keynote for iOS.

So I hope that Apple is already preparing an update of Keynote for iOS which is fully compatible with iPad Pro and Apple Pencil. And I think that the pencil drawing function should be added to Keynote for iOS.

I have beein Keynote user since 2005. And if the update that I described above is released, I will definately buy iPad Pro with Apple Pencil to change my presentation device from Mac.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Remove "Desktop Video Firmware Updater" process in Mac

 12:38 AM     Desktop Video Firmware Updater, Mac, macOS     1 comment   

One day I found a process named Desktop Video Firmware Updater which has an ugly icon on the system activity app on Mac and then I figured out it was from Blackmagic Design software which I installed at the past time. But, I don’t use it now.

I tried to kill the process, but, I couldn’t do it. So I found the location of the execution file at the link below,

/Library/Application Support/Blackmagic Design/Blackmagic DeckLink/Desktop Video Firmware Updater.app/Contents/MacOS/Desktop Video Firmware Updater

After removing it I finally can’t see it on the activity window. If someone has used Blackmagic Design software on Mac, please refer this post to clean up your processes on Mac.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

OmniFocus Review Perspective action using Launch Center Pro

 12:38 AM     Launch Center Pro, OmniFocus Perspective, OmniFocus Review     No comments   

At every night I have a time to review OmniFocus’s perspectives. But, it has been painful to tap another view back and forth in OmniFocus.

So I thoguht how I can make a flow of it. And which one would be the best tool to implement this?

My requirements are below,

  1. The user interface shows a perspective list that I can easily tap.
  2. After tapping I should be able to have a time to review on the perspective in OmniFocus.
  3. Without scrolling I should be able to choose another perspective.

To achieve the second one, I picked up Launch Center Pro as a right choice. Because the callback function calling lc-callback can give me a time to review a perspective in OmniFocus.

If you use x-callback-url, it automatically goes back to the origin app. So I wouldn’t have a time for reviewing a perspective.

So here is my lcp action.

[list:Daily Check|Daily Check=[action:131]|Deferred=omnifocus:///perspective/{{Deferred}}?lc-callback=[action:129]|Delegated=omnifocus:///perspective/{{Delegated}}?lc-callback=[action:129]|Next=omnifocus:///perspective/{{Next Actions}}?lc-callback=[action:129]|Dayone=dayone://?lc-callback=[action:129]]

[action: 131] : It shows the daily check routine perspective that I made in OmniFocus. [action: 129] : It should be the action itself.

I considered using Workflow which is one of my favorite apps in iOS. But, in this case Launch Center Pro did a great job.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Not useful to use Drafts with nvAlt on the Mac

 12:37 AM     Drafts for iOS, Drafts for Mac, nvALT     No comments   

Not useful to use Drafts with nvAlt on the Mac

I love the way that Notesy pursues. Because it perfectly syncs with nvAlt on the mac through Dropbox.

But, the way that Drafts explains is not appropriate for me. It takes more steps to sync with nvAlt on Mac.

Notesy looks that their update is getting slower. And I like the power of Drafts actions.

The only thing I miss on Drafts for iOS is the way that syncs with nvAlt on Mac.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Let's learn Set in Swift language

 12:37 AM     Set, Swift     No comments   

Set is different from Array. Array is ordered. By the way Set isn’t. Another different thing is Array can have same elements.

For example,

let ar1 = [1, 1, 1, 1] 

The code above is possible in Array. But you can’t do it in Set.

Set could be similar to Dictionary. Because each element in Set must be unique like Dictionary’s key value. Set conforms Hashable protocol in order to have unique elements.

The different thing between Set and Dictionary is that Set doesn’t have Key value.

Let me organize everything above.

Collection Type Ordered Unique Stores
Array Yes No Elements
Dictionary No Keys Key-value pairs
Set No Elements Elements
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Launch Center Pro , Custom URL action to open and search multiple apps at once

 12:36 AM     Custom URL, Launch Center Pro     No comments   

Recently I tried to write a custom URL action on Launch Center Pro. The goal of this action is opening and searching a keyword into multiple map apps. The first app is Google Maps and second one is Daum Maps which is popular in Korea.

So my action sequence is below,

  1. Get a search keyword from user input on Launch Center Pro.
  2. Copy the keyword to iOS clipboard.
  3. Open and search on Google Maps app with the clipboard text.
  4. Open and search on Daum Maps app with the clipboard text.

To achieve these actions above, I wrote a custom URL like below.

launch://x-callback-url/clipboard?text=[prompt: Type a keyword]&x-success={{comgooglemaps-x-callback://x-callback-url?q=[clipboard]&x-success={{daummaps://search?q=[clipboard]}}}}

The actions are fine until 3rd steps above. But, the url action following after second x-success which tries to open and search on Daum Maps app doesn’t work.

I think that the code looks fine to work. But, I don’t know why it doesn’t automatically switch to Daum Maps and search the keyword on the app.

If you know a solution on it, please let me know.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

iOS Application States

 12:34 AM     Application, iOS, iOS Development, States     No comments   

There are three questions for distinguishing app states.

  1. Is the app possible to execute codes?
  2. Is the app visible?
  3. Is the app possible to get events?

When app on iOS does enters a state?

  • Active: User launches an app.
  • Inactive: Getting a system event such as SMS, notification, phone call, or alarm.
  • Background: Switching another app
  • Suspend state: Background state has about 10 seconds before it enters the suspended state.
  • Not Running: When iOS decides memory is getting low, it terminates suspended apps.
State Code Execution Visibility Receiving Events
Not Running No No No
Active Yes Yes Yes
Inactive Yes Mostly No
Background Yes No No
Suspended No No No
source - iOS Programming: The Big Nerd Ranch Guide
Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Google's Eric Schmidt uses iPhone6s

 12:33 AM     Eric Schmidt, Google, iPhone6s User     No comments   

Google’s Eric Schmidt is in South Korea to participate in the challenge which is between Sedol Lee and AlphaGo.

In the challenge place Eric Schmidt took out his iPhone6s to take a photo. It’s quite interesting that the chair man of Google is using iPhone. And I guess that it is unprecedented.

By changing the topic AlphaGo did a remarable job yesterday. And I was a little afraid of the advanced speed of the AI.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Fitbit Alta approaches practical users

 12:32 AM     Fitbit Alta, Fitness, Practical User, Wearable     No comments   

Today Fitbit launched Fitbit Alta which is a new wearable device. It looks like Microsoft Smart band.

But, the price got cheaper and it is more functional. So someone who thinks Fitbit has too much premium on their device might think that it’s time to try Fitbit as a primary wearable device.

But, still I am not sure how Fitbit is going to compete with Xiami’s Mi band which is much cheaper than Fitbit.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Errors that I met during Apple Watch app development

 12:32 AM     Errors on Apple Watch Development, WatchOS     No comments   

I have struggled to set up iOS and Apple Watch app’s code signing. And I wrote something that you have to remember before doing it.

First, you have to create each app id for them. Create iOS app’s App ID, Watchkit app’s App ID and Watchkit extension’s App ID. Totally you need three App IDs. I think that it’s really complicated at the beginning.

Second, the bundle identifiers are really important!

I have met several errors based on WatchOS 2.1. So here are the bundle identifer naming convention which works fine.

  • iOS app: com.apple.[Your App Name]
  • WatchKit app: com.apple.[Your App Name].watchkitapp
  • WatchKit extension: com.app.[Your App Name].watchkitapp.watchkitextension.

I am not sure that there are a strict rule on it. But, the configuration above is the only thing which works fine for me.

Third, the provisioning file is frustrating. In the general pane I have met a lot of errors which says ‘Code Sign error: No codesigning identities found’. If you are sure that your configuration is okay, quit your Xcode and re-launch it. It normally sovles the issue.

Fourth, Carefully Look info.plist files. Your provisiong files are correct and no error on Code signings. But, you might get an error that is related to a bundle identifier. In my case I solved my issue through this thread

I hope that this article is helpful for you.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

CleanTalk , My choice for wordpress spam filtering

 12:31 AM     Block Registering Wordpress, CleanTalk, Spambot, Wordpress     No comments   

I have used many kind of spam filtering plugins. I also operate woocommerce based wordpress website and then the problem I met on it was spambots to try registering my website.

So I tried some free plugins which use CAPTCHA. But, I couldn’t be satisfied with it, because it wasn’t capatible with my wordpress theme.

Also, it wasn’t perfect to block spams. So I had to manually remove those spam users.

After that I tried to find an alternative plugin and I chose CleanTalk which is great. Through the trial period it perfectly blocked spams and I haven’t got any frustration through it. Additionally it is fully compatible with my wordpress theme.

If you have had a bad experience on spambots which tries to register your wordpress website, I recommend CleanTalk plugn.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Byword for Mac is getting slower!

 12:30 AM     Byword, Korean, Slower     No comments   

I love Byword for Mac to write something by using Markdown. But, recently I have got a bad experience on it.

When I write an article which exceeded over 300 words in Korean, Byword for Mac became slow to type. It made me frustrated and I felt my productivity of writing was being decreased.

The reason why I bought Byword is that it’s the best writing tool for increasing the productivity. But, this experience isn’t one that I expected.

So I hope that Byword team fixs this as soon as possible.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

An unkown space between vertical divs

 12:29 AM     CSS, HTML, Programming, unknow space between vertical divs     No comments   

Recently when I write a HTML code, I suddenly met an unknown space between vertical divs.

The reason that the issue happens is because each browser has different default css. To solve this, you can reset the margin and padding of divs.

* {
    margin: 0px;
    padding: 0px; 
}

The simple code can solve it. Now and then you can customize the divs with your own css.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

Alfred workflow - nvalt actions

 12:28 AM     Alfred, macOS, nvALT, OSX Alfred     No comments   

I love to use nvalt for writing a draft. And I thought how I can smoothely work with nvalt through Alfred.

So I made an Alfred workflow which helpes you to find a note or create a note in nvALT based on Notational Velocity’s URL schemes

To download and install this workflow, click a link.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

4/24/2016

10 minutes to understand how to develop Parallax scrolling effect

 10:30 PM     Parallax, Parallax Effect, Parallax Effect Video Tutorial     No comments   

In these days we can easily experience a parallax scrolling effect in many websites. A core concept of parallax effect is using multiple layers with different speed in accordance to the scrolling position.

So here is a best video tutorial that I found for understanding that concept.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg

4/21/2016

A great usage of Launch Center Pro's lc-callback

 11:55 AM     launchcenterpro, omnifocus, omnifocus perspectives     No comments   

Launch Center Pro has its own callback function which calls lc-callback. The feature of this is that user should touch a button to go back to Launch Center Pro app after the success of a custom url action.

On the other hand, x-callback-url can automatically redirect you to Launch Center Pro app in a same case. So probably you might think that x-callback-url is a good choice because you can reduce a step.

Review OmniFocus Perspectives

At the end of every day I usually take a review of several perspectives in OmniFocus. So I would like to create a list of perspectives in Launch Center Pro to easily and quickly view them.

By the way if I use x-callback-url, I can’t have a time to review each perspective that I selected. So in this case lc-callback of Launch Center Pro is right fit.

So I implemented a custom url action below,

[list:Daily Review|Daily Check=omnifocus:///perspective//{{Daily Check}}?lc-callback=[action:129]|Deferred=omnifocus:///perspective/{{Deferred}}?lc-callback=[action:129]|Delegated=omnifocus:///perspective/{{Delegated}}?lc-callback=[action:129]]

Additionally I like setting up a notification in Launch Center Pro which can inform me when I should review the perspectives through the custom url action above.

As a result, my workflow to review OmniFocus’s perspectives became much simple. So I hope that you might get an idea from a custom url action above.

Read More
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Newer Posts Home

Search This Blog

Popular Posts

  • How to put a padding into a UITextField ?
  • Keynote Tutorial Text Outline - Make your animation meaningful
  • Keynote Tutorial , Sound is a design,too
  • Keynote Tutorial How to improve your bullets

Blog Archive

  • ►  2020 (2)
    • ►  January (2)
  • ►  2019 (21)
    • ►  December (2)
    • ►  November (6)
    • ►  October (5)
    • ►  September (2)
    • ►  August (3)
    • ►  July (2)
    • ►  June (1)
  • ►  2017 (11)
    • ►  December (2)
    • ►  November (2)
    • ►  July (2)
    • ►  May (1)
    • ►  April (1)
    • ►  March (3)
  • ▼  2016 (48)
    • ▼  December (3)
      • Bug - CLLocationManager deferredLocationUpdatesAva...
      • iOS Keychain in Swift3
      • How to localize plist file?
    • ►  November (2)
      • Isn't LeftBarButtonItem showing on navigation bar?
      • Wait unitil a loop with asynchronous tasks finishe...
    • ►  September (1)
      • Activate Firebase without Cocoapods in Xcode 8
    • ►  August (10)
      • Simple Migration Options for CoreData PersistentSt...
      • New Fitbit Flex 2 , Fitbit Charge 2 and Apple Wat...
      • How can I use San Francisco mono font in Xcode7 ?
      • Why did I get the result nil through dataTaskWithU...
      • How can I change the modal transition of a present...
      • How to point your Godaddy domain to a2Hosting
      • The relationship between AnchorPoint and Position ...
      • How can I start UIBezierPath animation from the to...
      • How to securely use xmlrpc
      • My experience on Upthere
    • ►  July (5)
      • Omni Focus and AppleScript to recreate a task on a...
      • How to make your statusbar style white in iOS9
      • The latest Swift's Regular Expression Tutorial
      • NSBatchUpdateRequest doesn't support updating rela...
      • How to put a padding into a UITextField ?
    • ►  June (7)
      • Keynote Tutorial Character Style , How to use a ch...
      • Keynote Tutorial , How to make an embossed or an e...
      • Keynote Tutorial , Sound is a design,too
      • Keynote Tutorial Text Format - Make your font cons...
      • Time machine gives error "can't connect to a curre...
      • Keynote Tutorial Text Outline - Make your animatio...
      • Keynote Tutorial How to improve your bullets
    • ►  May (2)
      • 3 reasons I recommend Principle for Mac
      • LG found their own path.
    • ►  April (18)
      • Why does Google build smart lenses?
      • Will the type 1 diabetes be conquered?
      • The killer app for iPad Pro with Apple Pencil
      • Remove "Desktop Video Firmware Updater" process in...
      • OmniFocus Review Perspective action using Launch C...
      • Not useful to use Drafts with nvAlt on the Mac
      • Let's learn Set in Swift language
      • Launch Center Pro , Custom URL action to open and ...
      • iOS Application States
      • Google's Eric Schmidt uses iPhone6s
      • Fitbit Alta approaches practical users
      • Errors that I met during Apple Watch app development
      • CleanTalk , My choice for wordpress spam filtering
      • Byword for Mac is getting slower!
      • An unkown space between vertical divs
      • Alfred workflow - nvalt actions
      • 10 minutes to understand how to develop Parallax s...
      • A great usage of Launch Center Pro's lc-callback
Powered by Blogger.

Navigation Menu

  • Home
  • About
  • Documentation
  • Contact

Contact Us

Name

Email *

Message *

Copyright © Victor Choi | Powered by Blogger
Design by Hardeep Asrani | Blogger Theme by NewBloggerThemes.com | Distributed By Gooyaabi Templates