• Как реализовать сортировку категорий, как на сайте 220-volt.ru?

    morozovdenis
    @morozovdenis
    м?
    <style>
    a {
    font-weight: bold
    }
    a.first-letter-bold:first-letter {
    font-weight: 700;
    }
    </style>
    
    <a class="first-letter-bold" href="/catalog/gajkoverty/">Гайковерты</a>


    в каждом браузере сейчас есть инспектор html/css - там все такие вещи можно очень легко посмотреть
    Ответ написан
  • Как составить следующий запрос в MySQL?

    morozovdenis
    @morozovdenis
    странная у вас структура

    правильно вот так:
    product(id, manufactured_id, name)
    manufactured (id, name)


    тогда запрос должен быть вот такой:
    SELECT *
    FROM manufactured
    LEFT JOIN product ON product.manufactured_id = manufactured.id
    WHERE product.id IS NULL


    я плохо понимаю вашу структуру и где какие хранятся id-шники, запрос вам нужен в таком духе что я написал выше

    UPD:
    скорее всего вам нужен такой запрос:
    SELECT *
    FROM manufactured
    LEFT JOIN product ON product.manufactured_id = manufactured.manufactured_id 
    WHERE product.product_id IS NULL
    Ответ написан
    1 комментарий
  • Как можно сохранить div?

    morozovdenis
    @morozovdenis
    естественно сохранять в бд

    делать это так:
    <form ...>
    <div ...><input name="values[]" ...></div>
    </form>


    добавили ещё один и теперь будет так
    <form ...>
    <div ...><input name="values[]" ...></div>
    <div ...><input name="values[]" ...></div>
    </form>


    <?php
    
    //скрипт в который происходит submit
    ...
    
    $values = implode(";", $_POST["values"]);
    
    //сохранить в базу строку $values
    
    ?>


    //скрипт отображения form-ы
    
    <form ...>
    <?php
    
    //достать $values из базы
    
    $arr = explode(";", $values);
    
    for ($arr as $value)
    {
    echo "<div><input name=\"values[]\" value=\"$value\" /></div>";
    }
    
    ?>
    <imput type="submit" />
    </form>
    Ответ написан
  • Как организовать RESTFul сервер?

    morozovdenis
    @morozovdenis
    azure mobile service

    web-server, база данных и всё прочее в облаке, самому ничего поднимать не нужно

    azure.microsoft.com/ru-ru/services/mobile-services
    Ответ написан
    2 комментария
  • Как сделать задержку выполнения скрипта < 10 миллисекунд?

    morozovdenis
    @morozovdenis
    стало любопытно мне, пошёл php вспоминать

    у меня этот код:
    var_dump(number_format(microtime(true), 6));
    time_nanosleep(0, 10 * 1000 * 1000);
    echo "<br />";
    var_dump(number_format(microtime(true), 6));
    вывел следующее:
    string(20) "1,396,895,032.113305" 
    string(20) "1,396,895,032.123673"

    time_nanosleep - всё правильно усыпила на 10 милисекунд
    Ответ написан
  • Как сделать задержку выполнения скрипта < 10 миллисекунд?

    morozovdenis
    @morozovdenis
    $lastTime = microtime(true);
    
    for($i = 1; $i <= 1000; $i ++){
        while (true)
        {
               $new_last = microtime(true);
               if ($new_last - $lastTime > 0.010)
               {
                        $lastTime = $new_last;
                        break;
               }
        }
    
        /*
        * какой-то код
        */
    }
    Ответ написан
    1 комментарий
  • Как выбрать все категории статьи?

    morozovdenis
    @morozovdenis
    GROUP_CONCAT() вам поможет

    blog.nagaychenko.com/2010/06/15/%D1%80%D0%B0%D0%B1...

    пользоваться так:

    TABLE POST {id, text}
    TABLE CATEGORY {id, name}
    TABLE CATEGORY_POST {id, category_id, post_id}
    
    SELECT POST.id, POST.text, GROUP_CONCAT(CATEGORY.name SEPARATOR ', ') AS categories FROM POST
    JOIN CATEGORY_POST ON (POST.id = CATEGORY_POST.post_id)
    JOIN CATEGORY ON (CATEGORY.id = CATEGORY_POST.category_id)
    GROUP BY POST.id, POST.text


    но в чём проблема просто join-ить и потом в php циклом пройти и собрать в нужную структуру?
    Ответ написан
  • Obj-C Как правильно работать с потоками?

    morozovdenis
    @morozovdenis
    в этом конкретном случае вам надо просто дизаблить кнопку

    - (IBAction)login:(UIButton *)sender {
            sender.enabled = NO;
    	AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    	NSDictionary *parameters = @{@"_login": @"bar", @"_pass" : @"123"};
    	[manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    	    NSLog(@"JSON: %@", responseObject);
                sender.enabled = YES;
    	} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    	    NSLog(@"Error: %@", error);
                sender.enabled = YES;
    	}];
    }


    в общем случае задача которую вы описываете на мой взгляд специфична для каждого проекта.

    если хотите запросы одного типа выполять последовательно, можете использовать например NSOperationQueue

    если хотите что-бы в один момент выполнялся только один запрос конкретного типа, то в любом случае заводить BOOL-флаг, можете написать обёртку над вашем методом выше которая сама будет рулить такие ситуации
    Ответ написан
    2 комментария
  • Почему не получается выбрать таблицу?

    morozovdenis
    @morozovdenis
    select * from mails where name = "name";или
    select * from mails where name = 'name';
    не помню как строки обрамляются

    соответственно когда выполняете запрос из php
    mysql_query("SELECT * FROM mails WHERE name='$template'");
    Ответ написан
    1 комментарий
  • Переводы, как правильно работать с наименованием количества в Yii2?

    morozovdenis
    @morozovdenis
    function getLabel($count)
    {
    if ($count == 0)
    return "Нет собак";
    if ($count == 1)
    return "Одна собака";
    if ($count % 100 > 10 && $count % 100 < 20)
    return $count . " собак";
    switch ($count % 10)
    {
    case 0: return $count . " собак";
    case 1: return $count . " собака";
    case 2: return $count . " собаки";
    case 3: return $count . " собаки";
    case 4: return $count . " собаки";
    case 5: return $count . " собак";
    case 6: return $count . " собак";
    case 7: return $count . " собак";
    case 8: return $count . " собак";
    case 9: return $count . " собак";
    }
    }
    Ответ написан
  • Есть ли библиотеки для реализации кластеризации на PHP?

    morozovdenis
    @morozovdenis
    если вам не обязательно честную кластеризацию то можно и самому не долго написать:
    предисловие: мною было посчитано что смещение на 0.01 градуса по прямой на нашей планете земля можно считать 1111 метров
    $objects = array(array('lon' => 1, 'lat' => 2), ..., ...);
    $cluster = array();
    $levels = 10;
    $firstRectWidth = 0.01; //самый маленький "квадрат" будет 1111 на 1111
    for ($i = 0; $i < count($objects); $i++)
    {
    $obj = $objects[$i];
    for ($level = 1; $level <= $levels; $level++)
    {
             $lon_index = ($obj->lon) / ($firstRectWidth * (2 ^ $level)); // не помню как степень в php
             $lat_index = ($obj->lat) / ($firstRectWidth * (2 ^ $level)); // не помню как степень в php
             $cluster[$level][$lon_index . "-" . $lat_index][] = $i;
    }
    }
    
    // использование
    
    $zoom = 1..10;
    echo "кластеров ".(count($cluster[$zoom]))."<br >";
    foreach ($cluster[$zoom] as $key => $value)
    {
              echo "область ".$key."<br >";
              echo "кол-во элеметнов ". (count($value));
    }
    Ответ написан
    Комментировать
  • Каким образом хранить большой (2400*1800) двумерный массив в БД?

    morozovdenis
    @morozovdenis
    мне кажется привлекательной идея с файлом

    вот как мне это видится(упрощу до 5х5):

    создаём файл размером 25 байт забитый нулями:
    0000000000000000000000000

    и пишем фукнцим считывания/записи массива пусть будет 2х2():
    псевдо код
    bool write(f, char[2][2] data, start_x, start_y, width)
    {
             f_seek(f, start_y * width + start_x);
             f_write(f, data[0]);
             f_seek(f, (start_y + 1) * width + start_x);
             f_write(f, data[1]);
             return true;
    }
    
    char[2][2] read(f, start_x, start_y, width)
    {
             char[2][2] result;
             f_seek(f, start_y * width + start_x);
             result[0] = f_read(f, 2); // читаем два элемента
             f_seek(f, (start_y + 1) * width + start_x);
             result[1] = f_read(f, 2); // читаем два элемента
    }


    тут нет защиты от сбоев

    надр поискать NoSQL базы с возможностью хранить массивы
    Ответ написан
    Комментировать
  • Как проиндексировать таблицу из массива объектов?

    morozovdenis
    @morozovdenis
    ...
        Customers *customers;
        NSMutableDictionary *dictionaryCustomers;
        NSArray *sortedKeys = nil;
    ...
            for (NSDictionary *dictionary in [responseData objectForKey:@"data_list"]) {
                customers = [[Customers alloc] init];
                
                for (NSString *key in [dictionary allKeys]) {
                    if ([customers respondsToSelector:NSSelectorFromString(key)]) {
                        [customers setValue:[dictionary objectForKey:key] forKey:key];
                    }
                }
                //например по имени индексируем
                NSString *fisrtSymbol = [[customers.name substringFromIndex:1] uppercaseString];
                if ([dictionaryCustomers.allKeys containsObject:fisrtSymbol] == NO)
                {
                       dictionaryCustomers[fisrtSymbol] = [NSMutableArray new];
                }
                [dictionaryCustomers[fisrtSymbol]  addObject:customers];
            }
            sortedKeys = [dictionaryCustomers.allKeys sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
                return [obj1 compare:obj2];
            }]


    после этого
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    return dictionaryCustomers.count;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    return [dictionaryCustomers[sortedKeys[section]] count];
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    Customers *c = [dictionaryCustomers[sortedKeys[indexPath.section]] obkectAtIndex:indexPath.row];
    
    ...
    
    return cell;
    }
    
    - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
    {
    return sortedKeys;
    }


    UPD:
    фильтр:
    @interface MyViewController ()
    @property NSMutableDictionary *dictionaryCustomers; // исходные которые были заполненны из responseData
    @property NSArray *sortedKeys; // исходные которые были заполненны из responseData
    
    @property NSDictionary *currentDictionaryCustomers; 
    @property NSArray *currentSortedKeys;
    
    @end
    
    @implemented MyViewController
    
    - (void)parseResponse:(id)responseData
    {
              // парсим ответ
              self.dictionaryCustomers = ...
              self.sortedKeys = ...
    
              self.currentDictionaryCustomers = self.dictionaryCustomers;
              self.currentSortedKeys = self.sortedKeys;
    }
    
    - (void)filterCustomers:(NSString *)sFilter
    {
              NSMutableDictionary *result = [NSMutableDictionary new];
                
                for (NSString *key in [self.dictionaryCustomers allKeys])
                {
                    for (Customers *customer in self.dictionaryCustomers[key])
                    {
                            if (<customer.company содержит sFilter>)
                            {
                                      if ([result.allKeys containsObject:key] == NO) result[key] = [NSmutableArray new];
                                      
                                      [result[key] addObject:customer];
                            }
                    }
                }
            self.currentDictionaryCustomers = result;
            self.currentSortedKeys = [result.allKeys sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
                return [obj1 compare:obj2];
            }]
    
            [self.tableView reloadData];
    }
    
    // тут заполняем tableView из self.currentDictionaryCustomers и self.currentSortedKeys
    
    @end
    Ответ написан
  • Как изменить label при нажатии на кнопку в другом контроллере?

    morozovdenis
    @morozovdenis
    в WBCViewController подпишитесь на событие:
    -(void)viewDidLoad
    {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(needChangeLabel:) name:@"WBCAddWaterViewControllerChangeLabelNotification" object:nil];
    }
    
    - (void)needChangeLabel:(NSNotification *)n
    {
        NSLog(@"%@", n.userInfo);
    }
    
    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"WBCAddWaterViewControllerChangeLabelNotification" object:nil];
    }


    в WBCAddWaterViewController отправляй событие:
    NSDictionary *userInfo = @{@"key1" : @"value1", @"key2" : @"value2"};
    [[NSNotificationCenter defaultCenter] postNotificationName:@"WBCAddWaterViewControllerChangeLabelNotification" object:nil userInfo:userInfo];
    Ответ написан
    Комментировать
  • Как послать уведомление о потере интернет-соединения через всё приложение?

    morozovdenis
    @morozovdenis
    по ссылке на github есть пример как отследить что пропал инет

    вот(я чуток изменил пример):
    @interface MyViewController ()
    
    @property (strong, nonatomic) SDReachability *reachability;
    
    @end
    
    
    @implementation MyViewController
    
    //...
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        [self monitorReachability];
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear];
        [self stopMonitorReachability];
    }
    
    - (void)monitorReachability
    {
        self.reachability = [SDReachability reachabilityWithTarget:self action:@selector(reachabilityChanged:)];
    }
    
    - (void)stopMonitorReachability
    {
        self.reachability = nil;
    }
    
    - (void)reachabilityChanged:(SDReachability *)reachability
    {
        switch (reachability.reachabilityStatus)
        {
            case SDNotReachable:
            {
                NSLog(@"Connection lost");
               UIAlertView* alert = [[UIAlertView alloc] initWithTitle:nil message:@"Connection lost" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
                [alert show];
                // тут делаеш с view всё что захочешь
                break;
            }
            case SDReachableViaWiFi:
                NSLog(@"Connected via WiFi");
                break;
    
            case SDReachableViaWWAN:
                NSLog(@"Connected via WWAN");
                break;
        }
    }
    
    @end

    так делаешь для каждого ViewController-а или можешь сделать это один раз в RootViewController:
    @interface MyRootViewController ()
    
    @property (strong, nonatomic) SDReachability *reachability;
    
    @end
    
    
    @implementation MyRootViewController
    
    //...
    
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        [self monitorReachability];
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear];
        [self stopMonitorReachability];
    }
    
    - (void)monitorReachability
    {
        self.reachability = [SDReachability reachabilityWithTarget:self action:@selector(reachabilityChanged:)];
    }
    
    - (void)stopMonitorReachability
    {
        self.reachability = nil;
    }
    
    - (void)reachabilityChanged:(SDReachability *)reachability
    {
        switch (reachability.reachabilityStatus)
        {
            case SDNotReachable:
            {
                NSLog(@"Connection lost");
               UIAlertView* alert = [[UIAlertView alloc] initWithTitle:nil message:@"Connection lost" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
                [alert show];
    
               [self.navigationController popToRootViewController]; // убираем все контроллеры из стека
               // тут модифицируешь self.view - например добавляеш на неё label "Connection Lost"
                break;
            }
            case SDReachableViaWiFi:
                NSLog(@"Connected via WiFi");
                break;
    
            case SDReachableViaWWAN:
                NSLog(@"Connected via WWAN");
                break;
        }
    }
    
    @end
    Ответ написан
  • Как хранить и выбирать данные для пейджинга?

    morozovdenis
    @morozovdenis
    1. денормализуйте схему БД

    2. дублируйте данные в таком виде что-бы было можно было эффективнее выбирать их
    Ответ написан
    1 комментарий
  • Как осуществить отправку данных методом post в JavaScript?

    morozovdenis
    @morozovdenis
    подключите jQuery к странице:
    <head>
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    ...
    <head>

    потом использовать так:
    <script>
    $.post( "test.php", { name: "John", time: "2pm" } , function(data) {
    //выполнится после запроса и в data будет лежать то, что выведет скрипт test.php в output 
    });
    </script>

    или так:
    <script>
    $.post( "test.php", 'key1=value1&key2=value2' , function(data) {
    //выполнится после запроса и в data будет лежать то, что выведет скрипт test.php в output. в этом случае в php будет доступно $_POST['key1']
    } );
    </script>

    больше примеров здесь: api.jquery.com/jQuery.post
    Ответ написан
    Комментировать
  • Как отдавать пользователю APK-файл с индивидуальными данными?

    morozovdenis
    @morozovdenis
    apk - это zip, следовательно туда можно засунуть побыстрому пачку допфайлов и если у android-sdk есть возможность доступиться до этих файлов, то вот так можно сделать
    Ответ написан
    5 комментариев
  • Какая хорошая литература по Oblective-C?

    morozovdenis
    @morozovdenis
    я сам по началу не читал книжки по objective c, мне хватило пару статей для входа и потом что надо, то гуглил или смотрел документацию от apple

    попозже начинал читать две книги, но через некоторое кол-во страниц я понимал что ничего нового для себя не открывал и забросил:

    по objective-c надо читать книгу у которой апельсинка на обложке (www.ozon.ru/context/detail/id/21462201/) - такая выходит для каждой sdk, т.е. вам нужна такая же, но только для SDK 7.0/7.1

    по Core Data ещё есть хорошая: www.amazon.com/Pro-Core-Data-Second-Edition/dp/143...

    остальные книги которые я находил, посмотрел отзывы в сети и даже читать не начинал
    Ответ написан