АРХИВ КАТЕГОРИИ "ТЕХНОЛОГИИ"
ФЕВРАЛЬ 9, 2013
ДЕКАБРЬ 16, 2012

Hi,

Бытсро, проверили, где баги и как лучше сделать (особенно волнует метод value:, нужно ли там темп вар)? Есть ли в кокоа уже имплементация КАС лока? Пасибо/

interface

 

#import <Foundation/Foundation.h>
  1.  
  2. @interface CASLock : NSObject
  3. {
  4. @private
  5.     NSLock * lock;
  6.     BOOL val;
  7. }
  8.  
  9. + (CASLock *)lockWithValue:(BOOL)bval;
  10. - (id)initWithValue:(BOOL)bval;
  11.  
  12. /// Check (and set) lock value to AA:
  13. /// — if lock value is AA:      return YES and do update lock value.
  14. /// — if lock value is not AA:  return NO and do not update lock value.
  15. ///
  16. /// Example usage:
  17. /// <code>
  18. /// if (![checkAndSetLock:NO]) {
  19. /// return; // lock value is already YES
  20. /// }
  21. /// // do stuff, lock value changed to YES
  22. /// </code>
  23. - (BOOL)checkAndSetLock:(BOOL)expected;
  24. - (void)setLock:(BOOL)newval;
  25. - (BOOL)value;
  26.  
  27. @end

implementation

 

#import «CASLock.h»
  1.  
  2. @implementation CASLock
  3.  
  4. + (CASLock *)lockWithValue:(BOOL)bval
  5. {
  6.     return [[CASLock alloc] initWithValue:bval];
  7. }
  8.  
  9. - (id)initWithValue:(BOOL)bval
  10. {
  11.     self = [super init];
  12.     if (self) {
  13.         lock = [[NSLock alloc] init];
  14.         val = bval;
  15.     }
  16.     return self;
  17. }
  18.  
  19. - (void)dealloc
  20. {
  21.     [lock release];
  22.     [super dealloc];
  23. }
  24.  
  25. - (BOOL)checkAndSetLock:(BOOL)expected
  26. {
  27.     @try {
  28.         [lock lock];
  29.         if (val == expected) {
  30.             val = !expected;
  31.             return YES;
  32.         }
  33.         else {
  34.             return NO;
  35.         }
  36.     }
  37.     @finally {
  38.         [lock unlock];
  39.     }
  40. }
  41.  
  42. - (void)setLock:(BOOL)newval
  43. {
  44.     @try {
  45.         [lock lock];
  46.         val = newval;
  47.     }
  48.     @finally {
  49.         [lock unlock];
  50.     }
  51. }
  52.  
  53. - (BOOL)value
  54. {
  55.     @try {
  56.         [lock lock];
  57.         BOOL tmp = val;
  58.         return tmp;
  59.     }
  60.     @finally {
  61.         [lock unlock];
  62.     }
  63. }

 

НОЯБРЬ 14, 2012

Hi,

Guyyyys.

Не секрет, что последние несколько недель наблюдается падение на мировых биржах, вначале этого движения я закрыл все свои позиции, это было примерно в начале октября. Так сложилось, что закрыл я свои позиции не из-за начала падения, а по другим причинам, но не суть icon smile Apple stocks vs Google, NYSE and NASDAQ %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8 Если вы в дивидеднах по качественным акциям типа RGC, FTE, WWE, STO то можно не париться и сидеть дальше.

Ниже приведены недельные графики на 2011-2012 годы. Очевидно что они очень сильно коррелируют на данный момент, стоит также заметить, что в 2011 акции Apple были лучше рынка. Сейчас мы пришли уровням, которые являются примерно серединой — 2/3 между годичными 2012 максимум и минимумом. Стоит отметить что акции Apple сейчас хуже рынка — падают очень стремительно, возможно это из-за того что и росли они лучше рынка и там сидит очень очень много спекулянтов (неудививтельно, т.к. дивиденды Apple не выплачивает, собственно как и Google). Google сейчас падает не так быстро как эпл, и уровень держит получше, идя за насдак.

Что мне не нравится в последнее время у Apple так это выход нового девайса чуть ли не каждые пол года, это слишком часто, хотя андроид девайсы тоже штампуют очень быстро, что тоже не радует, лучше бы обновления Android делали на уже существующие вовремя. Вобщем не радует эпл последнее время, хотя круче макбука еще ничего не придумали в мире, это факт это валеры.

S&P500 Futures (/ES)

SP500 NYSE Futures CME 2011 2012 weekly Apple stocks vs Google, NYSE and NASDAQ %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8

NASDAQ 100 Futures (/NQ)

NASDAQ 100 Futures CME 2011 2012 weekly Apple stocks vs Google, NYSE and NASDAQ %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8

Apple stocks (NASDAQ:AAPL)

Apple AAPL NYSE NASDAQ Stocks Charts 2011 2012 weekly Apple stocks vs Google, NYSE and NASDAQ %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8

Google stocks (NASDAQ:GOOG)

Google GOOG NYSE NASDAQ Stocks Charts 2011 2012 weekly Apple stocks vs Google, NYSE and NASDAQ %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8

НОЯБРЬ 8, 2012

Hi,

Рябы рябские, как дела?

Меня тут вдруг запарила проблема с оптимистик локинг фейлур (StaleObjectStateException, OptimisticLockingFailureExceptionHibernateOptimisticLockingFailureException) в Grails, когда слишком частые запросы на сервер приводят к синхронному обновлению домена в персистенс, что в свою очередь приводит к падению одного из запросов, т.к. version уже обновлен другим потоком (запросом). Собсно я  решил написать небольшой хелпер для сохранения доменов, в  итоге это оказало не хелпером, а заижекченым методом во все доменные классы проекта. Ща покажу как это юзается, а потом уже саму имплементацию.

Домен

  1. // по дефолту в грейлс каждый домен
  2. // юзает optimistic locking, используя
  3. // version колонку (проперти)
  4. class Something {
  5.   String name
  6.   String value
  7. }

Стандартное сохранение домена

  1. // загружаем и обновляем значение
  2. def e = Something.get(1)
  3.  
  4. // если в этот момент другой запрос (поток) обновит
  5. // эту запись, то грейлс кинет StaleObjectStateException
  6. e.value = "asdasd"
  7. e.save flush: true, failOnError: true

Сохранение с optimistic locking with retry вариант 1

  1. // загружаем и обновляем
  2. def e = Something.get(1)
  3.  
  4. // если в этот момент другой  запрос (поток) обновит
  5. // эту запись, то мы рефрешнем запись в сессии и
  6. // попробуем обновить еще разок
  7. e.saveOptimisticWithRetry flush: true, failOnError: true, retryCount: 2, { obj ->
  8.   obj.value = "asd"
  9. }

Сохранение с optimistic locking with retry вариант 2

  1. // все параметры опциональны, их можно опустить
  2. // по дефолту:
  3. // retryCount = 2
  4. // flush = false
  5. // failOnError = true
  6. def e = Something.get(1)
  7. e.saveOptimisticWithRetry retryCount: 5, { obj ->
  8.   obj.value = "asd"
  9. }

Сохранение с optimistic locking with retry вариант 3

  1. // все параметры опциональны, их можно опустить
  2. def e = Something.get(1)
  3. e.saveOptimisticWithRetry { obj ->
  4.   obj.value = "asd"
  5. }

Имплементация optimistic locking with retry

  1. // в Bootstrap.groovy к примеру можно
  2. // заинжектить метод во все домены
  3. for (dc in grailsApplication.domainClasses) {
  4.   dc.metaClass.saveOptimisticWithRetry = { args = null, setter ->
  5.     final int retryCount = args?.containsKey('retryCount') ? args.retryCount : 2
  6.     final boolean failOnError = args?.containsKey('failOnError') ? args.failOnError : true
  7.     final boolean flush = args?.containsKey('flush') ? args.flush : true
  8.    
  9.     int i = 0
  10.     while (true) {
  11.       try {
  12.         // Save domain
  13.         setter(delegate)
  14.         delegate.save(failOnError: failOnError, flush: flush)
  15.         return
  16.       }
  17.       catch (StaleObjectStateException e) {
  18.         // Throw exception if retry count bounds reached
  19.         if (++i > retryCount) {
  20.           throw e
  21.         }
  22.        
  23.         // Refresh object within session
  24.         delegate.refresh()
  25.       }
  26.     }
  27.   }
  28. }

Хорошего дня!

PS Можно вобщем-то подменить и сам метод save() у доменов, добавив в него имплементацию ретрая при оптимистик логинг фейлуре ексепшене.

НОЯБРЬ 2, 2012

Hi,

Рябы рябские, сайлент хилл 2 в кино показывают — смотреть всем!

Прошел месяц с моего переезда на AWS, я обещал скинул сколько вышло по деньгам итд, поэтому вот, выкладываю. $6.56 за этот месяц получилось, в след месяце запощу расходы за весь ноябрь.

AWS Activity Report for one month ec2 route rds 647x768 Amazon AWS  спустя месяц %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8 news

ОКТЯБРЬ 29, 2012

university of liverpool Как я поступал в Университет Ливерпуля %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8 news

Hi,

Как дела рябчики?

Я тут приболел чуток, но это мелочи, пью чаёк, рефакторю и фикшу код — стандартненько все.

А вот пришло утречком письмо счастья, о том, что меня таки взяли в Ливерпульский Университет на Master of Science in Software Engineering, обучение начинается с декабря этого 2012 года. Сразу отвечу на несколько очевидных вопросов, которые я сам задавал своему адмишен консультанту, и которые многие я уверен захотят задать:

  • Обучение удаленное;
  • Поступить можно не имея высшего образования (даже бакалавра), если есть сравнимый опыт работы по специальности, т.е. примерно от 5 лет опыта работы в IT;
  • Платное, в зависимости от выбора типа оплаты, от €17,000 до €21,500, побробнее тут;
  • Диплом не отличается о того, который получают студенты, обучаясь в Ливерпуле в самом универе on-site, или очно как говорят у нас;
  • Сроки обучения зависят от интенсивности, с которым ты обучаешься, примерно в пределах от 18 до 48 месяцев (1.5 года — 4 лет);
  • После успешного окончания универа, можно приехать в Ливерпуль на graduation ceremony;
  • Подробнее о MCs in Software Engineering;
  • Подробнее об Online education in University of Liverpool.

А теперь я вкратце напишу как я поступал, вероятно кому-нибудь это будет полезно. Сперва я выбрал специальность и подал заявку на поступление, кажется тут. На следующий день мне уже звонил мой admission consultant (далее Майкл), с которым мы общались на тему зачем я хочу поступать, есть ли у меня вышка и/или опыт работы в ИТ и ваобще о погоде, на инглише. В дальнейшем мы с Майклом созванивались более 5 раз, точно уже не припомню, собственно через него и проходил процесс моего поступления, ему я скидывал все документы, задавал вопросы, Майкл же мне все объяснял и консультировал что да как. Замечательный чувак, спасибо ему:) Теперь по поводу требований и документов:

  • Скан загран паспорта — это легко сделать;
  • Скан школьного аттестата (я, кстати, не уверен что это нужно было, но если ваобще вышки нет, то лучше отправить);
  • Скан диплома из универа, или если нет диплома, то документ, подтверждающий обучение в универе в течение 2-3 лет, или когда вас там отчислили icon smile Как я поступал в Университет Ливерпуля %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8 news , меня вот отчислили на 8 семестре, т.е. не хватило пол года до бакалавра О_О в любом случае политех это какашка, хотя тусить там прикольно;
  • Резюме — что-то типа такого;
  • Оч важное: Мотивационное письмо на английском 180+ слов, у меня получилось аж 282;
  • Самое важное: Качественное рекомендательное письмо с текущего места работы — тут мои друзья, Санчес и Егорун, и Дейв постарались отличненько, за что им огромное спасибо;

Собирал и приводил в порядок все эти документы я неделю, и потом запулил их Майклу, который мне как обычно перезвонил и рассказал о дальнейшем плане действий, а он  таков, что мне нужно было теперь ждать аксепт или реджект письмо на почту, ну и звонка Майкла icon smile Как я поступал в Университет Ливерпуля %d1%82%d0%b5%d1%85%d0%bd%d0%be%d0%bb%d0%be%d0%b3%d0%b8%d0%b8 news Сам Майкл уже после того как получил от меня все документы, несколько раз названивал в офис AirSense и мучал Дейва разговорами, так что лучше чтоб на текущем вашем месте работы могли общаться на английском.

Ну вот и все, это если в кратце. Есть вопросы — пишите, я, френдли гай, готов всегда помочь.

Хорошего дня!

UPD1 Terms & Conditions: http://www.liverpool-degrees.com/Online%20Learning/Fees%20and%20Finance/Terms%20and%20Conditions.aspx

UPD2 Students Handbook: http://success.ohecampus.com/index.php?mod=dcp&act=navigationindex&navigationid=3633

Страницы:1...34567...18