LINUX.ORG.RU

Избранные сообщения b0c0813f

Расскажите ламеру об устройстве DNS

Форум — Admin

Да-да, пять звёзд, стыдно с таким ником спрашивать, и вообще... Всё же хочется знать.

Вот мы зарегистрировали домен example.com, регистратор просит указать DNS-сервера, указываем ns1.example.com, ns2.example.com.

То есть, вся информация о DNS-записях про домен example.com хранится на этих двух серверах ns1.example.com и ns2.example.com, и за A-записями и прочим надо обращаться к ним.

Теперь кто угодно, любой клиент в мире, спрашивает свой местечковый провайдерский DNS информацию об A-записях на нашем example.com, следовательно, этот клиент и/или провайдер должен отыскать во всемирной паутине наши ns1.example.com и ns2.example.com.

Он должен по протоколу TCP/IP выполнить запрос на наши сервера, чтобы получить записи. Но... откуда клиент, собственно, узнает IP-адреса наших NS'ок? Они существуют сами по себе где-то в интернете.

Каким образом любой DNS сервер в мире, имеючи лишь хост вида ns1.example.com на делегированном домене, отыскивает IP-адреса этих NS, чтобы сделать запрос на наши NS?

И какова роль самого регистратора в этом деле? Регистратор что, регулярно загружает куда-то списки своих доменов со всеми NS'ами к ним?

Откуда DNS-клиенты во всём мире узнают, на какой конкретно адрес делегирован домен?

Откуда DNS-клиенты во всём мире узнают, на какой IP-адрес нужно выполнить запрос, чтобы получить записи по требуемому домену?

Объясните на пальцах пожалуйста, этот совсем непрозрачный момент.

 

Spoofing
()

CloudCross — новая версия 1.2.0

Новости — Open Source
Группа Open Source

CloudCross — консольный клиент для синхронизации локальных файлов с различными облачными хранилищами. В новой версии, к существующей поддержке Dropbox и Google Drive, добавлена поддержка Яндекс.Диск.

Возможности:

  • Поддержка Яндекс.Диск, Dropbox и Google Drive.
  • Конвертация «на лету» из офисных форматов в формат Google Docs и обратно.
  • Возможность определения приоритета синхронизации локальных файлов над удаленными или наоборот.
  • Поддержка черных и белых списков файлов для синхронизации.

>>> Подробности

 , ,

CreepingDeath
()

Состоялся релиз Nuklear — библиотеки для построения пользовательских интерфейсов, написанной на ANSI C

Новости — Open Source
Группа Open Source

11 апреля 2016 года состоялся релиз Nuklear — небольшой библиотеки для построения GUI, написанной на ANSI C.

Это минималистичный тулкит, построенный на принципах immediate mode и переданный в общественное достояние. Библиотека была спроектирована как простой встраиваемый интерфейс и не имеет никаких дополнительных зависимостей. Для рендеринга и обработки пользовательского ввода используются платформозависимые бэкенды, поверх которых построена модульная система, позволяющая спроектировать интерфейс основываясь на концепциях ввода/вывода.

Особенности

  • immediate mode
  • header only (можно использовать и как обычную библиотеку, с разделением на реализацию и заголовки)
  • написан на C89 (ANSI C)
  • небольшая кодовая база (~15kLOC)
  • ориентирован на портабельность, эффективность и простоту
  • нет зависимостей (не требуется даже стандартная библиотека)
  • настраиваемый внешний вид
  • занимает мало места в памяти, предоставляет полный контроль за потребляемыми ресурсами
  • поддержка UTF-8
  • не имеет глобального или скрытого состояния
  • модульность: вы можете скомпилировать и использовать только ту часть библиотеки, которую собираетесь использовать

Несколько примеров пользовательского интерфейса, реализованного с помощью nuklear: раз, два, три.

>>> Подробности

 , ,

Weres
()

Vim 8.0

Форум — Talks

Ъ

Async
Plugin management
Tests

!Ъ = https://github.com/vim/vim/blob/master/runtime/doc/version8.txt

NeoVim RIP?

Дискасс.

 

shuck
()

Библиотека для динамической типизации в C

Форум — Development

Напомните название безумной библиотеки для С, которая добавляет динамическую типизацию в язык. Название, вроде бы, было как то связано с музыкой.

 

Tweaker
()

Производительность в python: built-in any/all VS самописный цикл

Форум — Development

Заметил забавный факт и никак не могу понять в чем дело. any / all работают медленнее чем такой же самописный цикл. Для примера возьмем задачу: проверить, подходит ли строка под шаблон '[a-Z_]\w+'. Те является ли она корректным именем переменной.

#!/usr/bin/env python3

import re
import string

regexp1 = re.compile(r'^[a-z_]\w*$', re.IGNORECASE)
symbols = frozenset(string.ascii_letters + string.digits + '_')


def check1(name):
    return regexp1.search(name) is not None


def check2(name):
    first_ch = name[0]
    if first_ch >= '0' and first_ch <= '9':
        return False

    for ch in name:
        if ch not in symbols:
            return False

    return True


def check3(name):
    first_ch = name[0]
    if first_ch >= '0' and first_ch <= '9':
        return False

    return all(ch in symbols for ch in name)


def check_speed(fname, name, count):
    from timeit import timeit
    time = timeit('{0}("{1}")'.format(fname, name), 'from __main__ import {0}'.format(fname), number=count)
    print('{0}: {1:.3f} seconds in {2} iterations for "{3}"'.format(fname, time, count, name))


def main():
    import sys
    fnames = ['check1', 'check2', 'check3']
    name = sys.argv[1]
    count = int(sys.argv[2])
    for fname in fnames:
        check_speed(fname, name, count)


if __name__ == '__main__':
    main()

При этом получаем интересные результаты, на фоне которых интересно выделяется отставание примера с all

[actics@6910p trash]$ ./p.py "a12" 1000000
check1: 4.822 seconds in 1000000 iterations
check2: 2.143 seconds in 1000000 iterations
check3: 4.985 seconds in 1000000 iterations

[actics@6910p trash]$ ./p.py "a12345678901234567890" 1000000
check1: 6.784 seconds in 1000000 iterations
check2: 5.328 seconds in 1000000 iterations
check3: 10.320 seconds in 1000000 iterations

[actics@6910p trash]$ ./p.py "a12345678901234567890123456789012345678901234567890" 1000000
check1: 9.881 seconds in 1000000 iterations
check2: 11.759 seconds in 1000000 iterations
check3: 19.880 seconds in 1000000 iterations

Результаты для первого и второго теста очевидны: чем больше вход тем меньше сказываются накладные расходы на инициализацию автомата в регекспе, поэтому check1 начинает уделывать check2. А вот результаты с all мне абсолютно не понятны: в чем может быть дело? В использовании генератора? Проверил, если передавать массив набитый булами all начинает ускоряться. Получается, что с генераторами лучше велосипедить цикл? Или дело в чем-то другом?

 

actics
()

Зеленые потоки в C и C++

Форум — Development

Тема, конечно, избитая, но хотелось бы собрать в одном месте всю информацию как по наличию библиотек, так и по самостоятельной реализации.

  1. Есть ли готовые реализации, кроме прямого порта горутин со всеми их недостатками?
  2. Чем оно лучше и чем хуже пула нативных потоков?
  3. Посоветуйте литературу для более глубокого изучения альтернативных концепций трединга, желательно с собственным мнением что лучше и универсальнее.

 , , ,

mersinvald
()

Redox — операционная система, написанная на Rust

Новости — Open Source
Группа Open Source

Redox — новая UNIX-подобная операционная система с открытым исходным кодом, написанная на Rust.

Основные особенности:

  • микроядерная архитектура;
  • основная часть кода написана на Rust;
  • имеется опционально включаемый GUI Orbital;
  • библиотека Newlib для программ на C (аналог glibc);
  • лицензия MIT;
  • драйверы работают в пространстве пользователя;
  • доступны распространенные команды UNIX;
  • поддержка ZFS (пока в разработке).

Скриншот

Образы для QEMU и VirtualBox, ISO с установщиком

>>> Подробности

 ,

Deleted
()

Runtime и исполнительная модель — уточнение понятий

Форум — Development

Хаюшки!

После эпического срача в теме про Redox задался вопросом, а правильно ли я понимаю что такое рантайм в самом общем случае?

Как я думаю, собственно среда выполнения программы — это набор библиотек,

который транслирует вызовы процедур из библиотек некоторого ЯВУ в вызовы API-функций конкретной ОС.

В этой связи у меня другой вопрос, что такое модель выполнения?

Почему Вики говорит, что среда выполнения реализует исполнительную модель в терминах отличных от тех,

в которых реализована сама библиотека ЯВУ.

The runtime system implements an execution model different from that of the language the library is written in terms of.

Там дальше, конечно, идет пояснение, но его сути я так и не уловил.

Просвещайте, короче!

sudo cast tailgunner, i-rinat, beastie,

stevejobs

 , ,

Twissel
()

Что такое рантайм?

Форум — Development

Тут царь и ему подобные частенько упоминают такую штуку как рантайм. А я из тех, кто не осилил, что это значит. Я знаю, что рантайм это время выполнения программы, как антоним компайлтайм. Например, ошибка может появиться «в рантайме». Мне кажется, данное слово еще употребляют к стандартным библиотекам ЯП. Например «сишный рантайм» . Я прав? Сишный рантайм это libc?

#include <stdio.h>
#include <iostream>

Тут у меня, по лоровской терминологии, включено 2 рантайма, сишный и плюсовой?

 

unt1tled
()

Хм. Нужна помощь в тестировании. Ибо странное происходит...

Форум — Talks

Идём по этой ссылке:
https://play.google.com/store/apps/details?id=org.asciigames.fillfield_free
Запускаем и лезем в раздел «Scores».
Смотрим на цифры. Если у кого иероглифы вместо цифр, то скажите пожалуйста какой у вас андроид и разрешение экрана.
Если видите цифры, то тоже, пожалуйста, напишите эти же данные.

Да, я знаю, что вы не моя армия, но я ведь и не приказываю, а прошу.

 , ,

Stahl
()

Встроенные юниты systemd

Форум — Admin

Я продолжаю разбираться с systemd, и у меня возникла пара вопросов: Есть ли какой-либо способ управлять встроенными таргетами? К примеру, я хочу, чтобы при загрузке таргета rescue не загружался таргет sound, но чтобы sound загружался при multi-user? Я могу замаскировать sound, но тогда он отключается и в остальных целях.

Или противоположная задача, к примеру, я хочу создать новую цель нечто среднее между rescue и multi-user, то есть я могу переводить систему на этот уровень не загружая multi-user. Однако при загрузке multi-user загружается куча других юнитов: systemd-user-sessions.service, systemd-update-utmp-runlevel.service, systemd-logind.service и др.. Я конечно могу их покидать в mytarget.target.mants, или прописать их все в Requires и After, но можно-ли обойтись без этого, ведь в multi-user загрузка этих юнитов не прописана?

 

iving
()

Любопытство

Галерея — Скриншоты

Давече пересадил свой стационарник на WiFi, для чего был куплен соответствующий адаптер (TPLink WDN-4800). Поскольку мой текущий аплинк не дотягивает даже до сотки, то вечно упираюсь в потолок 7-8 МБайт/сек. Но любопытство взяло верх и подключил в своему микротику ноут по сети в гигабитный слот. На скрине резултат.

Собственно, причина этого скриншота - задать всезнающему all такой вопрос: а какого рожна скорость по воздуху так сильно пляшет? проверил wifi analizer'ом - на моем канале никого. видимость прямая, не более 4 метров. т.е. среда идеальная, однако на деле видим вот такую картину. причем, на картинке запечатлен еще вполне ровный результат. скорость иногда опускалась до нескольких мегабит, потом снова вверх.

Потом сделал другой эксперимент... стационарник обратно на провод, в тот самый гигабитный порт, а ноут по вайфаю. В этом случае скорость была 5-7Мбайт/сек.

Сижу вот теперь, гипотезы строю.

 , ,

Deleted
()

Наконец-то! Я осилил рекурсивное дерево на SQL!

Форум — Web-development

Господа, дамы и господамы, — делюсь годнотой!

# sqlite3 < ~/ctree.sql 
0|Hello world!
0 > 2|First response.
0 > 3|Second response.
0 > 3 > 5|Just another response to the second reply.
0 > 3 > 5 > 6|Go deeper.
0 > 4|Third response.
BEGIN TRANSACTION;

CREATE TABLE 'comments'
(
	'id' INTEGER PRIMARY KEY,
	'parent' INTEGER DEFAULT 0,
	'text' TEXT
);

INSERT INTO "comments" ("id","parent","text") VALUES ('1','0','Hello world!');
INSERT INTO "comments" ("id","parent","text") VALUES ('2','1','First response.');
INSERT INTO "comments" ("id","parent","text") VALUES ('3','1','Second response.');
INSERT INTO "comments" ("id","parent","text") VALUES ('4','1','Third response.');
INSERT INTO "comments" ("id","parent","text") VALUES ('5','3','Just another response to the second reply.');
INSERT INTO "comments" ("id","parent","text") VALUES ('6','5','Go deeper.');

COMMIT;

WITH RECURSIVE ctree (clevel, cpath, id, parent) AS
(
	SELECT
		0,
		0,
		id,
		parent
	FROM comments
	WHERE id = "1"
	UNION
	SELECT
		clevel + 1,
		cpath || " > " || comments.id,
		comments.id,
		comments.parent
	FROM comments
	JOIN ctree
		ON ctree.id = comments.parent
) 
SELECT cpath, text FROM ctree
JOIN comments
ON comments.id = ctree.id
ORDER BY ctree.cpath;

Та-дааам!

 ,

Spoofing
()

Научиться писать юнит-тесты

Форум — Development

Собственно, как?

Прочитав документацию по unittest примерно представляю, как оно должно быть, но проблема в том, что реальные программные функции не сферические в вакууме, а требуют входных данных для проверки работы. Вот к примеру, допустим функция работает с файловой системой - парсит заданную директорию, ищет определенные медиа файлы, выполняет манипуляции над ними. Как такое тестировать, держать вместе с тестами эталонные файлы? Натравливать на рабочие директории самой программы? Создавать временные файлы силами тестов? Или вот есть некий функционал, который активно работает с гуем, читает, генерирует и/или заполняет его динамические части. Такое вообще тестируется? Или вот функция принимает сложные входные данные, например экземпляр класса, который описан где-то на другом конце программы. Как в таком случае, полностью копировать описание класса, чтобы заиметь его эталонный экземпляр в тесте?

В общем, пролейте свет на подобные вопросы, своими словами или годной ссылкой. Или пример какого-нибудь очень маленького, но гордо покрытого тестами питоно-проекта был бы кстати.

 ,

Worron
()

Соответствие дат клиент-сервер

Форум — Web-development

День добрый господа. Дайте пожалуйста дельный совет, а то запутался в трёх соснах в решении задачи. Есть выборка данных по временному отрезку, отдаю с клиента на сервер два значения даты, чтобы по этому диапазону вытянуть данные. Писал, на локальном хосте и не учел вариант, который увидел после выезда на сервер: выбираю одни даты на клиенте, прилетают с сервера данные со смещением на два дня и так далее, понятное дело что на сервере Node при new Date выдает свою системную дату, но начал я решать эту проблему, решил использовать moment.js на сервере и приведение к Utc, с клиента помимо даты я отправляю еще utcOffset, но в moment увы не получается сформировать дату, такую же как на клиенте, даже используя utcOffset, подскажите пожалуйста как правильно решить эту проблему, или может просто примерчик как верно это решить?

 , , ,

Berdin
()

Си + M4

Форум — Development

Читал, что люди прикручивают M4 к C/C++, чтобы получить более гибкий препроцессинг и делать всякие интересные вещи. Но почему-то никто не рассказывает, как он это сделал.

Проблема первая - от штатного препроцессора Си отказаться нельзя, потому что все системные заголовочные файлы используют его. Переписывать с нуля stdlib.h и прочие занятие плохое, тем более что они разные на разных платформах и даже версиях компилятора.

Решение - вызывать cpp до или после m4.

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

Решение - у m4 есть опция командной строки -s, которая включает генерацию специальных меток, которые помогут в этом деле компилятору (точно такие же метки вставляет и штатный препроцессор).

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

Как решить эту проблему? Я вижу два возможных решения:

1) Как-то заставить M4 эмулировать CPP. Возможно, написав несколько макросов (однако вроде как нельзя объявлять макросы, начинающиеся с #, точнее можно, но вызывать их нужно по-особому).

2) Как-то сделать так, что номера строк будут сохранять актуальность.

UPD: Хорошая новость - CPP понимает метки строк, поставленные до него. То если запускать CPP после M4, метки строк будут верными. Я выяснил это эмпирически. Можно получить доказательство, что это так? Однако получается, что m4 не будет применяться к файлам, которые мы инклюдим с помощью #include. Окей. Допустим, во всём проекте будет использоваться m4_include для всех модулей. Однако как теперь определять зависимости сборки? Сейчас я использую gcc -MM.

 , ,

KivApple
()

С++ с чего начинать реальную работу

Форум — Development

Всем привет, очень надеюсь что вы сможете мне помочь.

Не так давно решил уйти из админства и податься в программисты. Очень нравится мне С/С++, но вот ведь незадача, непонятно что именно делать дальше. Суть проблемы в том, что во всех книгах описаны основные функции, циклы, классы и так далее, обычная программа не более 30-40 строк. То есть получается следующее:

1) Учим по книге синтаксис 2) ??? 3) Работаем на крупном проекте

Я сам всему учусь, я читал книги и вот мне совсем не понятен пункт 2. Я думал подключиться к какому-нибудь опенсорс проекту, править баги, писать документацию хотя бы, разбираться что там да как. Но на гитхабе я вижу огромные проекты с кучей разнообразных файлов и ничерта не могу понять. Где эта самая середина? Вот прочитал я пару книг по языку, что делать дальше? Может кто-то сталкивался с такой проблемой?

 ,

Kronick
()

Tokenы

Форум — Web-development

Приветствую! Пишу небольшой pet project (RESTful API) для веба (в будущем возможно и мобильное приложение) и хочу для аутентификации использовать token'ы. Хотелось бы обратиться за разъяснением некоторых вопросов:

  1. Как хранят сгенерированный токен? в БД? Правильно ли я понимаю, что это отдельная таблица например tokens, в которой сам токен (sha1|md5|etc) hash, id пользователя которуму этот токен принадлежит и столбец expire_date (нужен ли он вообще)? Или это можно добавить в таблицу users?
  2. Когда пользователь зарегался впервые и сервер вернул сгенеренный токен, где его необходимо хранить? в кукисах?
  3. Хотелось бы еще спросить про то, как организовать правильнее urlы, можно ли через GET /users отдавать форму регистрации пользователя, а не как рекомендуется везде списко пользователей? Понятно что RESTful это не стандарт, но может есть какой-нибудь общий принцип для организации urlов. Глянул в API твиттора, пейсбука, там очень много и непонятно, по крайней мере на данный момент.

 , ,

skam
()

итак, боремся с грустными смайликами

Форум — Development

В С любой оператор должен заканчиваться точкой с запятой. Это порождает грустные смайлики ");" и «};» и я попытаюсь от них избавиться. Я изначально сомневался, нужны ли точки с запятой, и вот теперь появился против них ещё серьёзный аргумент.

Практически я имел дело с двумя языками, где нет точек с запятой - это tcl/tk и язык определения макросов в C. Перенос на новую строку осуществляется с помощью «\». Это выглядит и ощущается как голимая кустарщина. И это неудобно.

Длинные строки, требующие переноса, возникают тогда, когда у функции много аргументов. Других вариантов я не могу придумать.

Я хотел бы услышать мнения полиглотов на тему новомодного golang. Я не понял пока что, как решена в нём эта проблема, но понял, что там что-то придумали на эту тему.

Удачно ли golang обходится без точек с запятой? Удобно ли это, понятно ли? Стоит ли так делать в новом языке?

Ну или может быть есть ещё какие-то языки, где этот вопрос решён красиво.

Я пока придумал только одну вещь на замену «\». Сделать правило, что если в строке есть несбалансированная открывающая круглая скобка, то следующая строка является продолжением предыдущей, и так до тех пор, пока скобка не будет сбалансирована. Так, по сути, сделано в лиспе.

 , ,

den73
()