Advertisement
Guest User

Untitled

a guest
Oct 1st, 2016
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.73 KB | None | 0 0
  1.  
  2. QUESTIONS:
  3. How do you handle difficult clients?
  4. What do you mean by ‘difficult clients’?
  5. For those who are adding extra features behind the job description (borders ?):
  6. I have a rule: before starting working on project I must define the scope of the work and tell to client what will NOT be done.
  7. If it is not obvious - whether the feature belongs to initial work description or extends the scope - I would always treat the feature request in favour of (?) client.
  8. For those who have tough communication manners…
  9. You know - my job is to satisfy client needs no matter if he is pretty and polite or not.
  10.  
  11. How do you make yourself stand out from the crowd?
  12. I’m continuously working on my skills.
  13. I know that’s not enough, so I’m planning to write a series of blog posts related to my work - i.e. (а именно) iOS app architecture articles.
  14. Nevertheless, I believe that excellent marks from previous clients are the best indicator. So I’m trying to get more of them as soon as possible.
  15. I’ve applied to Pro program right after I’ve received first excellent feedback from client. You can see that I’m working as Senior iOS Developer with one client for more than 9 months… And that’s all. I know that is my weak point - I have to get more feedback and more stars. So I’ll try to get more projects and more reviews later this year.
  16.  
  17. Why should clients hire you?
  18. I can deliver excellent solutions on time and under the budget. Also I have strong communications skills and I’m a good team player.
  19. I’ve graduated from local University in the field of Computer Science with honors, and I’ve been studying strong Math’s and Physics in National Research Nuclear University in Moscow.
  20. I have a few own projects that makes me some revenue from the AppStore - that is the good indicator showing that I can and prefer to deliver not just software - but profitable solutions.
  21.  
  22.  
  23. TEST ASSIGNMENT COMMENTS:
  24.  
  25. I think you are interested in technical details - so I’ll try to explain my work in technical terms.
  26.  
  27. First of all, I’ve found the correct ViewController for the assignment. The PhotographersCDTVC had been initially set as starting view controller when I opened the app for the first time.
  28.  
  29. CDTVC is an abbreviation for CoreData TableViewController - so PhotosCDTVC was a better choice for the starting point.
  30.  
  31. Then I’ve had to get countries from Flickr API.
  32.  
  33. FlickrFetcher class was the place where I could get the info about how the data could be obtained.
  34. So, googling the flickr method flickr.photos.search gave me the info about the Flickr data model.
  35. A saw that photo JSON dictionary contains place_id. It is clear that making separate request per each photo is not an option - so I’ve found the way (how?) to get the country information using single api call - just add ‘place’ to extras.
  36. I have to tell that this string is not documented in the flickr.photos.search API documentation - so it is a temporary, but working solution.
  37. Last word in place attribute gave me the country.
  38. Making a tableview with sections is trivial with FRC, just adding a sectionName is enough to get it working.
  39. Note: I do (?) understand that I’ve used not documented API, but for the sake of making a workable solution on (?) limited time I’ve decided to keep it.
  40. If we do need more info about places - we could add an Entity to Core Data model and get full place information using flickr.places.getInfo method.
  41.  
  42. Sorting by author name is trivial - but I want to mention relationshipKeyPathsForPrefetching property of NSFetchRequest. Using it we can avoid fetching whoTook Photographer relationship from faults for every single row of data.
  43. Creation date can be obtained from extras using date_taken key - adding it to cell is trivial.
  44. Saving pictures to iOS camera album is also trivial. ALAssetsLibrary were used.
  45. I’ve used UIAlertView instead of UIAlertController because of deployment target - 7.0. UIAlertViewController is available since 8.0.
  46. Privacy - Photo Library Usage Description
  47.  
  48. For the location and distance.
  49. The data should have been displayed (why present perfect ?) on the same screen. Evidentially I would have been using separate objects for DataSource. And it would be better to use ViewModel to store distance value.
  50. I’ve used separate class for DataSource - so it became possible to use same table view with different data sources (first is handled by FRC, and second - by just sorted array of photos).
  51. I’ve added a transient property to Photo Entity - so did not need ViewModel class.
  52. Also I want to mention LocationProvider class that tells it’s delegate when the location was updated. Skipping cached locations logic had been added when I was testing it on the simulator.
  53.  
  54. Finally:
  55. Good things:
  56. I’ve delivered fully working solution on time.
  57. The only one request is used to obtain data.
  58. The location provider skips cached locations.
  59. Bad things:
  60. I’ve used undocumented extras=place api parameter (перамита) and string manipulation in order (?) to obtain country.
  61. I’ve used transient “distance” property directly on Entity. The ViewModel would be the better choice (?).
  62.  
  63. To be honest, the whole architecture of the app is not the best I’ve ever seen.
  64. Bad things: placing fetch logic to AppDelegate, CoreData stack in AppDelegate category, using shared FRC code.
  65. For FRC - I know, it is a common practice, but I would prefer to isolate data access layer from view controllers.
  66. For CoreData stack - I would better use (?) MagicalRecord (or RestKit).
  67.  
  68. For me, if I would implement the whole app from scratch - I would prefer to use VIPER and Layers patterns.
  69. And, of course, I know that there are a lot of legacy code that must be supported and reused as is. No problem.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement