рд╡рд┐рд╡рд┐рдз рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмреАрд╕ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВ, рдЕрдЪреНрдЫреЗ рдХреЛрдб рдХрд╛ рдореБрдЦреНрдп рд╕рд┐рджреНрдзрд╛рдВрддред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдФрд░ рдореИрдВрдиреЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдХреЛрдб рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде, рдЕрд╕рдВрдЧрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдПрдХ рдЯреАрдо рдореЗрдВ рдПрдХрдЬреБрдЯ рдХрд┐рдпрд╛ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЪрдордХ рдХреЗ рдмрд┐рдирд╛ рд╡рд░реНрд╖реЛрдВ рддрдХ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдП рд░рдЦрд╛ред
рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝реЗрдВ:
15 рдорд┐рдирдЯрддрдХрдиреАрдХ рдХреА рд╕рдордЭ:
10 рдорд┐рдирдЯрдореВрд░реНрдд рдкрд░рд┐рдгрд╛рдо:
30 рдорд┐рдирдЯрдЗрд╕ рдкреНрд░рдХрд╛рд░,
рдХреНрдпреЛрдВ?
рдмреБрд░реЗ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
- рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ
- рдЕрд╕реНрдкрд╖реНрдЯ рдЪрд░
- рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рдзрд┐рдпрд╛рдБ
- рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рджрдо
- рдЦрд╛рдХреА рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЙрд▓реНрд▓рдВрдШрди
- рдЙрдЪреНрдЪ рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛
- рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ рд╣реИ
- рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ
рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рд╣реА рдкрд▓ рдореЗрдВ рджреЛ рдмрд╛рд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдЗрд╕ рддрдереНрдп рд╕реЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреБрдЫ рдХреЛрдб рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЦрд░рд╛рдм рдХреЛрдб рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рд╣реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЖрд╢реНрдЪрд░реНрдп рд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЙрд╕реЗ рдХреБрдЫ рдирдпрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред рджрд░рдЕрд╕рд▓, рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд▓реЗрдЦрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рдЕрдЪреНрдЫреЗ рдХреЛрдб рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдХреЗрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЗрд╕рдХреА рд╕рдордЭ рд╣реИред рд╕реНрдкрд╖реНрдЯрддрд╛ рдПрдХ рд╡рд┐рд╢реБрджреНрдз рдорд╛рдирд╡реАрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рд╕рдВрдХрд▓рдХ рдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреНрдпрд╛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ; рдпрд╣ рд╕рд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рдХрд░рддреА рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдЪрд░ рдХрд╛ рдирд╛рдо рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рддреБрд░рдВрдд рдЙрд╕рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХрд╛ рд╕рд╛рд░ рджреЗрдЦрддрд╛ рд╣реИред
рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдХреЛрдб рдХреА рд╕рдордЭрджрд╛рд░реА рдирд╛рдореЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рд╣реИред рд╡рд░реНрдЧреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ, рдЪрд░ рдХреЗ рдирд╛рдореЛрдВ рд╕реЗред рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╛рдо рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрддрдиреА рд╣реА рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрд╕рд╛ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ:
function locator($device) {
if ($device->token != "" && $device->expire <= $now) {
return false;
}
$modelNotifier = new ModelNotifier($device);
return $modelNotifier->go();
}
, - . .
$device?
$device->expire
$now
? ?$modelNotifier->go()
?
. , ,
$device->expire
, .
ModelNotifier->go()
, . , , token . , .
,
: token!=""
, . , , .
, . тАФ . , ; , . , .
.
?
, тАФ ., , , . , тАФ тАФ .
:
function locator($device) {
if ($device->token != "" && $device->expire <= $now) {
return false;
}
$modelNotifier = new ModelNotifier($device);
return $modelNotifier->go();
}
,
,
: тАЬ ?тАЭ
:
function ModelDevice::isLocatable() {
return ($this->token != "" && $this->expire <= $now);
}
тАж
function locateAndNotifyDevice(ModelDevice $device) {
if (!$device->isLocatable()) {
return false;
}
$modelNotifier = new ModelNotifier($device);
return $modelNotifier->go();
}
, , - , .
. isLocatable(). : , :
- ?
- ?
: , .
:
function isDeviceExpired() {
return ($this->expireAtUnixtime >= $now);
}
function isOurTokenValid() {
return ($this->token != "");
}
function isLocatable() {
return ($this->isOurTokenValid() && !$this->isDeviceExpired());
}
. :
isLocatable()
,
. isDeviceExpired(), ,
.
тАФ
., , , token . , : .
, : . Instant win!
?
, . ! , .
-, . , , . , : . , , . . , ? :)
-, - (тАЬ ?тАЭ) (тАЬ ?тАЭ) .
isLocatable()
, : , . тАФ , . тАЬтАЭ
locateDevice()
, ; , , . тАФ , .
-, , CPU, . , тАФ 1/3
*. , , . , . , , . , .
*300ms тАФ .
:
function getConfig() {
if ($this->hasOption('configs')) {
$configs = $this->getOption('configs');
} else if ($this->hasOption('config')) {
$configs = [ $this->getOption('config') ];
}
if (isset($configs)) {
$root = $this->getOption('root', null);
if (!$root) {
if (isset($_SERVER['PWD'])) {
$root = $_SERVER['PWD'];
} else if (isset($_SERVER['DOCUMENT_ROOT'])) {
$root = $_SERVER['DOCUMENT_ROOT'];
}
}
$configs->root = $root;
}
return $configs;
}
: ( ), . :
function grabConfiguration() {
if ($this->hasOption('configs')) {
return $this->getOption('configs');
} else if ($this->hasOption('config')) {
return [ $this->getOption('config') ];
}
}
function figureOutRootFolder() {
$root = $this->getOption('root', null);
if (!$root) {
$root = $_SERVER['PWD'];
}
if (!$root) {
$root = $_SERVER['DOCUMENT_ROOT'];
}
return $root;
}
function getConfigs() {
$configs = $this->grabConfiguration();
if (!is_null($configs)) {
$configs->rootFolder = $this->figureOutRootFolder();
}
return $configs;
}
iOS:
if ([imageEntry objectForKey:@"fullscreenUrl"]==nil) {
NSString *kind = [imageEntry objectForKey:@"kind"];
if ([kind isEqualToString:@"pdf"]) {
UIImage *i = [UIImage imageNamed:@"galleryPdfIcon"];
[self.uiImagesCache setObject:i forKey:@(photoIndex)];
*photoSize = NIPhotoScrollViewPhotoSizeOriginal;
return i;
} else if ([kind isEqualToString:@"video"]) {
UIImage *i = [UIImage imageNamed:@"galleryVideoIcon"];
[self.uiImagesCache setObject:i forKey:@(photoIndex)];
*photoSize = NIPhotoScrollViewPhotoSizeOriginal;
return i;
} else {
UIImage *i = [UIImage imageNamed:@"galleryBrokenImage"];
[self.uiImagesCache setObject:i forKey:@(photoIndex)];
*photoSize = NIPhotoScrollViewPhotoSizeOriginal;
return i;
}
}
, . . :
- (UIImage *) genericImageForKind:(NSString *) imageKind {
UIImage *candidate = nil;
if ([kind isEqualToString:@"pdf"]) {
candidate = [UIImage imageNamed:@"galleryPdfIcon"];
} else if ([kind isEqualToString:@"video"]) {
candidate = [UIImage imageNamed:@"galleryVideoIcon"];
} else {
candidate = [UIImage imageNamed:@"galleryBrokenImage"];
}
return candidate;
}
тАж
if ([imageEntry objectForKey:@"fullscreenUrl"]==nil) {
NSString *kind = [imageEntry objectForKey:@"kind"];
UIImage *genericImage = [self genericImageForKind:kind];
if (genericImage) {
[self.uiImagesCache setObject:genericImage forKey:@(photoIndex)];
*photoSize = NIPhotoScrollViewPhotoSizeOriginal;
}
return nil;
}
SQL . , , , , .
function(err, dResults) {
if (err) {
console.log(err);
callback(err);
return;
}
var i=0, lastDownloaded = null;
var unixtimes = Object.keys(dResults);
for(i=0;i<unixtimes.length;i++) {
if (dResults[unixtimes[i]].isDownloaded) {
lastDownloaded = unixtimes[i];
}
}
for(i=0;i<unixtimes.length;i++) {
if (unixtimes[i]>lastDownloaded) {
delete dResults[unixtimes[i]];
}
}
self.getOpenPrice(symbol, function(err, openPrice) {
callback(err, dResults, openPrice);
});
}
:
function getLastDownloadedUnixtime(entries) {
var lastDownloadedUnixtime = null;
var unixtimes = Object.keys(entries);
unixtimes.forEach(function(unixtime) {
if (entries[unixtime].isDownloaded) {
lastDownloadedUnixtime = unixtime;
}
});
return lastDownloadedUnixtime;
}
function cleanupEntriesNewerThanLastDownloadedUnixtime(entries, lastDownloadedUnixtime) {
var unixtimes = Object.keys(entries);
for(var i=0;i<unixtimes.length;i++) {
if (unixtimes[i]>lastDownloadedUnixtime) {
delete entries[unixtimes[i]];
}
}
}
тАж
function(err, dResults) {
if (err) {
console.log(err);
callback(err);
return;
}
var lastDownloadedUnixtime = getLastDownloadedUnixtime(dResults);
cleanupEntriesNewerThanLastDownloadedUnixtime(dResults, lastDownloadedUnixtime);
self.getOpenPrice(symbol, function(err, openPrice) {
callback(err, dResults, openPrice);
});
}
XML Amazon S3. , , XML :
strcat(xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
strcat(xml, "<Delete>\n");
strcat(xml, "<Quiet>true</Quiet>\n");
for (uint32_t i=0;i<batchCount;i++) {
char *escapedPath=Deleter::xmlEscape(batch[i]);
strcat(xml, "\t<Object><Key>");
strcat(xml, escapedPath);
free(escapedPath);
strcat(xml, "</Key></Object>\n");
LOG(LOG_DBG, "[Delete] %s", batch[i]);
}
strcat(xml, "</Delete>\n");
, :
void addPathToDeleteXml(char *xml, char *path) {
char *escapedPath=Deleter::xmlEscape(path);
strcat(xml, "\t<Object><Key>");
strcat(xml, escapedPath);
strcat(xml, "</Key></Object>\n");
free(escapedPath);
}
void addBatchOfPathsToXml(char *xml, char **batch, uint32_t batchCount) {
for (uint32_t i=0;i<batchCount;i++) {
addPathToDeleteXml(xml, batch[i]);
LOG(LOG_DBG, "[Delete] %s", batch[i]);
}
}
тАж
strcat(xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
strcat(xml, "<Delete>\n");
strcat(xml, "<Quiet>true</Quiet>\n");
addBatchOfPathsToXml(xml, batch, batchCount);
strcat(xml, "</Delete>\n");
, тАФ . : , - . , - , - , , .
, . , . , , , .
. , . , . , .
тАФ . , : , , .
. тАФ , - .
. , , , autocomplete.
Update: ┬лif (true) return true┬╗ , .. , .