• Где и как можно начать коммерческую деятельность фронтендеру (верстальщику)?

    zoozag
    @zoozag
    Opencart
    1. Пока опыта мало, брать мелкие заказы. а) Повышается вероятность, что выполнит работу от и до. б) Выше вероятность, что дадут работу специалисту без портфолио
    2. Лучше работать по часу-два каждый день, чем только в выходные. Так будет проще найти постоянных клиентов. Спустя некоторое время, у меня большая часть заказов от уже имеющихся клиентов. На биржу почти не захожу.
    3. Пусть выложит свои лучшие работы с локалки в паблик. Это уже какое-то портфолио. Например мне иногда на мелкие задачи нужны исполнители, и мне вполне достаточно посмотреть верстку небольшой страницы, чтобы прикинуть уровень исполнителя.
    Ответ написан
    Комментировать
  • Как вернуть мотивацию к обучению?

    copist
    @copist
    Empower people to give
    Я сначала хотел дать вот такую ссылку htt_://copi.st/demotivator но это голимый демотиватор. Не читай.

    На самом деле часто бывает разочарование из-за того, что время за книгами тянется, а ощущения "всемогущества" нет. Где-то изначально была ошибка в оценке времени. По моей оценке на технологию уходит месяца три, а то и больше. Вот мои рассчёты.
    Учитывая, что для веб-разработки мало знать один язык программирования, нужно пройти ещё дополнительно 3-4 курса и основательно попрактиковаться. 3 месяца * 4 курса = год, может быть полтора года на освоение того, что должен знать junior web developer.

    Не отчаивайся по поводу недостаточной скорости. Просто иди вперёд.

    И ещё постоянно хочется сменить направление. Неа. Занеси в todo, поставь зарубку на будущее, и двигайся дальше по плану. Если слишком часто менять курс, то будешь крутиться на месте.
    Ответ написан
    Комментировать
  • Почему некоторые карточки на трелло со временем бледнеют?

    zamboga
    @zamboga
    Аналитика данных, BI-аналитика, дашборды
    Давно не было активности в этой карточке. Запустили вы английский=)

    Через штатные расширения можно включить режим "старения" карточек — они будут выглядеть, как сделанные из старой, пожухлой бумаги.
    Ответ написан
    Комментировать
  • Как делаются подобные сайты?

    profesor08
    @profesor08
    Именно в этом сайте задний фон сделан довольно просто, и без всей той херни, которую тебе насоветовали выше.
    prntscr.com/jalr34

    На заднем фоне блок, залитый градиентом. При прокрутке меняется позиция фона и получается такой эффект. Аналогично получится, если растянуть этот блок не на размер экрана, а на весь контент. И js не потребуется, если не хочешь управлять скоростью смещения фона с градиентом.
    Ответ написан
    Комментировать
  • Почему вылетает исключение в MSVC?

    Программа падает тут
    free(current);
    Падает, потому что после освобождения памяти у current вы пытаетесь потом пользоваться этой памятью. Соответственно возникает Access Violation/

    Рабочий вариант кода
    #define _CRT_SECURE_NO_WARNINGS
    
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define TSIZE 45
    
    struct film
    {
    	char title[TSIZE];
    	int rating;
    	struct film * next;
    };
    
    char * s_gets(char * str, int n);
    
    int main(int argc, char * argv[])
    {
    	struct film * head = NULL;
    	struct film * prev, *current;
    	char input[TSIZE];
    
    	puts("Input first name of movie: ");
    
    	while (s_gets(input, TSIZE) != NULL && input[0] != '\0')
    	{
    		current = (struct film *) malloc(sizeof(struct film));
    
    		if (head == NULL)
    			head = current;
    		else
    			prev->next = current;
    
    		current->next = NULL;
    
    		strcpy(current->title, input);
    
    		puts("Input your rating: ");
    		scanf("%d", &current->rating);
    
    		while (getchar() != '\n')
    			continue;
    
    		puts("Input the next name of movie: ");
    
    		prev = current;
    	}
    
    	if (head == NULL)
    		printf("Data not found");
    	else
    		printf("List of movies:\n");
    
    	current = head;
    
    	while (current != NULL)
    	{
    		printf("Movie: %s, rating: %d\n", current->title, current->rating);
    
    		current = current->next;
    	}
    
    	current = head;
    
    	while (current != NULL)
    	{
    		auto next = current->next;
    		free(current);
    
    
    		current = next;
    	}
    
    	printf("The programm is completed.\n");
    
    	_getch();
    
    	return 0;
    }
    
    char * s_gets(char * str, int n)
    {
    	char * value;
    	char * find;
    
    	value = fgets(str, n, stdin);
    
    	if (value)
    	{
    		find = strchr(str, '\n');
    
    		if (find)
    			*find = '\0';
    		else
    			while (getchar() != '\n')
    				continue;
    	}
    
    	return value;
    }
    Ответ написан
    2 комментария
  • Как вывести каждый байт значения типа int?

    @res2001
    Developer, ex-admin
    1234 в шестнадцатеричной системе 4D2.
    Младший байт равен D2, в двоичной системе это: 1101 0010
    Как видите старший бит установлен в 1 - значит, если это знаковое число, то оно отрицательное и закодировано дополнительным кодом. Осталось только разложить D2 в дополнительном коде и получите -46 - это результат вам и вывела printf.
    Ответ написан
    Комментировать
  • Как вывести каждый байт значения типа int?

    Nipheris
    @Nipheris Куратор тега C++
    1. char - знаковый тип. Используйте unsigned char, а лучше std::byte если он доступен вам.
    2. проверьте форматную строку.
    Ответ написан
    Комментировать
  • Почему строка объявленная как указатель на char не изменяется, а как массив char изменяется?

    @res2001
    Developer, ex-admin
    Скорее всего потому что в варианте
    char * str = "hello";
    Сама строка "hello" хранится в памяти "только для чтения", которая выделяется ОС для констант при загрузке программы в память.
    В варианте с массивом память выделяется в стеке, соответственно проблемы с изменением нет.
    Чтоб перейти на указатель - выделите память динамически и скопируйте туда строку. В конце не забудьте память освободить.
    Ответ написан
    3 комментария
  • Где можно узнать достоверную информацию о том когда была начата разработка PHP6?

    @Barmunk
    PHP received mixed reviews due to lacking native Unicode support at the core language level.[32][33] In 2005, a project headed by Andrei Zmievski was initiated to bring native Unicode support throughout PHP, by embedding the International Components for Unicode (ICU) library, and representing text strings as UTF-16 internally.[34] Since this would cause major changes both to the internals of the language and to user code, it was planned to release this as version 6.0 of the language, along with other major features then in development.[35]

    However, a shortage of developers who understood the necessary changes, and performance problems arising from conversion to and from UTF-16, which is rarely used in a web context, led to delays in the project.[36] As a result, a PHP 5.3 release was created in 2009, with many non-Unicode features back-ported from PHP 6, notably namespaces. In March 2010, the project in its current form was officially abandoned, and a PHP 5.4 release was prepared containing most remaining non-Unicode features from PHP 6, such as traits and closure re-binding.[37] Initial hopes were that a new plan would be formed for Unicode integration, but as of 2014 none have been adopted.

    https://en.wikipedia.org/wiki/PHP#PHP_6_and_Unicode

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

    вот его контакты) zmievski.org/about
    Ответ написан
    2 комментария
  • Почему программа запускается без подключения заголовочных файлов?

    Смотрите содержимое stdio и conio. Где-то в них подключается stdlib, не обязательно на первом уровне.
    Ответ написан
    Комментировать
  • Почему не работают массивы переменной длины?

    @res2001
    Developer, ex-admin
    Поддержка VLA (и вообще всех новых расширений языка), действительно, зависит от компилятора.
    Например в MSVC, по моему, до сих пор поддержки VLA нет.
    Официально микрософт заявляет о поддержке С90: https://docs.microsoft.com/en-us/cpp/c-language/an...
    Но в компиляторе присутствуют расширения языка (по умолчанию включенные), список расширений можно посмотреть в описании опции компилятора /Zc, и VLA там нет.
    При том, что присутствуют некоторые расширения из С++17.
    Кроме того присутствуют некоторые вещи, которые появились в С99, но их в "расширениях" нет, они уже вошли в компилятор "по умолчанию", например переменное количество аргументов в #define.
    Ответ написан
    2 комментария
  • Почему sizeof показывает фактический размер массива хотя по сути имя массива это указатель на первый элемент?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    По сути статический массив это действительно указатель. Но реально тип другой и компилятор знает реальный размер массива. После того как вы приводите массив к типу указателя (например при передаче в функцию), эта информация теряется и sizeof уже вернет размер указателя.
    Ответ написан
    2 комментария
  • Можно ли полноценно разрабатывать на С и не прыгать в С++?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Дa, можно. Си привлекает своей простотой, чистотой концепции. Плюсы(взгляд со стороны) уже давно напоминают монстра Франкенштейна, сильно переусложнены.
    Ответ написан
    Комментировать
  • Есть ли книги по Си на русском для продвинутого уровня?

    longclaps
    @longclaps
    Дейтел П., Дейтел Х. С для программистов с введением в С11 - 2014
    Бен Клеменс - Язык С в XXI веке - 2015
    Ответ написан
    Комментировать
  • Почему не выводится кириллица из Си в консоль windows?

    @res2001
    Developer, ex-admin
    Если совсем просто и деревянно, то сохраните исходный код в кодировке cp866 и пересоберите.
    А если по сложному и по правильному, то учите мат.часть. Можно начать отсюда, так же посмотрите мой комментарий под статьей, в очередной раз уже лень все повторять - тут не однократно этот вопрос обсуждался. Вообще это самый распространенный вопрос у русскоязычных начинающих программистов на Си.
    Ответ написан
    3 комментария
  • Как добавить поддержку stylus в react-create-app проект?

    @lmilligan
    Если вам нужен конфиг webpack, используйте npm run eject.
    Ответ написан
    Комментировать
  • Как сделать модальные окна для карточек товаров?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    React-modal хорошая библиотека, ничего лишнего, я бы рекомендовал оставить ее.
    Как сделать модалку:
    на том уровне, где у вас отрисовывается каталог, или даже выше - вы рисуете модальное окно и ему передаете признак, по которому оно открыто, например: isProductModalOpen (true / false). Этот код находится в "контейнере", приконекченном к redux.

    Далее при клике на кнопку подробнее, вы бросаете экшен OPEN_PRODUCT_MODAL + айдишник товара (который будете запрашивать с сервера) или + всю инфу о товаре, если она у вас уже есть и вам ничего не нужно запрашивать.

    Редьюсер, отвечающий за модальные окна принимает этот экшен и обрабатывает. В частности устанавливает значение, на которое вы опираетесь в контейнере и делаете true для флага isProductModalOpen

    По закрытию модалки - так же улетает экшен, который обрабатывается в редьюсере и признак isProductModalOpen ставится равным false.

    Готово!

    Такой подход позволяет делать несколько модальных окон разных типов.
    Ответ написан
    3 комментария
  • Как удалить пользователя из firebase по uid?

    rework
    @rework
    Помог ответ? В благодарность отметь его решением
    Нужно использовать Admin SDK - https://firebase.google.com/docs/auth/admin/manage... (эта возможность не так давно появилась только), пример кода:

    admin.auth().deleteUser(uid)
      .then(function() {
        console.log("Successfully deleted user");
      })
      .catch(function(error) {
        console.log("Error deleting user:", error);
      });
    Ответ написан
    2 комментария
  • Как изменить данные из одной "утки" в другой?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Зачем вообще в товаре свойство addedToCart?
    Представьте, что у вас в приложении есть или будет пагинация. Вы перешли вперед-назад и загрузили товары заново. Ключи при этом будут потеряны.

    Сделайте селекторы checkIsProductAddedToCartSelector и isProductAddedToCartSelector. Первый пусть возвращает функцию принимающую id товара и возвращающую true если товар найден в store корзины. Второй пусть принимает id товара и возвращает булево значение, если товар найден или не найден в store корзины. Используйте для этого reselect.
    И добавляйте их в mapStateToProps в connect.
    В списке можно вызывать так:
    const ProductsList = ({
      productsList,
      checkIsProductAddedToCart,
    }) => (
      <ul>
        {productsList.map(product => (
          <Product
            addedToCart={checkIsProductAddedToCart(product.id)}
            product={product}
          />
        ))}
      </ul>
    );
    
    const mapStateToProps(state => ({
      productsList: productListSelector(state),
      checkIsProductAddedToCart: checkIsProductAddedToCartSelector(state),
    }));
    
    export default connect(mapStateToProps)(ProductsList);

    В детализации так:
    const mapStateToProps((state, ownProps) => ({
      isAddedToCart: isProductAddedToCartSelector(state, ownProps),
    }));
    
    export default connect(mapStateToProps)(ProductDetails);


    Примерные реализации селекторов:
    import { createSelector } from 'reselect';
    
    const cartSelector = state => state.cart;
    
    const cartProductsSelector = createSelector(
      cartSelector,
      cart => cart.products,
    );
    
    // возвращает функцию, принимающую id, которую можно использовать при построении списков
    const checkIsProductAddedToCartSelector = createSelector(
      cartProductsSelector,
      products => id => products.some(product => product.id === id),
    );
    
    const productIdSelector = (_, props) => props.product.id;
    
    // возвращает булево значение, важно чтобы в компоненте было свойство product
    const isProductAddedToCartSelector = createSelector(
      cartProductsSelector,
      productIdSelector,
      (products, id) => products.some(product => product.id === id),
    );
    Ответ написан
    7 комментариев