Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (2)

Наибольший вклад в теги

Все теги (33)

Лучшие ответы пользователя

Все ответы (20)
  • В каких случаях стоит переписывать сайт с нуля?

    @frantic
    1. 99.9% программистов жалуются на код, написанный его предшественниками.
    2. 99.9% программистов жалуются на код wordpress
    3. 99.9% программистов хотят все переписать по своему. И часто это самопис.

    Конечно я утрирую. Но суть в том, что программисту все равно на риски чужого или почти чужого проекта. Он думает о коде. Его красоте, эстетичности, удобстве и т.д. НЕ доверяйте программистам, особенно молодым.

    Взвести риски и траты. Послушайте аргументацию программиста. Вас должны интересовать конкретные проблемы. А не абстрактные заявления. В wordpress код сущий ад. Но в сети очень много сайтов на этом движке и с очень большой посещаемостью.

    К тому же самопис вам точно не нужен. Его сопровождать никто не будет, кроме автора. Если решитесь, то используйте популярный фреймворк. Symfony, Yii, Laravel. Под них вы всегда сможете найти специалиста.

    Если у вас нет проблем с производительностью, если вы не теряете прибыль, если не страдает скорость разработки, то точно думать о переписывании не стоит. Баги и недочеты есть в любом проекте и их нужно исправить.
    Ответ написан
  • Выбрать СУБД между MySQL, PostgreSQL, MariaDB и MSSQL?

    @frantic
    Выбирайте то, что знаете лучше!

    Если MySQL, то рассмотрите MariaDB или Percona. Да и на них вы сможете переехать с MySQL в любое время, так как они обратно совместимы.
    Судя по вашим данным, вопрос нагрузки при учете прямых рук, возникнет перед вами года через два-три. А преждевременная оптимизация может погубить проект.

    И постарайтесь максимально отказаться от JOIN'ов. Как правило из-за них возникает большинство проблем.
    Ответ написан
  • Как организовать правильную загрузку файлов на сервер PHP?

    @frantic
    Вы можете создать на поддомене приложение со своим api для загрузки файлов. Как будто пользуетесь фотохостингом. Например, Яндекс.Картинки.

    Например, на сайте происходит валидация данных, потом через api файл грузится на поддомен. Приложение на поддомене возвращает вам необходимые данные. Например, адреса картинок. Вы их сохраняете где надо.

    Такое приложение может обслуживать и несколько ваших сайтов.
    Ответ написан
  • Многоуровневая UITableView?

    @frantic
    Делал подобное.

    На входе миссив (NSArray), у каждого элемента есть уровень. Пробегал по массиву и создавал вьювы со сдвигом влево. Потом это все пихал в UITableViewCell.

    -(void) flateCommentsData:(NSArray *)_data withLevel:(NSInteger)level
    {
      NSEnumerator * dataEnum = [_data objectEnumerator];
      
      NSDictionary * commentData;
      
      while (commentData = [dataEnum nextObject])
      {
        SModelComment * commentModel = [[SModelComment alloc]init];
        
        [commentModel set:@"id" withValue:[commentData objectForKey:@"id"]];
        [commentModel set:@"text" withValue:[commentData objectForKey:@"text"]];
        [commentModel set:@"userId" withValue:[commentData objectForKey:@"userId"]];
        [commentModel setLevel:level];
        
        CGRect cellRect = CGRectMake(commentModel.level*5, 0, 320 - commentModel.level*5, 0);
        UIView * cellView = [[UIView alloc] initWithFrame: cellRect];
        
        //add avatar
        SModelUser * user = [SModelUserPeer loadObjectById:[commentModel get:@"userId"]];
        UIImageView * avatarView = [[UIImageView alloc] initWithImage: user.smallAvatar.image ];
        avatarView.frame = CGRectMake(5, 7, 35, 35);
        [cellView addSubview:avatarView];
        
        //add username
        UILabel * usernameLabel = [[UILabel alloc] initWithFrame:CGRectMake(45, 5, cellRect.size.width - 75, 20)];
        usernameLabel.font = [UIFont boldSystemFontOfSize:14.0];
        usernameLabel.text = [user get:@"fullName"];
        [cellView addSubview:usernameLabel];
            
        //add text
        CGRect cellTextRect = CGRectMake(45, 25, cellRect.size.width - 75, 0);
        UILabel * cellTextLabel = [[UILabel alloc] initWithFrame:cellTextRect];
        cellTextLabel.text = [commentModel get:@"text"];
        cellTextLabel.font = [UIFont systemFontOfSize:12.0];
        cellTextLabel.numberOfLines = 0;
        [cellTextLabel sizeToFit];
        cellTextLabel.backgroundColor = [UIColor whiteColor];
        [cellView addSubview:cellTextLabel];
        
        
        CGRect textFrame = cellTextLabel.frame;
        textFrame.size.height = textFrame.size.height + 10 + usernameLabel.frame.size.height
        ;
        textFrame.size.height = textFrame.size.height > 50 ? textFrame.size.height : 50;
    
        cellRect.size.height = textFrame.size.height;
        cellView.frame = cellRect;
            
        NSMutableDictionary * item = [[NSMutableDictionary alloc] initWithCapacity:2];
        [item setObject:cellView forKey:@"view"];
        [item setObject:commentModel forKey:@"model"];
        
        [commentsList addObject:item];
        
        if ([commentData objectForKey:@"childs"])
        {
          [self flateCommentsData:[commentData objectForKey:@"childs"] withLevel:level+1];
        }
      }
    }
    


    потом

    -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    	NSDictionary * item = [commentsList objectAtIndex:indexPath.row]; 
    	UIView * cellView   = [item objectForKey:@"view"];
    	SModelComment * commentModel = [item objectForKey:@"model"];
    	
    	NSString * CellIdentifier = [NSString stringWithFormat:@"comment_cell_%d", [commentModel get:@"id"]];
    	
    	UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    	
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        }
    	
    	cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    	[cell.contentView addSubview:cellView];
    
        return cell;	
    }
    
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (1)