Pull to refresh
78
0
Александр @Alex10

Full-stack Web Developer

Send message
Ну в конечном итоге в flv/mp4/webm все и конвертируется, на входе принимается все что угодно. В данном случае делалось что то вроде примитивного ютуба с более-менее продвинутым видеоредактором. Хотя при желании всегда можно конвертировать в еще какой нибудь формат и оставлять ссылку на скачивание например.

Конвертируется в реальном времени, сам процесс запускается по крону допустим раз в минуту, скрипт просто заносит в базу что он делает, а дальше аяксом обновляется статус операции для клиента (расписать сами операции можно довольно подробно).
Если кому-то будет интересно, но в целом там более-менее все банально. Bootstrap, jquery, MediaElement.js, видеодорожка, аудиодорожка, на них фрагменты, каждый из фрагментов настраивается. В фрагменте указывается какой файл, с какого по какое время, с какими эффектами.
Вы настойчивы
Набросал пример для bottle вначале необходимо выполнить:
pip install jinja2
pip install bottle

также поставить mongodb

создать необходимый шаблон, и запустить питоновский код


from bottle import run, route, request, jinja2_template as templ

def connect():
	mongo = Connection('localhost', 27017)
	db = mongo['db']
	db.authenticate('user', 'pass')
	return db

db = connect()

@route('/chat/<room>')
def chat(room):
	doc = db.chat.find_one({'_id':room})
	initiator = 1
	if not doc:
		initiator = 0
		doc = {'_id':room, 'mess': []}
		db.chat.save(doc)
	return templ('rtc.tpl', initiator = initiator, room=room)

@route('/chat', method='POST')
def chat_post():
	lst = 0.0; msg = []
	room = get_post('room')
	user_id= get_post('user_id')
	last= float(get_post('last', 0))
	mess= get_post('mess')
	doc = db.chat.find_one({'_id':room})
	if mess:
		doc['mess'].append((time.time(), mess, user_id))
		db.chat.save(doc)
	for i_time, i_msg, i_user in doc['mess']:
		if i_user != user_id and i_time > last:
			lst = i_time
			msg.append((i_time, i_user, i_msg))
	if not lst: lst = last
	return json.dumps({'result': 'ok', 'last': lst, 'msg': msg})

def get_post(name, default = None):
	return request.POST[name] if name in request.POST else default

run(host='localhost', port=8080)
Честно говоря я вас немного не понимаю. Вам приведенный мной python код кажется настолько сложным что его невозможно написать самому? Если вы усматриваете откровенный копипаст то приведите пожалуйста пример. Или имелась в виду клиентская часть?
А на счет Ctr+U сделайте мне эту комбинацию на серверном питоновом скрипте этой демки
На питоновский код если честно не смотрел, там заточено для app engine, используется база гугла и тд. В том коде что я привел используется ajax, mongodb, две простеньких функции. Конечно у меня нет проверок исключительных ситуаций ошибок и всего остального, но это ж не продакшен, это простой пример.
Да, я имел виду видео блог или какой нибудь интерактивный дневник. Думаю что общение с бюрократией в данном девайсе тоже будет иметь успех.
Ну судя по всему ждать осталось не так долго, опера перешла на webkit. Mozilla старается в реализации webrtc. Думаю что постепенно google glass и другие будут видео с камеры транслировать именно через webrtc.
Давно уже не играл в Counter-Strike, интересно по с равнению с Urban Terror у них есть изменения в лучшую сторону?
Обязательно напишите еще про «схемы легальной минимизации налогообложения и защиту от проверок». Думаю многим полезно будет почитать.
Тем не менее благодарю, это уже что то, но к сожалению не получается туда перетащить новые вкладки. Получается только в самом плагине их перетаскивать.
Не хватает в хроме нормальных закладок, те что есть не такие удобные как в мозиле.
Хотя бы два слова сказали об используемых технологиях.
Может составит конкуренцию PeyPal
Если честно то я мало иследовал плюсы babel относительно gettext, при том что gettext более распространен. Насколько я понимаю фрагмент:
import gettext; gettext.translation(domain, path, ['ru'], codeset='UTF-8')
Для babel примерный аналог:
from babel.support import Translations Translations.load(dirname=resource_filename(__name__, 'locale'), locales=['ru'], domain='messages')
Разница не очень большая.
jinja2 все равно не может знать о местонахождении locale, поэтому ей нужно указывать откуда брать переводы.
А строчки:
jinja = Environment( extensions=['jinja2.ext.i18n']) jinja.install_gettext_translations(translations)
и
kwarg['_'] = get_trans(module)
Выполняют примерно одинаковую задачу. Но с небольшой разницей, get_trans() «знает» что такое модули, и каждому модулю предоставляет именно его файл переводов, исключая конфликты и пр.
Я думал об этом. Но просто описать настройку wsgi файлика не интересно таких материалов хватает. Интересно было бы описать вывод сообщений об ошибках, наподобие того как это делается в Werkzeug или Django, но было решено в последующих материалах на этом остановится.
Секрет популярности PHP раскрыт? :))
Предлагаете импортировать везде функцию, которая гарантированно нужна во всем проекте?
Добавил, согласен это более универсально. Только придется писать имя модуля полностью. Но это, думаю, и к лучшему.

Information

Rating
Does not participate
Registered
Activity