All streams
Search
Write a publication
Pull to refresh
93
0
Григорий Борисович @naething

Пользователь

Send message
Я прекрасно понимаю вашу ситуацию и не предлагаю закладывать аренду квартиры в зарплату. Я просто попытался примерно описать, какие мотивы в голове у тех ребят, которые после выпуска из университета что-то представляют собой, и почему они не пойдут к вам работать за 50к, а будут искать более высокооплачиваемую работу.

Я все к тому, что быть может, работнику сервисной службы на самом деле и не нужно знать, как устроен диодный мост и какие виды модуляций существуют? Или достаточно знать одному-двум из них, которым можно платить соответствующую з/п? А на остальные позиции брать более-менее сообразительных ребят (хоть сразу после школы) и обучать на месте конкретно работе с вашим оборудованием.

Просто у меня сложилось впечатление из ваших комментариев, что вы хотите почти бесплатно получить высоко квалифицированных сотрудников, как в старые добрые времена.
Нельзя здесь абстрагироваться от финансового вопроса. То, что в объявлении не была указана зарплата, ничего не объясняет: возможно, ваше объявление выглядело так, что много у вас не платят. Или так, как будто ваше предприятие — это бывший НИИ (что тоже означает, что много не платят).

Более-менее приличная однокомнатная квартира в Москве — 35к в месяц. От 50к почти ничего сразу не остается, совсем грустно. Но не жить же с родителями всю жизнь. Наверное, те, кто хорошо учился в университете и знает все про диодные мосты, думали похожим образом и хотели из этого болота выбраться.

Нынешние выпускники не застали Советского Союза, и потому им сложнее объяснить, что трудиться бесплатно — это правильно и почетно. Не будет больше бесплатных инженеров. Если хотите платить 50к, берите людей без требования к образованию, пишите им точные инструкции и проводите тренинги.
В некоторых моделях дремеля тоже есть обратная связь, кстати. Например, в Dremel 4000.
Если выбрать размер окна ДПФ кратным длине волны (для примера выше, 44100 сэмплов подойдет в качестве такого окна), или же просто очень большим, то дополнительных гармоник и мусора не будет (или будет в пренебрежимо малом количестве в случае просто большого окна).
Если я правильно понимаю, если выбрать частоту ноты кратной частоте дискретизации, то такого эффекта наблюдаться не будет. Например, если при Fs=44100 Гц взять ноту частотой 100 Гц (что-то среднее между соль и соль диез), то один период меандра будет занимать ровно 441 сэмпл, и ДПФ потому не покажет никакого мусора в спектре.

(Наблюдение чисто теоретическое: понятно, что на деле частоты нот таким требованиям не удовлетворяют.)
Можно написать отдельный демон, который бы хранил все в памяти, а потоки соединялись бы с ним через UNIX-сокет.

Либо просто использовать mmap()/mlock(), отобразив файл целиком в оперативную память, и дисковый кэш линукса сделает за вас всю работу. Тут, правда, скорее всего придется модуль на C для PHP городить.

Так бы у вас получилась цифра ближе к 1.000.000 запросов в секунду вместо 50.000.
Ну какая разница, кто исполнитель. Факт в том, что использовали работу без разрешения автора.
Немного неясна позиция защищающих здесь производителя макарон с сыром. Я понимаю, что текст в стиле Ализара не добавляет ясности в происходящее, но если бы вы зашли на сайт автора по ссылке из статьи, то увидели бы, что распространяется не сама программа, а уже сделанные с помощью нее лабиринты в виде PDF-файлов.

Производитель макарон именно скопировал один из лабиринтов из электронной книги автора, а не воспользовался его программой для генерации оного. Не имеет никакого значения, как именно автор создал этот лабиринт — нарисовал акварелью или сгенерировал с помощью программы.

На сайте автора написано: «All puzzles ©2005-2014 KrazyDad.com. Feel free to reproduce the puzzles for personal, church, or school use. If you would like to purchase new puzzles for a book or periodical, contact me at dad@krazydad.com.»

Совершенно ясно написано, что автор позволяет свободное использование в некоммерческих целях, и просит связаться с ним в случае желания использовать его головоломки в коммерческом продукте.

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

И вот поздно вечером (он действительно «вламывал» по полторы смены) пришел он домой, а в руках держал коробку, а в коробке, заметно, что-то тяжеленькое. Андрей тихо сиял.

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

— Чего эт ты, как… голый зад при луне, светисся?

— Вот… дали за ударную работу… — Андрей прошел к столу, долго распаковывал коробку… И, наконец, открыл. И выставил на стол… микроскоп. — Микроскоп.
©
Если проекция изометрическая (не перспективная), то квадратные грани перейдут в параллелограмы. В этом случае не нужно резать грань на два треугольника, достаточно применить одно аффинное преобразование ко всему квадрату, так как аффинное преобразование переводит параллелограмм в параллелограмм.

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

Еще в формулах где-то ошибка. Если подставить точку (0, 0), на выходе получится (0.5*(x1+x3), 0.5*(y1+y3)).

У народа с чувством юмора неважно тут.
Так текст крупнее же. Не знаю насчет первого пункта.
Один из самых часто возникающих случаев, где необходима рефлексия, — это всяческая сериализация/десериализация. Представьте, например, что в вашей программе есть структура типа такой:

struct CatParameters
{
	string	name;
	Gender	gender;
	int	age;
	string	color;
	double	tail_length;
	double	weight;
	double	appetite;
	// ...
};


Также у вас есть некоторое key-value хранилище с примерно следующим интерфейсом:

template<typename T>
T get_value(const char* key);


Теперь представьте, что вам нужно реализовать функцию загрузки параметров кота из хранилища:

CatParameters load_cat_parameters()
{
	CatParameters p;
	// ???
	return p;
}


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

p.name = get_value<string>("name");
p.gender = get_value<Gender>("gender");
p.age = get_value<int>("age");
//...


В этом коде сразу несколько проблем:
— вам нужно вручную перечислить все поля структуры, хотя компилятор и так лучше вас знает, какие в ней поля;
— приходится упоминать название каждого поля дважды, что выглядит избыточно;
— приходится еще и тип каждого поля упоминать вручную, хотя компилятор и так его знает.

Сейчас принципиально иного способа не существует, кроме использования страшных макросов. Было бы гораздо лучше, если бы мы могли написать что-то вроде (псевдокод):

static_for(field : CatParameters)
	p.*field = get_value<decltype(field)>(as_string(field));


Эдакий типизированный макропроцессор потребует немалых изменений языка, и не очень вероятно, что что-либо подобное может появиться в C++1y. А жаль, поскольку очень не хватает подобных средств.
Вы не поверите, но такова специфика западной системы образования. В Штатах, например, графическим калькулятором принято пользоваться даже для школьной алгебры. В результате многие выпускники школ не умеют считать ни в уме, ни на бумажке. Задача сложить две дроби без использования калькулятора у многих вызывает полный ступор. Или разделить 1 на 1/2. Не говоря уже про тригонометрию.

По воле судьбы мне приходится преподавать математику в американском университете, так что я знаком с ситуацией не понаслышке. Графический калькулятор стал таким неотъемлемым атрибутом урока математики, что мои студенты делают круглые глаза, когда я им говорю, что ни разу в жизни таким калькулятором не пользовался. (Думают, наверное, «Ну да, эти русские точно дикари!»).

Я не любитель теорий заговоров, но тут дело явно похоже на лобби производителей этих самых калькуляторов. Только представьте, сколько экземпляров TI-8x было продано, если у каждого школьника есть/был как минимум один такой калькулятор.

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

Неужели такая большая проблема внешний PHY поставить? Что-то мне подсказывает, что какие-нибудь STM32F107 + DP83848 обошлись бы в сумме дешевле, чем микроконтроллер от TI. В режиме RMII потребовалось бы всего 9-10 соединений от МК к PHY, если мне не изменяет память. Плюс вдобавок получили бы аппаратный SDIO, и не надо было бы заморачиваться со всеми описанными проблемами.
Могу предложить способ с использованием старых добрых enum'ов. Хорош тем, что порядок действительно неважен: container<T, DEADLINE|DEFERRED> и container<T, DEFERRED|DEADLINE> дают один и тот же тип (в отличие от приведенного в статье подхода).
#include <iostream>

#define static_type(name) static constexpr const char* type_name() { return name; }

struct disabled { static_type("disabled"); };
struct deferred { static_type("deferred"); };
struct deadline { static_type("deadline"); };

enum {
    DEFERRED = 1,
    DEADLINE = 2,
    MAX_POWER_OF_TWO = 4
};

template<int V, class A, class B>
struct type_selector {
    typedef B type;
};

template<class A, class B>
struct type_selector<0, A, B> {
    typedef A type;
};

template<class T, int Plugins = 0>
struct container
{
    static_assert(Plugins >= 0 && Plugins < MAX_POWER_OF_TWO, "Invalid flags");

    typedef typename type_selector<Plugins & DEFERRED, disabled, deferred>::type
        deferred_type;
    typedef typename type_selector<Plugins & DEADLINE, disabled, deadline>::type
        deadline_type;

    static std::string type_name() {
    	return std::string("container<") + deferred_type::type_name()
             + ", " + deadline_type::type_name() + ">";
    }
};

int main() {
    using namespace std;
    cout << container<int>::type_name() << std::endl;
   	cout << container<int, DEADLINE>::type_name() << std::endl;
   	cout << container<int, DEFERRED>::type_name() << std::endl;
   	cout << container<int, DEFERRED | DEADLINE>::type_name() << std::endl;
   	//cout << container<int, 6>::type_name() << std::endl; //Ошибка компиляции
    return 0;
}
Удивился, когда не увидел в статье слова «БПФ»/«FFT».
Никогда не понимал смысла SSAO, выглядит ведь совсем не натурально: вместо теней получаются какие-то страшные черные контуры вокруг предметов. Рекомендую к прочтению: nothings.org/gamedev/ssao/

Information

Rating
Does not participate
Location
Palo Alto, California, США
Date of birth
Registered
Activity