• Как правильно организовать модель данных?

    @hoarywolf
    Если сообщения читаются последовательно, то можно хранить для каждого пользователя ид последнего прочитанного сообщения. Все что с большим ид — считать не прочитанным.
    Ответ написан
    6 комментариев
  • Как правильно использовать базу данных для чата?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    MongoDB документарная база. Заводить новый документ для каждого 'привета' и смайлика выглядит расточительством, поэтому голосую за Postgre.
    Сейчас в чатостроении модно структурировать сообщения в комнате деревом топиков, а не выливать сплошным потоком.
    В тренде архитектура "один источник истины, один способ изменения состояния" то есть все изменения немедленно писать в базу. Так считается консистентней. И хорошо в какой нибудь форме реализовать механизм pubsub, что бы на интересующие(комнаты/топики) изменения состояния можно было подписаться. При записи в базу подписчикам рассылается уведомление, что состояние изменилось и его нужно обновить запросом к базе. Впрочем можно время от времени обновлять без уведомлений без pubsub и без push.
    Подписчик делает такой запрос, обновляет состояние целиком и уже задача стороны клиента сделать diff/patch что бы не перерисовывать view полностью, а только в необходимых местах.
    Ответ написан
    Комментировать
  • Как правильно использовать базу данных для чата?

    Если вам нужны связи, то лучше взять PostgreSQL, например, вместо Монги. Там есть и геолокационные фишки и даже с JSON можно нативно работать.
    Ответ написан
    6 комментариев
  • Почему не удаляют приложения для кэша музыки в AppStore?

    alexyat
    @alexyat
    iOS Developer
    Ответ очень прост - это dark release. Включение доп функционала после прохождения проверки.
    Ответ написан
    Комментировать
  • Как начать разрабатывать 'большие' проекты?

    @vilgeforce
    Раздолбай и программист
    Читайте, не читайте - толку ноль. Без опыта разработки встраиваемых систем и систем реального времени у вас ничего толкового не выйдет.
    Ответ написан
    3 комментария
  • Как правильно работать через github?

    @skvot
    Делаете пул обновленного мастера в свой репозиторий, потом мерджите изменения в ветку со своими наработками.
    Ответ написан
    1 комментарий
  • Фриланс android разработчик без опыта, смс и регистрации?

    gadfi
    @gadfi
    https://gamega.org
    реально, я сам тому пример. Опыт в android был минимален, можно сказать что его не было, но очень хотелось кушать и не хотелось идти тыжпрограмистом в родном городе, переезжать тоже не хочется )

    1. Фриланс часто это маразм ─ множество неадекватов как среди фрилансеров, так и среди заказчиков
    2. Не смотря на пункт первый, фриланс бывает весело ─ мало кто из работающих в офисе сталкивался с написанием программы "Хуификатор" (не мат реальное название программы, которая как ни странно хуифициорвала текст), или нечто столько же бредовое ... люди бывают реально очень странные
    3. Не смотря на 1 и 2 это все же опыт, пр этом из за очень широкого спектора задач иногда даже более обширный чем в конторе (но рути как и везде больше)

    зы в определенный момент пункт 1 меня утомил и сейчас я работаю удаленно в белой, пушистой конторе, где между мной и неадекватами стоит pm с которой у нас мир да любовь и полное взаимопонимание )))
    Ответ написан
    2 комментария
  • Как передать из python скрипта json для ajax запроса?

    sumej
    @sumej
    DevOps
    >сделать сайт учета студентов
    учёт оценок? посещаемости?
    >И какую бд лучше использовать если условия задания такого
    >Предполагаются частые выборки по фильтрам (включая комбинации): фамилия, группа, семестр, средний балл
    Поиск можно и через сфинкс можно и через майскуэль Полнотекстовый поиск и его возможности


    >Студенты могут часто переходить из одной группы в другую
    Не нагрузка.
    >Предполагаются частые выборки по фильтрам (включая комбинации): фамилия, группа, семестр, средний балл
    >Студентов будет много (порядка 1-2 млн)
    Если sql не справляется на SELECT. Тогда нужно будет думать =)

    >И как правильно вообще начинать писать без фреймворка?
    from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
    from os import curdir, sep
    
    PORT_NUMBER = 8080
    
    #This class will handles any incoming request from
    #the browser 
    class myHandler(BaseHTTPRequestHandler):
    	
    	#Handler for the GET requests
    	def do_GET(self):
    		if self.path=="/":
    			self.path="/index_example2.html"
    
    		try:
    			#Check the file extension required and
    			#set the right mime type
    
    			sendReply = False
    			if self.path.endswith(".html"):
    				mimetype='text/html'
    				sendReply = True
    			if self.path.endswith(".jpg"):
    				mimetype='image/jpg'
    				sendReply = True
    			if self.path.endswith(".gif"):
    				mimetype='image/gif'
    				sendReply = True
    			if self.path.endswith(".js"):
    				mimetype='application/javascript'
    				sendReply = True
    			if self.path.endswith(".css"):
    				mimetype='text/css'
    				sendReply = True
    
    			if sendReply == True:
    				#Open the static file requested and send it
    				f = open(curdir + sep + self.path) 
    				self.send_response(200)
    				self.send_header('Content-type',mimetype)
    				self.end_headers()
    				self.wfile.write(f.read())
    				f.close()
    			return
    
    
    		except IOError:
    			self.send_error(404,'File Not Found: %s' % self.path)
    
    try:
    	#Create a web server and define the handler to manage the
    	#incoming request
    	server = HTTPServer(('', PORT_NUMBER), myHandler)
    	print 'Started httpserver on port ' , PORT_NUMBER
    	
    	#Wait forever for incoming htto requests
    	server.serve_forever()
    
    except KeyboardInterrupt:
    	print '^C received, shutting down the web server'
    	server.socket.close()

    >Запись в эти таблицы будет вестись в конкурентом режиме доступа. Возможно нужно будет использовать блокировки либо всю работу спрятать в транзакции sql:
    import threading
    class Repository:
        def __init__(self):       
            self.__lock=threading.Lock()
       def add(self):
           with self.__lock:
                with open(self.config_path,"r") as json_data:
                    try:
                        data = json.load(json_data)
                    except:
                        logging.critical( "FATAL!!!can't read %s" % data)
                        raise ValueError("can't json.load(%s)" % data)

    import MySQLdb
    #Start a connection
    db= MySQLdb.connect(host="dbhost", user="dbuser" , passwd="dbpass", db="dbname")
    db.autocommit(False)
    cursor = db.cursor()
    try:
     cursor.execute("Your SQL")
     cursor.execute("Another sql")
     db.commit()
    except:
     db.rollback()

    запуск uwsgi --ini env.ini того же Flask/Falcon/etc
    env.ini:
    # it's example how run
    [uwsgi]
    plugins = python27
    http-socket = :80
    #pythonpath = /srv/myapp
    #virtualenv  = /home/project/ve
    chdir = /home/project
    processes = 1
    threads = 4
    #pythonpath = ..
    module = manager:app
    # This line below was important
    #wsgi-file = manager.py
    #callable = app
    # Turn this off for production
    catch-exceptions = true
    stats = /.tmp/.uwsgi-stats.socket
    touch-reload = /.tmp/.uwsgi-reload
    Ответ написан
    Комментировать
  • Есть ли смысл сейчас изучать платформу node.js?

    @Itvanya
    Скажу честно : если вас заинтересовала нода только из-за синтаксиса js - учить смысла нет. Нодо - шикарная игрушка, но для более серьёзных вещей лучше использовать тот же асинхронный питоновский торнадо, если уж так нужно.
    Ответ написан
    5 комментариев
  • Есть ли смысл сейчас изучать платформу node.js?

    standy
    @standy
    node.js и io.js в плане api идентичны. Код, который вы напишете будет работать на обоих платформах.

    Основное различие с которым вы столкнетесь — для использования новых фич es6 в node.js нужно использовать флаг --harmony, в io.js они работают без флага.
    Ответ написан
    2 комментария
  • Как правильно составить резюме в IT компанию?

    Insaned
    @Insaned
    У резюме есть ровно одна задача: получить приглашение на интервью. Поэтому пишите там всё что угодно - лишь бы без вранья и читающему было интересно пообщаться с таким интересным перцем. Я как-то позвал на собеседование гражданина ЮАР, в прошлом пилота ВВС (претендовал на вакансию linux админа)только для того чтобы посмотреть что это за тип такой.
    Ответ написан
    6 комментариев
  • Куда перейти с php?Python или Ruby?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    iOS / android
    Java
    Ответ написан
    Комментировать
  • Для изучения какой области web-разработки нужно больше "мозгов"?

    sayber
    @sayber
    Да, я программирую на PHP и еще асинхронно!
    Учить одинаково, во всяком случае у меня так было. Хотя скорее бек сложнее.
    IQ у меня обычный, математика только школьная, но это не мешает мне делать крупные проекты и работать в виде главного разработчика. Еще и команду обучать.

    Тут как говорится - что по душе, на то и смотрите =)
    Если бы я сейчас начинал во всем этом вариться, то выбрал бы скорее фронт, затем уже бекенд.
    У меня же, было так: бекенд, затем веб-дизайн, затем иллюстрации, затем поработал в AF, затем уже фронтенд =)
    Лет за 15 всего успел понабраться )
    Ответ написан
    8 комментариев
  • Как вывести статьи в нужном порядке?

    viktorvsk
    @viktorvsk
    В контроллеер:
    @articles = Article.order('created_at DESC')
    Кстати, во вью вы можете сделать:
    <%= render @articles %>
    <%= will_paginate @articles, previous_label: "← Назад", next_label: "Вперед →" %>

    И создать партиал views/articles/_article.html.erb
    и в нем:
    <h1><%= link_to article.title, article_path(article) %></h1> 
      <%= article.created_at.strftime("%d %b. %Y") %>
      <%= raw article.tag_list.map { |t| link_to t, tag_path(t)}.join(', ') %>
      <div class="well">
        <%= article.body %>
        <p><%= link_to 'Продолжить чтение... ', article_path(article) %></p>
      </div>
    Ответ написан
    2 комментария
  • Как в Питоне проверять есть ли подключение к интернету?

    xSkyFoXx
    @xSkyFoXx
    import urllib
    try:
        urllib.urlopen("http://google.com")
    except IOError:
        "Google is not available! Internet is broken!"


    P.S. Советую совместить с subprocess от Yuri Shikanov
    Ответ написан
    Комментировать
  • Как в Питоне проверять есть ли подключение к интернету?

    dizballanze
    @dizballanze
    Software developer at Yandex
    Можно как-то так:

    import subprocess
    
    internet = False
    while not internet:
        try:
            subprocess.check_call(["ping", "-c 1", "www.google.ru"])
            print("Internet is up again!")
            internet = True
        except subprocess.CalledProcessError:
            print("Internet is still down :(")
    Ответ написан
    1 комментарий
  • Файловое кеширование, как реализовать?

    DAVIDhaker
    @DAVIDhaker
    Сначала загружаешь данные скриптом к себе в хранилище, а потом, при работе программы - делаешь запросы в хранилище, если в хранилище есть такие данные - возвращаются данные из хранилища, если нет - данные загружаются в хранилище, потом возвращаются из хранилища.

    Хранилище - любая примитивная система кеширования.

    import urllib2 as ul, os
    
    def storage(dataid):
        if not os.path.exists("./cache/"+dataid+".tmp"):
            open("./cache/"+dataid, "wb").write(ul.urlopen("http://mysite.com/images/"+dataid+".jpeg"))
        
        return open("./cache/"+dataid+".tmp").read()


    В случае, если данные есть в кеше, то просто функция достанет их из кеша, иначе скачает с интернетов, положит в кэш, потом вернет сохраненные данные.
    Ответ написан
    1 комментарий
  • Как преобразовать NoneType в int?

    Lerg
    @Lerg
    Defold, Corona, Lua, GameDev
    Тут либо ошибка в функции, либо вы что-то делаете не так. Суть в том, что переменная не получила своего значения, никакого.
    Ответ написан
    5 комментариев
  • Планирую проект, нужны ваши советы (веб-разработка, Android, iOS)?

    @Mr_Kibernetik
    Objective C требует достаточно высокой квалификации даже для его изучения.
    Если Вы говорите, что "ни разу не программист", то может быть будет более практично взять какую-нибудь задачу попроще, и на ней начать изучать программирование на Objective C. Все-таки осваивать лучше постепенно, от простого к сложному. А описанная Вами задача потребует хороших навыков даже для опытного программиста.
    Ответ написан
    Комментировать