?

Log in

No account? Create an account
парам пам пам
Свежие записи 
3-окт-2012 03:55 am(без темы)
пришельцы, мозговой слизень
Еще раз прошу помощи. Нужен не тормозной, и не тупой php-шник. Всего два требования, ну же! Если не сами, так есть же у вас знакомые.

У нас будет ништяк. Гуйню делать почти не придется, а бекэнды писать намного интереснее, чем сайтики крафтить!

Но это еще не все! Если позвоните прямо сейчас Есть возможность с головой окунуться в решение проблем возникающих в хайлоад проектах. Проблем много и их мы можем предоставить на выбор - от архитектурных до хоть проблем с железом. Что понравится.

Ссылка на прошлый такой же пост. Там можно посмотреть где мы сидим, например.

А вот картинка для привлечения внимания.
28-июн-2012 06:18 pm(без темы)
пришельцы, мозговой слизень
Мне нужен PHP-падаван. Он же джуниор.

Можно студента старших курсов. Требования четыре:

  • Уметь PHP хотя бы на четверочку

  • Не бояться линуксовой консоли

  • Хотя бы читать по-английски без проблем

  • Не тупить слишком часто



Плюсом будет опыт работы с Redis, RabbitMQ, nginx.

Ну и да, Новосибирск, Академгородок, Arello Mobile. Находимся тут
18-апр-2012 07:08 pm(без темы)
пришельцы, мозговой слизень
Первый раз в жизни столкнулся с серьезным хайлоадом. Не призрачным таким, когда-нибудь-вероятным, а настоящим.

Нужно перепилить текущую систему(веб) так, чтобы она смогла обрабатывать для начала 10-30 тысяч нестатических запросов в секунду и могла бы легким движением руки(добавлением сервера БД или веб считалки) расширяться и жить дальше. Причем на каждый запрос нужно что-то читать\писать в базу.

Кажется, начинаю изменять SQL базам с NoSQL хранилищами.

А именно, второй день фапаю пока что только на Redis(буду еще смотреть). В голове начинают всплывать прочитанные давным давно на хабре опасные мысли типа «за NoSQL будущее», «нужно все взять и поделить^Wпереписать» и так далее, там много кричали и говорили какие-то сумасшедшие цифры. Когда читал, не придавал им особого значения, но сейчас как-то подзадумался.
Пока что эти мысли под контролем, но вырываются.

100к запросов на запись вот так вот из коробки на моем ноутбуке – не в тапки срать

Еще много думать и читать, взвешивать, проводить нагрузочное тестирование на разные базы на настоящем сервере. Как ни странно, в этот раз никто особо не торопит.

А еще давайте расскажу про великий и ужасный Амазон.
Все у них хорошо: EC2, S3, DynamoDB и много всего-всего, что отлично скалируется и делает жизнь программистов и администраторов растущей системы беззаботной и безоблачной. То есть наоборот – облачной.

Все в одну глотку орут, что у амазона все относительно дешево.
Когда-то давно смотрели на их EC2 и выяснили, что это не совсем так, но сегодня я пошел считать сколько будет стоить хостинг базы DynamoDB для нужных нам нагрузок.

Параметры поставил такие:
Размер базы - 10 гигабайт;
Размер одной записи - 1кб;
Количество чтений и записей в секунду - 100000.

Получается 87 тысяч долларов. В месяц. За 87 тысяч баксов в месяц можно построить датацентр в европе. И не один, думаю.

Идут они в хуй с таким ценником.

Амазон хорош, для маленьких штучек. Которые поместятся на одну виртуальную машинку с 256мб оперативной памяти, 1ггц процессором и небольшой нагрузкой. Тогда действительно получится все дешево. Первым делом нужно уходить с амазона, когда вырастаешь из одной машины.

Пока все.
14-янв-2012 05:17 am(без темы)
пришельцы, мозговой слизень
А вот задачка.
У меня есть мыша Razer DeathAdder. Она светится вся синим цветом и мешает спать по ночам. В винде есть для неё софтина, которая позволяет противный диод отключить.

Под линукс драйвера, конечно же, никто не писал. Как сделать так, чтобы лампочка потухла?
Проснифать виндовый драйвер, чтобы узнать что он шлет? Вряд ли.

С прошлой мышью я поступил просто - разобрал и спаял ноги диода. Он потух, но осадочек остался.
13-янв-2012 04:38 pm(без темы)
пришельцы, мозговой слизень
Раньше я думал, что нет редактора лучше vim. Теперь я пользуюсь Sublime Text и просто в восторге. Он платный, но там безлимитный trial(несколько раз в день при сохранении вылазит окошко с просьбой заплатить - ничего страшного). Если бы не стоил конских 60 баксов, купил бы. Ага, я нищеброд.

Долгое время я в нем как-то сомневался, но сегодня нашел плагин Vintage, который включает vim mode в этом прекрасном редакторе, делая его идеальным. Для меня, конечно же.
26-дек-2011 12:13 am(без темы)
пришельцы, мозговой слизень
Написал клиента под андроид для крестиков-ноликов.
Вот. Посмотреть можно либо так
либо так:
17-дек-2011 02:31 am(без темы)
пришельцы, мозговой слизень
0.25, товарищи!
12-дек-2011 05:15 am(без темы)
пришельцы, мозговой слизень
Товарищи эклипсоведы, нужна помощь.
Мне очень нравится его автоформатилка, стучи себе по кнопкам, а оно само всё отформатирует как надо.
Но скажите, что вот это за херня?



Какого хрена он так делает? Причем делает это только если объявление происходит внутри case. Выношу наружу - всё нормик. В настройках форматтера подергал уже все правила - ничего не подошло.
Похоже на баг переносчика строк. Либо я тупой.

P.S. и да, я пишу на джаве (sic)
15-ноя-2011 08:16 pm(без темы)
пришельцы, мозговой слизень
Либо я что-то делаю не так, либо документация у php действительно настолько ужасна, что несколько раз в неделю приходится читать его исходники. Я уже неплохо там ориентируюсь.
Надо, пожалуй, сесть, да написать какой-нибудь модуль. Для закрепления, так сказать.
28-окт-2011 08:51 pm(без темы)
пришельцы, мозговой слизень
В общем, вот очередной программизм от меня. На этот раз на питоне

Идея примерно такая: я хочу приходить домой и смотреть свежие видео всяких товарищей, на которых я подписан на ютубике. Я хочу смотреть HD и хочу смотреть именно видео, а не крутящийся лоадер.

Ну и вот, в общем-то фигня, которая сохраняет весь фид подписок пользователя. Аккуратно распихивает всё по video/%username%/, где %username% - это имя чувака, на которого подписались. Файлы смотреть снизу вверх(если упорядочить по алфавиту).

Для работы нужно:
- python > 2.4.3;
- Установленный пакет с gdata API для питона(вот тут мануал). Можно было сделать без него, но я это уже поздно понял;
- google аккаунт;
- youtube аккаунт;
- установленную программку youtube-dl последней версии.

Для начала стоит проверить, что youtube-dl работает вообще. вот так вот:
$ youtube-dl "http://www.youtube.com/watch?v=DKJ2SejHUrY"

Если начинает качать, то все хорошо значит. Если не работает, то запускаем youtude-dl -U, ждем пока проапгрейдится и пробуем заново. Если youtube-dl -U не работает, значит она совсем старая и качать новую версию придется руками из интернетика.
Никакие ошибки не обрабатываются, так что если что-то упадет - ну ой, мне похер.

Алгоритм работы с программой примерно такой:
1. Перед сном запускаем программу
2. С утра просыпаемся и видим, что можно смотреть много всяких видео
3. ...
4. profit

#!/usr/bin/python
import gdata
import gdata.youtube.service
import string
import os
import commands
import sys

google_account = "YOUR GOOGLE ACCOUNT";
google_password = "PASSWORD";
youtube_account = "YOUR YOUTUBE USERNAME";

yt_service = gdata.youtube.service.YouTubeService()
yt_service.email = google_account;
yt_service.password = google_password;
yt_service.source = 'yt-subs'
yt_service.ProgrammaticLogin()

video_feed = yt_service.GetYouTubeVideoFeed( 'https://gdata.youtube.com/feeds/api/users/' + youtube_account + '/newsubscriptionvideos?max-results=50' );

def get_base_path():
    return "video/";

def get_user_path( username ):
    return get_base_path() + username + "/"

def get_filename_tmpl( username, published, id ):
    return get_user_path( username ) + published + "#" + id + ".%(ext)s"

def get_user_time_marker_path( username ):
    return get_user_path( username ) + ".timestamp"

def get_user_time_marker( username ):
    if not os.path.exists( get_user_time_marker_path( username ) ):
        return "0000-00-00T00:00:00";
    f = open( get_user_time_marker_path( username ), "r" )
    timestamp = f.read()
    f.close()
    return timestamp

def set_user_time_marker( username, timestamp ):
    f = open( get_user_time_marker_path( username ), "w" )
    f.write( timestamp )
    f.close()

entries = []
for entry in video_feed.entry:
    entries.append( entry )

entries.reverse()
for entry in entries:
    video_id = entry.id.text[string.rfind( entry.id.text, "/" )+1:]
    published = string.split( entry.published.text, "." )[0]
    username = entry.author[0].name.text

    if not os.path.exists( get_user_path( username ) ):
        os.makedirs( get_user_path( username ) )

    time_marker = get_user_time_marker( username )
    if published > time_marker:
        video_url = "http://www.youtube.com/watch?v=" + video_id
        filename_tmpl = get_filename_tmpl( username, published, video_id )
        command = 'youtube-dl -o "'+filename_tmpl+'" "' + video_url + '"'

        print "downloading " + video_url
        ret = commands.getstatusoutput( command )
        if ret[0] != 0:
            print "Failed to download " + video_url
            sys.exit(1)
        else:
            set_user_time_marker( username, published )


This page was loaded окт 24 2017, 3:51 am GMT.