- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
srp_base64_table = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./"
def srpb64decode(s):
ints = [srp_base64_table.index(c) for c in s]
pad = len(ints) % 4
if pad != 0:
pad = 4 - pad
ints = [0 for i in range(0, pad)] + ints
notleading = False
buf = []
pos = 0
while pos < len(ints):
b = (ints[pos] << 2) | ((ints[pos+1] & 0x30) >> 4)
if notleading or b != 0:
buf.append(b)
notleading = True
b = ((ints[pos+1] & 0x0f) << 4) | ((ints[pos+2] & 0x3c) >> 2)
if notleading or b != 0:
buf.append(b)
notleading = True
b = ((ints[pos+2] & 0x03) << 6) | ints[pos+3]
if notleading or b != 0:
buf.append(b)
notleading = True
pos += 4
return bytes(buf)
def srpb64encode(b):
pos = len(b) % 3
b0 = 0
b1 = 0
b2 = 0
notleading = False
buf = ""
if pos == 1:
b2 = b[0]
elif pos == 2:
b1 = b[0]
b2 = b[1]
while True:
c = (b0 & 0xfc) >> 2
if notleading or c != 0:
buf += srp_base64_table[c]
notleading = True
c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4)
if notleading or c != 0:
buf += srp_base64_table[c]
notleading = True
c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6)
if notleading or c != 0:
buf += srp_base64_table[c]
notleading = True
c = b2 & 0x3f
if notleading or c != 0:
buf += srp_base64_table[c]
notleading = True
if pos >= len(b):
break
b0 = b[pos]
b1 = b[pos + 1]
b2 = b[pos + 2]
pos += 3
return buf
Кодирование и декодирование блобов для openssl SRP.
А я построю свой диснейленд с блекджеком и шлюхами! (c) тот, кто пилил SRP в openssl
Там в модуле srp вообще внезапное бейс64 используется - таблица символов совсем другая, и паддинг слева(!). Причем лишние ведущие нули отбрасываются. Видимо числа в таком формате компактнее хранятся...
Вместо buf напрашивается его использовать.
Похоже на что-то типа O(N*log(N))... Или я туплю?
http://ideone.com/3bBJT9
Так что отвечаю на вопрос s-a--m: используй list в качестве unicodearray.
Видишь ты код с bytes += bytes2. Если у тебя это где-то начнет выдавать плохую асимптотику, заменяешь bytes на bytearray и все заебись. А теперь вопрос - почему не сделать такое же для юникода?
Плюс в тройке bytes должен вылететь сразу, когда ты попытаешься добавить туда что-нибудь другое, например, юникод, а списке - когда джойнить будешь, и по исключению хуй поймешь где это произошло.
как оптимизирована? можно ссылку?
строки в питоне иммутабельные, как можно оптимизировать их сложение по сравнению с деструктивным буфером?
Внизу, где Notes, пункт 6.
В третьем питоне такого примечания нет (чего я не знал), там прямо сказано: Concatenating immutable sequences always results in a new object.
http://hg.python.org/cpython/file/4f79c3827adc/Python/ceval.c#l4779
str = 'a'
str2 = str
str += 'b'
Чтобы str2 было 'a', а str=ab. Оно проверяет количество ссылок на объект? Оригинально, как лишп, прямо.
А что оно там делает, если 2 ссылки?
Сравните, где лучше читается алгоритм - в версии на си или моей на питоне?
Там, как оказалось, тот еще квест ;) В лучших традициях прыщеблядства, как ты его называешь.
Потом на форуме туториал отпишу в отдельной теме, может кому-то еще пригодится.
Под виндой собирали? Там симлинки нормально сохранились? На фат разделе это даже не собрать?
> openssl, выполнив в msys'ной консоли
Ну как-то не модно. Нужно было все команды записать через &&. Шучу. Где make install или препаковка перед установкой в пакет?
Не, под виндой tar -xf их тупо пропускает. Зато потом конфигур их пересоздает, если их нет. Так что соберется где угодно.
А жопа с 7z и winrar в том, что они эти симлинки извлекают из tar'а как файл, внутри которого написано имя объекта, на который ссылался симлинк. Конфигур видя эти файлы не заменяет их на копии нормальных. И все ломается.
> Где make install
Вопрос к авторам либы. Думаешь от хорошей жизни ручками копировали файлы от openssl? :)
> пакет?
msm что ли? Какие еще пакеты под виндой?
Потестил еще раз - тупо делает копию файла. Даже на нтфс.
P.S. Но вряд ли это спасёт tar.
ЧТОААА?
Да, кстати, чем отличается /D (симлинк) от /J (джойн)?
Есть ещё вариант — сторонний софт. Виндоюзеры ищут софт для того, что должно быть из коробки.
> ./config shared
Вроде же обычно configure и что здесь означает shared?
> cp -r include c:/test/openssl-1.0.1g-inst
А что тут происходит?
> export ZLIB_PATH=c:/test/zlib-1.2.8
А тут?
То ты ебанулся. Тут и нативно то еле собирается, а ты еще кросскомпиляцию захотел...
> Вроде же обычно configure и что здесь означает shared?
Вопрос к авторам либы :) shared - то что собирать дллки, а не только статику.
> А что тут происходит?
Рекурсивное копирование, не?
> А тут?
Эм, переменную окружения замутили и экспортнули... Что не так?
Ну это понятно. Я просто на виндовом set остановился. Меня интересует что значит экспортнули?
С остальными пунктами все ясно... То есть ты настоятельно рекомендуешь собирать под нужный таргет всегда на таргете? А как же всякие телефоны с эплом или андроидом? Не на них же самих собирать. Понятно что с моим последнем примером вопрос больше провокационный, но все же.
Сам же и ответил.
PS: Как Борманд так быстро отвечает на комментарии? Неужели говнутифи?
Передали в шелл из которого этот шелл запустили.
>А как же всякие телефоны с эплом или андроидом? Не на них же самих собирать.
А в чем проблема? Там гектар оперативы и хотя бы двухядерник.
Не совсем... Если написать var=val, то переменная будет доступна только текущему шеллу, если экспортнуть - то и все запускаемым из него прогам.
Нет, в случае шелла в окружение это не попадает.
> Передали в шелл из которого этот шелл запустили.
экспорт в текущем шеле приводит к наследованию потомками этой переменной окружения, а в родительском шеле это выглядит как var=val и при этом не наследуется его потомками, все верно? А что будет если я в своём приложении выполню например через stdlib.system var=val или export? Родительский шел что-нибудь узнает?
Нет конечно. Передача односторонняя.
Ибо передавать переменные окружения от детей к родителям несекурно и ненадежно. Получилась бы херня на порядок опасней чем register globals в php.
P.S. А вот от передачи каких-нибудь структурированных результатов помимо stdout и exit code я бы не отказался ;)
Да как он это сделает то? :) Это же было бы страшное колдунство с IPC, да еще и работающее не всегда... Вдруг предок - другой шелл, или вообще не шелл, или тупо сдох...
Дык баты исполняются в том же шелле...
Линупсовый аналог такого режима будет source script.sh вместо script.sh.
Ну да. Причем тот, который указан в шабанге запускаемого скрипта.
То есть если я в своем шкрипте напишу только строку EXPORT блабла=бла, то это будет бесполезная лажа и я зря напишал этот шкрипт, тк оно выкинется в помойку по завершению шкрипта? А как это обойти, чтобы из шкрипта вызвать шкрипт и экшпорт в шкрипте-потомке попал в шкрипт предок?
Только через source child.sh. Больше никак.
Если есть такая возможность - да. Ибо кросскомпиляция по определению жопа, с которой не стоит связываться без уважительной причины.
А что он там делает? Там же сырцы должны лежать.
> mingw32-make mingw32-ssl-zlib-srp
Это какой-то особый мингевешный мейк mingw32-make и мейк файл он берет из mingw32-ssl-zlib-srp?
А пакеты под линь приходилось собирать? Допустим хочу собрать deb. Например я к своей проге накатал руками мекфайл. Какие там ещё этапы важные? Или там это только начало и мне ещё придется накатать тонну прыщей?
Ну где собрали, там и лежит :) out of directory build я на винде не рискнул пробовать, да и он может тупо не поддерживаться кривожопыми самодельными конфигуряторами.
> мейк файл он берет из mingw32-ssl-zlib-srp
Это таргет. Файл у мейков задается через -f.
> Допустим хочу собрать deb. Например я к своей проге накатал руками мекфайл. Какие там ещё этапы важные?
Не, там совсем немного - описание, правила сборки и еще немного никому не нужного мусора типа чейнджлогов.
Если для себя - то все это нинужно.
Если пропихивать - то сборка деба всяко будет для тебя самой простой из проблем :)
Вот кстати да. Тоже интересно. Вон в бусте жесткий контроль кода, документации, тесты, ждешь кодеревьювера пару лет и тд. А у этих как? Как они там бюрократничают в андроиде или в репах убунты? В конце концов можно свой репсервер наверное завести, если будет в ихних сильно жестко.
В гуглплей - платишь 20 баксов и распространяешь что хочешь ;) Пока твою учетку не выпилят за вирей отправлялки смс и детский прон.
> в репах убунты?
Вроде как довольно жестко. Но полегче чем в бусте.
Вирусы.
Дык защита от школоты и прочих долбоёбов ;) Там и так то все засрано, представь что было бы, если бы можно было бесплатно выкладывать...
Один раз в жизни заплатить 20 баксов это разве много? В виндовом маркете вроде как $40 было, тоже по сути копейки. А вот про iOS лучше забудь ;)
Там вроде бы какой-то робот еще проверяет файлы. Ну и не все юзеры любят ставить проги с правами в духе "отправка SMS" и "чтение SMS".
Есть ещё такая штука - PPA. можно захостить свой репозиторий на сервере бубунты и заливать туда пакеты, потом на любой машине подключать его одной командой. Я себе завёл архивчик.
> на сервере бубунты
ЭЭэ. Апстор бубунты или убунту ван?
А ещё мне не понятно как он пакетный менеджер деинсталить будет мои файлы. мало ли что я куда напихал...
Опять же - для внутренних нужд - всем похуй. Как удобней так и раскладывай. Можешь вообще в /opt/yourprogram захуярить, если лень читать доки.
> тригеры какие-то
Ну это уже advanced магия, если просто копирования файлов недостаточно, и надо что-то подкрутить после установки/перед удалением.
> А ещё мне не понятно как он пакетный менеджер деинсталить будет мои файлы. мало ли что я куда напихал...
Так он знает куда чего ложил при установке ;)
Он слежение что-ли включает со стороны системы за моим инсталятором и записывает обратный лог для деинсталятора? Магия какая-то...
> надо что-то подкрутить после установки/перед удалением.
Типа как в винде 1% установлено обновлений перед загрузкой или перед выключением? Типа на это действие регистрируешь свой обработчик?
В моём мейкфайле вроде что-то собирается на моей конкретной машине, но как при сборке в пакет зафигачить зависимости от библиотек тех что нужно доставить дополнительно? И вообще как линух разруливает зависимости? На каждое приложение напихивает симлинки на файлы нужных версий в зависимости от того какие префиксы передал в мейкфайл приложения?
Ну вот например пост-установочный триггер пыхи рестартит апач, чтобы он подсосал новый модуль.
Зависимости пишутся как раз в тех дополнительных файликах. Собирается deb в специальном чистом окружении... Короче читай ман, если ты реально собрался пилить. А если не собрался - то нахуй тебе заморачиваться всем этим ;)
> И вообще как линух разруливает зависимости?
1) при установке тупо не дает ставить конфликтующие пакеты
2) да, у so'шек есть версии в названиях
А... Чистое окружение.. Чеашрутишь на пустую директорию. Типа никаких библиотек не поставлено, они накатываются на чистое окружение и вот у меня уже либа нужной версии в зависимостях. Но это работает только со статическими либами, а как это организовано для динамических? неужели и запускаются в почти чистом окружении о_О
А насчет версий - там хитрая херня с именованием сошек. Лень с телефона рассказывать.... загугли если интересно.
Вкратце - большинство либ обратно-совместимые, поэтому если одной проге надо 1.0.5, второй 1.0.7, а в системе стоит 1.1.5, то они обе будут ее юзать.
Как на этом можно на говнокоде сидеть... Никак не иначе лопата... Для лесенок то...
> одной проге надо 1.0.5, второй 1.0.7, а в системе стоит 1.1.5, то они обе будут ее юзать.
Как страшно жить... Мне кажется что-то линуксоиды не продумали. Но интересно, спасибо...
В общем там есть такое соглашение, что либы с одинаковой мажорной версией обратно совместимы. Соблюдать его должен автор либы, не забывая проинкрементить т.н. soname, который вшивается в so'шку. Если не соблюдает - то он пидорас и вообще редиска.
Например у libfuck.so.6.2.4 вшит soname libfuck.so.6. Если следующая версия несоместима - она должна называться к примеру libfuck.so.7.0.1 с soname = libfuck.so.7.
В зависимости бинарников вкомпиливается не полная версия, а тот самый soname. Поэтому если прогу собирали с 6.2.4, то она будет работать и с 6.7.2 и с 6.3.5 (с 6.1.0 она работать не будет, и такую ситуацию не допустит пакетный менеджер: "или крестик сними ставь более старую прогу или трусы надень обновляй либу").
А 6.2.5 и 7.3.5 могут стоять одновременно, не мешая друг другу.
P.S. Блин, плохо поди объясняю?
Не, вообще всё понятно. Тебе нужно что-то повышающее самоуверенность. Скилл не прокачен.(
Только что вы могли наблюдать парадокс Даннинга-Крюгера живьём. Спасибо за внимание.
Обратный пример на этом сайте полагаю тоже все видели.
Я ж твой ник не упоминал. С чего это тебя так зацепило?
Да ты меня затраллел, лалка :)
>>Я думаю, все поняли, про кого это.
Конечно поняли.
http://govnokod.ru/15791#comment228425
http://govnokod.ru/12940#comment176220
s-a--m 8 дней назад #
Но тебе же так печет пукан от слова прыщееб
anonimb84a2f6fd141 02.05.2013 21:40 #
Блядь, да зашей ты уже себе пукан, что ты им в каждом треде сверкаешь, сучечка.
http://govnokod.ru/13413#comment187715
Это просто оттого что ты совершенно не обучен логике .
Есть еще LD_PRELOAD.
Хз. Вон у меня куча питонов и Qt стоит. Как-то все вместе живут...
> пост-установочный триггер пыхи рестартит апач
А что он из себя представляет на системном уровне? Сигнал посикс? Я кроме названия просто про него ничего не знаю.
А мне тут один линуксоид рассказывал, что линух очень крут и вообще разруливает конфликты версий библиотек через симлинки и позволяет заменять библиотеки которые сейчас используются! тоже посредством симлинков. Это тоже должен я в своем инсталяторе как-то обеспечивать, если допустим мне это понадобится?
А ввобще исчерпывающее объяснение. Спасибо. Глядишь свой пакет соберу. Но нельзя собирать не по правилам. У меня начнется синдром незавершенности. Так что только деабинизация. :)
Это сила и слабость линуха... mandatory lock'ов по умолчанию нет. Поэтому и можно творить такие непотребства как удаление открытых файлов...
Триггер? Да просто набор команд, который надо выполнить в процессе установки.Вроде бы и все...
А что в этом плохого, если приложение не падает при этом все равно и может обращаться к старому файлу?
почему непотребство? Замечательная вещь. Особенно, если у тубя открыто что-нибудь, что не хочет освобождать файл. Винда у меня частенько ругалась из-за того, что не могла удалить директории, т.к. они были открыты в других приложениях
У меня в Windows 8 довольно часто не хочет удалять папки из-за того, что кто-то использует служебные файлы типа thumbs.db. Иногда даже только что созданные папки так "застревают". Фиг знает, баг explorerа или вирус какой установился.
Всё будет работать ;) Там есть /etc/ld.so.conf (и соотв. папка /etc/ld.so.conf.d) в которые можно дописать дополнительные папки для поиска либ. По умолчанию там /lib и /usr/lib.
> Это таргет. Файл у мейков задается через -f.
А почему это вообще приходится собирать мингевешным мейком, а не стандартным гнутым? Как это вообще определить?
Х.з., в мане по сборке так написано было, я и не стал выпендриваться. А вообще - mingw32-make и make это один и тот же файл. Чем меньше выпендриваешься - тем больше вероятность успеха ;)
Блин, а зачем тогда писал?
Edit: дочитал
Видимо, не надо было приходить с войной и топить треды.
> Тема не актуальная, никто туда не заходит
Тут сток смотрят, потому неактуальная тема, куда никто не заходит - это свежий пост на главной с 0 комментариев :)
Желание минуснуть оппонента.
Вот поток флуда, даже ручного, его может угробить на ура.
Х.з., этот пост я не трогал.
> http://govnokod.ru/15852#comment230006
За пригорания от минусов.
> http://govnokod.ru/15817#comment230025
Стековерфлоу там >>>
Борманд, скажи честно, ты сам там хоть раз спрашивал?
Скажи мне кто твой друг, и я скажу кто ты.
Я сейчас чуть не обосрался от страха что меня будут минусовать.
Бугага три раза. А то я смотрю какой-то ты бесчувственный...