LINUX.ORG.RU

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

Вопрос по call by value

 

а правильно ли я понимаю, что вот тут

https://ru.wikipedia.org/wiki/Стратегия_вычисления#.D0.92.D1.8B.D0.B7.D0.BE.D...

написана чушь?

Там утверждается, что *как правило* каждый раз происходит копирование

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

Версия для любителей плеваться на рупедию

Call-by-value evaluation is the most common evaluation strategy, used in languages as different as C and Scheme. In call-by-value, the argument expression is evaluated, and the resulting value is bound to the corresponding variable in the function (frequently by copying the value into a new memory region).

разберем на примере scheme, который приведен там в качестве примера, пошагово

(define (tst x) (write x) (set! x b) (write x))

(define a 1)
(define b 2)

(tst a)
;out: 12

1 (tst a) — вычисляем a; связываем значение a (1) с идентификатором x

2.(write x) — вычисляем x; выводим вычисленное значение x (1)

3. (set! x b) — вычисляем b; связываем значение (2) c идентификатором x.

4 Повторяем шаг 2

Какое копирование они тут увидели? ЕМНИП, копирования по-дефолту вообще никогда не происходит

Все то же самое и в других языках, с которыми я знаком.

Там действительно чушь написана, или я что-то не так понял? Какой вообще смысл может быть в копировании, в данном случае? Оно ведь ничего не даст, кроме оверхед по памяти, и дополнительной путаницы в коде.

ambiguousnick
()

XMonad + XMobar

 , , ,

Вот такое вот окружение у меня получилось после двух-трёх месяцев использования XMonad. До этого перепробовал несколько различных DE(KDE(четвёртые и пятые), GNOME 3(второй не застал), MATE, LXDE, Xfce), из которых больше всего мне понравились кеды. После долго сидел на IceWM, пробовал(но не очень-то и осилил) FVWM2 и Openbox. Несколько месяцев назад начал изучать Haskell. Как-то знакомый посоветовал попробовать тайло-WM. Вот тогда я и решил попробовать XMonad.

Теперь немного о самом окружении. На скрине виден кусок моего конфига для XMonad, стыренного частично с Хабра, частично с гитхаба, и подогнанного под мои нужды. Для воркспейсов используется иконочный шрифт FontAwesome(подсказал kalterfive), на панели - Droid Sans Mono. В качестве плеера - mpd, клиент - ncmpcpp. Кроме того, хотя на скрине этого и не видно, но в панель выводится инфа о текущих плейлисте и песне. Терминал - urxvt, шрифт - terminus. Цветовая схема нагло стыбрена у intelfx.

Про ШГ в терминале - знаю, но не знаю, какой шрифт лучше туда поставить. Раскраска в виме тоже вырвиглазная, но опять же, не в курсе, на что поменять.

SeTSeR
()

Те самые, тёплые лампы

 , ,

Ну, те самые «тёплые лампы», какие только могут быть, а точнее - измерение их параметров.
Прошло некоторое время с момента моего знакомства с AVR. Познакомились и пообщались - теперь потихоньку начинаем сотрудничать.
На картинке результат работы скромного аппаратно-программного комплекса, собственной разработки, для снятия вольт-амперных характеристик (ВАХ) электронных ламп.
ArchLinux, openbox, fbpanel, тема иконок - hydroxygen

P.S. Да, без Arduino, но аппаратная часть на ATMega328P

lnx
()

Почему когда увольняешься так грустно?

 

сабж

а линукс тут при том, что теперь я ищу позицию девелопера под линукс

unt1tled
()

Подскажите как научиться фотографировать

 , ,

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

Заранее спасибо.

ist76
()

PharoVX

 openvx, ,

Есть такой стандарт - OpenVX, который определяет набор аппаратно-ускоренных функций компьютерного зрения, и теперь вот у моего любимого Smalltalk есть к нему биндинг.

Работает он, пока что, только с референсной реализацией от Khronos, но играться уже можно. Почти все функции поддерживаются.

Написано в основном во время пребывания на конференции ESUG 2015, вот как-то так.

Страничка проекта

yoghurt
()

Книга по алгоримам

 

Купил Ceдживиkа и не осилил + в некоторых моментах сильно кривой перевод, хочу найти книгу в которой все формулы, алгоритмы были бы разъяснены и подробно.

jerekao
()

Новый системный вызов в OpenBSD — tame(2)

 ,

Группа BSD

nicm@ и deraadt@ представили новый системный вызов, позволяющий максимально просто добавить в приложение возможность отказаться от излишних привилегий. Новый механизм призван дополнить недавно портированный и более сложный в использовании capsicum(4), а также ранее существовавший systrace(4).

Самое интересное то, что новый системный вызов позволяет четко отделить фазу инициализации процесса от его основной части, и наложить более строгие ограничения на последнюю. Ведь известно, что во время инициализации используется гораздо больше привилегий. Доступные флаги ограничений выбраны как разумный компромисс между гранулярностью и простотой использования на основе тщательного аудита устройства программного обеспечения из base system а также портов, наборы оптимизированы под наиболее популярные паттерны. Более сложным приложениям стоит посмотреть в сторону вышеупомянутого capsicum.

К объявлению также прилагаются патчи для 29-ти компонентов базовой системы, которые демонстрируют использование tame(2). Вот, например, diff для нового системного вызова для одного из демонов bgpd (он разделен на части по модели privsep, которые общаются между собой с использованием фреймворка imsg):

+#include <sys/tame.h>
…
+	tame(TAME_MALLOC | TAME_UNIX | TAME_CMSG);

Такой подход позволяет разработчикам максимально просто и быстро ограничить потенциальный вред от уязвимостей в своем софте, соответственно, есть шансы что он будет использоваться более часто и широко, чем гораздо более сложные для программиста capsicum и правильный privsep, или в определенном смысле менее гибкие и непростые в администрировании selinux/systrace и co.

>>> Подробности (marc.info)

val-amart
()

UPSERT и не только. Что ждать от PostgreSQL 9.5?

 

Группа Open Source

2 июля вышла PostgreSQL 9.5 alpha. Среди основных улучшений можно отметить:

  • BRIN-индексы («индексы блоковых зон»), позволяющие сверхкомпактно индексировать очень большие таблицы.
  • Существенные оптимизации скорости сортировки и хэширования в памяти.
  • Автоматизированное управление размером лога транзакций.
  • INSERT ... ON CONFLICT UPDATE, также известный как «UPSERT».
  • Аналитические функции CUBE и ROLLUP.
  • Безопасность строкового уровня (Row-Level Security, RLS).
  • Новые манипуляционные возможности (функции и операторы) для типа данных JSONB.
  • Инструмент pg_rewind и другие улучшения репликации и средств повышения отказоустойчивости.
  • Множественные улучшения в механизм Foreign Data Wrappers, включая IMPORT FOREIGN SCHEMA.
  • Существенные улучшения масштабирования на системах с большим количеством процессорных ядер и оперативной памяти.

Статья «UPSERT и не только. Что ждать от PostgreSQL 9.5?» расскажет о некоторых новинках подробнее.

Скачиваем

What's New (англ.)

>>> Подробности (postgresmen.ru)

postgresmen
()

Помогите составить план изучения С++

 

Привет всем. У меня вопрос к людям знающим плюсы, можете помочь составить план изучения этого языка, в программировании я не полный нуб), есть неплохие знания Java, C# и базовые Python и Django, ну и в принципе я немного знаю C/C++, несколько лет назад написал пару простеньких программ на qt и на linux api, немного прожу на микроконтроллерах stm, есть какие-никакие знания паттернов. В этом году ходил на собеседование, на позицию Java Jun. Dev. - не получилось, не взяли, а может оно и к лучшему). Java - как-то уже изрядно надоеда, мне плюсы начали нравится тем, что нужно думать. Если честно мне не интересно и влом читать книги на 100500 страниц, в которых описана сырая теория, без практики, мне проще изучать все на практике. Может кто-то посоветует какой-то Open Source проект чтобы прокачать скилы или кому-то нужен помощник который за него будет делать простую роботу) Заранее спасибо за ответ.

swfvova
()

Шок от С. Как склеивать строки?

 

Осваиваю си. Всё шло хорошо пока внезапно не понадобилось склеить строки (константные и переменные). Покурил stackoverflow. Предлагают 2 варианта:

Первый - создать char buf[молись_чтобы_хватило] и делать str(n)cat/sprintf в этот buf.

Второй - использовать asprintf, который расширение, нестандарт и вообще.

Вопрос: как вы склеиваете строки? Может есть какая-нибудь общепринятая либа?

Простите за нубский вопрос

makoven
()

Обнаружена скрытая загрузка проприетарного блоба браузером Chromium

 ,

Группа Интернет

Один из пользователей Debian установил Chromium 43 и обнаружил, что при первом запуске браузер, не уведомляя пользователя, молча загружает и устанавливает расширение «Chrome Hotword Shared Module». Указанное расширение содержит внутри себя блоб (бинарный компонент), исходники которого не предоставляются. При этом, расширение даже не отображается в списке установленных расширений и не предоставляет возможности себя отключить.

( читать дальше... )

>>> Подробности (ycombinator.com)

anonymous
()

Skype for web

 ,

Сиране жпрс...

http://blogs.skype.com/2014/11/14/please-welcome-skype-for-web-beta/
http://lenta.ru/news/2014/11/14/skypebrowser/
Для Ъ:

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

yirk
()

Открыт предварительный заказ книги «Статистический анализ и визуализация данных с помощью R»

 ,

Группа Документация

В ближайшее время издательством «ДМК Пресс» будет выпущена печатная версия книги «Статистический анализ и визуализация данных с помощью R», в которой содержится:

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

Предыдущая редакция книги, исходные данные для анализа и примеры скриптов для их обработки доступны в репозитории на github и распространяются на условиях лицензии CC-BY-NC-SA.

Новость в блоге одного из авторов.

>>> Подробности (dmkpress.com)

ymn
()

Модный, годный православный mock/test для C++. Не gmock.

 , , ,

Есть чё? Желательно не прибитое к 11ому+.

Интересует штука, которая бы умела кейс с применением разных фикстур к одному тесту.

UPD. В принципе, собственно к gmock, я претензий особо не имею, важно что бы оно подружилось с сабжем, если он есть в природе :) А вот гуглотесты после питонячих меня сильно подразочаровали. Хотя казалось бы простое требование, которое запилить для компайл тайма не кажется сложным.

Что бы было понятней чего я жду от фрейма(хотя учитывая количество ответов, и что все они ведут на то, что я и так нагуглил - надеятся особо нечего):

struct FixtureA : ::testing::Test {
//setup/teardown
int a_;
};

struct FixtureB : ::testing::Test {
//setup/teardown
double a_;
};

bool test_method(void* data, size_t size);
TEST_MULTI_F(TestCase){//по идее тут обьявляется шаблонный класс
    ASSERT_TRUE(test_method(&a, sizeof(a)));
}

TEST_F(FixtureA, TestCase); // а тут он инстанируется
TEST_F(FixtureB, TestCase); // ну и тут
//как бэ почему не сделали так - непонятно
pon4ik
()

Как сверстать сайт на twitter bootstrap, не будучи дизайнером?

 , ,

Пытаюсь сверстать макеты для сайта, решил использовать bootstrap, чтобы не получилось вырвиглазное говно, а оно все равно получается именно такое. Ну конечно не просто черный текст на белом фоне как у просто html без css, но все равно плохо, и добавляются новые проблемы - этот bootstrap какой-то мудреный, непонятный. Если в обычном css мне понятно, что делать, чтобы там сайдбар сделать определенного размера, и чтобы он выглядел как сайдбар, а не как просто несколько ссылок, расположенных вертикально, то с бутстрапом ничего непонятно - там же на всё своя система. Да и в css вроде наследования нет, так что если я хочу сделать див с классом [bold]главная_кнопка[/bold], то черт его знает, как это сделать - ведь написать в css, что [bold]главная_кнопка[/bold] должна иметь те то и те то классы бутстрапа, я не могу.

И еще одна проблема - с бутстрапом все попытки разделения стиля и семантики летят к чертям, и получается, что то, как должен выглядеть сайт, прописано в самом html, а не в css. А в итоге прямо в html пишется, что этот див - 9 колонов, другой див - 3 колонки. Ужас.

hlebushek
()

Не работает push() в стеке

 ,

Привет. Стек через массив. Не работает push(), скорее я где-то накосячил.
Должно в стеке в итоге быть 0 .. 9, а там фигня.

#include <stdio.h>
#include <stdlib.h>
#define SIZE 10

void push(int *stack, int *sp, int x);
int pop(int *stack, int *sp);

int main() {
	int *stack = malloc(sizeof(int) * SIZE);
	int *sp = stack;


	for (int i = 0; i < SIZE; i++)
		push(stack, sp, i);

	for (int i = 0; i < SIZE; i++)
		printf("%i\n", stack[i]);

	free(stack);

	return 0;
}


int pop(int *stack, int *sp) {
	return stack[*sp--];
}


void push(int *stack, int *sp, int x) {
	stack[*sp++] = x;
}

В чем ошибка?

ChuCha
()

Как правильно обрабатывать сокеты в потоках?

 ,

(продолжение этого).

Итак, решил я своему «видеотранслятору» сделать жестокую проверку. Наклепал код:

<html>
<head><title>Simple streaming test</title>
<script>
	var img = new Image();
	img.onload = function(){
		document.getElementById("animage").src = img.src;
		setTimeout(stream_next, 50);
	}
	function stream_next(){
		img.src = "http://localhost:54321/" + Math.random() + ".jpg";
	}
</script>
</head>
<body onload="stream_next();">
<img id="animage">
</body>
</html>
Запустил демона, открыл эту страничку. Поначалу видео вполне себе отображалось. Но на каком-то моменте произошел затык. Причем, демон вообще перестал отзываться даже на запросы отдельных кадров! В отладочных сообщениях пишет «accept»:
		DBG("accept");
		newsock = accept(sock, (struct sockaddr*)&their_addr, &size);
		if(newsock <= 0){
			WARN("accept()");
			continue;
		}
		pthread_t handler_thread;
		if(pthread_create(&handler_thread, NULL, handle_socket, (void*) &newsock) < 0)
			WARN("pthread_create()");
и ... тишина.

По идее, если бы кончились файловые дескрипторы, accept вернул бы ошибку → появилось бы соответствующее сообщение.

Следовательно, косяк в потоках.

Не может ли быть такого, что у меня понасоздавалась куча потоков, к которым не было pthread_join и из-за этого новые потоки создаваться перестали??

Как вообще в таких случаях обрабатывают потоки, чтобы не было «зомби»? Может быть, впилить пул потоков и в отдельном потоке запускать на каждый новый pthread_join? Вообще ничего разумного в голову не приходит...

Eddy_Em
()

Шаблонов магия

 

Вопрос отсюда. Есть такой вот код, который работает:

class Base {
protected:
    template <class T, class... Args>
    std::function<void(Args...)> bind_this_(void (T::*f)(Args...))
    {
        return [this, f](Args&&... args) { (static_cast<T&>(*this).*f)(std::forward<Args>(args)...); };
    }
};

class A : public Base {
    void foo(int arg1, int& arg2, std::string& str) {}
public:
    std::function<void (int, int&, std::string&)> get_foo_functor() { return bind_this_(&A::foo); }
};

A::get_foo_functor() привязывает к A::foo() указатель на экземпляр A (который неявный this) и возвращает обертку, которую можно использовать как функциональный объект с аргументами, такими же как у A::foo().

Вопрос 1: можно ли как-то обойтись без лямбды? Вопрос 2: как сделать шаблонный класс X с оператором operator()(), который, будучи инстанцироваьным с нужными параметрами, возвращал бы такой же функтор. Типа вот такого:

A a;
X< ... > foo_functor_producer(/* например */ &a, &A::foo);
auto ff = foo_functor_producer(); //< возвращает std::function<void (int, int&, std::string&)> 

asaw
()

tabex - cross-tab comminication

 

https://github.com/nodeca/tabex

Зарелизил библиотеку для передачи сообщений между вкладками браузера. Делали чтобы шарить один вебсокет на много вкладок - это экономит траффик на клиенте и заметно разгружает сервер. В ридми есть пример для faye.

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

Всем добра!

Vit
()