Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

sheburshalo 01.10.2015 00:24

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

Бывает конечно исключение, но они и команду требуют с ведущим прогером, который и построит всю архитектуру.

cyber 01.10.2015 00:35

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

cyber 01.10.2015 00:36

sheburshalo, а вообще я хочу на работу в гугл, через 2 года буду туда подавать резюме, поэтому нужно хорошо прокачать скил)

sheburshalo 01.10.2015 02:21

Цитата:

Сообщение от cyber
по работал 3 месяца в фирме где проект разрабатывали по такому принципу, взяли фраэмворк и понеслась

9 месяц, полет нормальный. Может нужно под проект выбирать фреймворк?

l-liava-l 01.10.2015 13:05

Цитата:

sheburshalo, а вообще я хочу на работу в гугл, через 2 года буду туда подавать резюме, поэтому нужно хорошо прокачать скил)
Судя по фильму там у джунов классные шапочки. :)
А почему только через 2 года?

cyber 01.10.2015 13:45

Цитата:

Сообщение от l-liava-l
А почему только через 2 года?

Мне нужно переезжать, а пока я привязан к универу + подписал контракт на год с хорошей зп)

join 04.10.2015 04:45

Цитата:

Сообщение от cyber
Мне нужно переезжать, а пока я привязан к универу + подписал контракт на год с хорошей зп)

Может покажешь живой код, который пишешь "на контракте"?:)
Можно просто ссылку на dev-версию кодов, репозиторий-проектов и тд.

cyber 04.10.2015 18:25

join, мы работает под бизнес сектор банки и все такое, у нас нет опен соурс и я подписал условие о не разглошение)
Максимум могу дать ссылку на компанию и название проекта)

cyber 09.10.2015 10:59

Не могу найти как через wireshark, фильровать по файлам например что бы остались только js файлы в списке ?

cyber 11.10.2015 17:21

Мне стало интересно как можно скомпилить js в c++ ?)

bes 11.10.2015 17:34

Цитата:

Сообщение от cyber
Мне стало интересно как можно скомпилить js в c++ ?)

очевидно нужно использовать соответствующий компилятор :)

cyber 11.10.2015 17:37

bes, а ссылочку можно?)

bes 11.10.2015 17:48

Цитата:

Сообщение от cyber
bes, а ссылочку можно?)

я не знаю, возможно их вообще пока не существует, обычно компилируют под веб, то есть наоборот в js
в чём смысл затеи?

l-liava-l 11.10.2015 20:59

Цитата:

в чём смысл затеи?
Наверное какую-нибудь практическую работу в универ сдать нужно.

Ребзя, а кто-нибудь из вас сталкивался с статистикой открытых ИП в 2014-2015 или 2015 онли (ведь скоро уже 2016)?

l-liava-l 11.10.2015 21:05

Во! Мож кому пригодится
https://www.nalog.ru/rn26/related_ac...tics/regstats/

cyber 11.10.2015 23:35

Цитата:

Сообщение от bes
в чём смысл затеи?

Цитата:

Сообщение от l-liava-l
Наверное какую-нибудь практическую работу в универ сдать нужно.

Писал на с++ и не в какую не компилися код и я подумал почему бы не скомпили js в c++

bes 11.10.2015 23:37

Цитата:

Сообщение от cyber
Писал на с++ и не в какую не компилися код и я подумал почему бы не скомпили js в c++

а если и из js не скомпилится, что делать будешь? :)

cyber 11.10.2015 23:49

Цитата:

Сообщение от bes
а если и из js не скомпилится, что делать будешь?

руки прямить

cyber 19.10.2015 21:00

Есть либа она выполняется синхронно, мне не важно что она вернет и все такое. Мне просто нужно вызвать ее и передать параметр
require( "lib" ).method (  param );

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

l-liava-l 19.10.2015 22:44

Цитата:

но она блокирует выполнение кода, как это можно выполнить асинхронно, я знаю что на ноде нет потоков как таковых но может есть хак?
Мне кажется это поможет https://nodejs.org/api/cluster.html

cyber 20.10.2015 09:30

l-liava-l,
сенк попробую

nerv_ 26.10.2015 09:34

Как описать в jsdoc параметрический полиморфизм конструктора? А именно, то что он может вызываться следующим образом:
new Point( {x: {Number}, y: {Number}}.<Point> ); // передается другой экземпляр {Point}
new Point( [x {Number}, y {Number}].<Array> ); // массив с координатами
new Point( x {Number}, y {Number} ); // координаты

?

trikadin 26.10.2015 20:23

nerv_,
/**
 *
 * @param {(number|Point|number[])} paramOrX
 * @param {number} [y]
 * @constructor
 */
function Point(paramOrX, y) {

}


Хотя, как по мне, правильнее будет выбрать что-то одно -- я бы предпочел два параметра, x и y, тогда проблему с массивами решаем через new Point(...[x, y]), а для других Point'ов заведи статик метод типа Point.fromPoint(point) или метод clone в прототипе.

FINoM 26.10.2015 21:25

nerv_, @variation

nerv_ 27.10.2015 01:07

Цитата:

Сообщение от trikadin
Хотя, как по мне, правильнее будет выбрать что-то одно -- я бы предпочел два параметра, x и y, тогда проблему с массивами решаем через new Point(...[x, y]), а для других Point'ов заведи статик метод типа Point.fromPoint(point) или метод clone в прототипе.

мой код сейчас выглядит так:
'use strict';


export default class Point {
    /**
     * @param {Point|Array<Number>} some
     */
    constructor(...some) {
        let [x, y] = Point.factory(some);
        this.x = x;
        this.y = y;
    }
    /**
     * @returns {Point}
     */
    clone() {
        return new Point(this);
    }
    /**
     * @param {Array} some
     * @returns {Object}
     */
    static factory(some) {
        if (some instanceof Array) {
            switch (some.length) {
                case 2:
                    return some;
                case 0:
                    return [0, 0];
                default:
                    break;
            }
        }
        if (some instanceof Point) {
            return [some.x, some.y];
        }
        if (some instanceof Object) {
            if ('x' in some && 'y' in some) {
                return [some.x, some.y];
            }
        }
        throw new TypeError(`This type not supported.`);
    }
}


---

FINoM, пример? Шторм вроде как не подхватывает...

trikadin 27.10.2015 01:49

/**
 * @interface
 */
class Base {
  constructor() {
    Object.assign(this, this.constructor.castConstructorData(...arguments));
  }

  clone() {
    return new this.constructor(this);
  }

  static castConstructorData() {};
}

class Point extends Base {
  /**
   *
   * @param {(number|Point|{x: number, y: number})} pointOrX
   * @param {number} [y]
   */
  constructor(pointOrX, y) {
    super(...arguments);
  }

  /**
   * @see Point
   */
  static castConstructorData(pointOrX, y) {
    if (typeof pointOrX === 'number') {
      return {x: pointOrX, y};
    }

    if (typeof pointOrX === 'object') {
      return {x: pointOrX.x, y: pointOrX.y};
    }

    throw new TypeError(`Invalid arguments for Point`);
  }
}


console.log(new Point(1, 2));
console.log(new Point({x: 1, y: 2}));
console.log(new Point(new Point(1, 2)));
console.log(new Point(1, 2).clone());

trikadin 27.10.2015 04:52

Цитата:

Сообщение от FINoM
nerv_, @variation

Это же вообще о другом О_о

FINoM 27.10.2015 10:50

nerv_, с @variation нужно несколько раз объявить метод или класс:
/**
* method x
* variation 1
* ...
*/

/**
* method x
* variation 2
* ...
*/
Цитата:

Сообщение от trikadin
Это же вообще о другом

Тогда я не понял задачи. Вроде надо было объявить несколько вариантов использования одного метода, не?

nerv_ 27.10.2015 11:30

trikadin, сравни это

class Point {
    /**
     * @param {Point|Array<Number>} some
     */
    constructor(...any) {
        let [x, y] = Point.factory(any);
        this.x = x;
        this.y = y;
    }
}


и это

/**
 * @interface
 */
class Base {
  constructor() {
    Object.assign(this, this.constructor.castConstructorData(...arguments));
  }
}


в первом случае я сразу вижу свойства объекта, во втором - кто его знает что там :)

FINoM, можно больше кода? Напиши для функции foo() пример.

---

забыл, что можно запускать уже подобный код в браузере :)

'use strict';


class Point {
    /**
     * Examples:
     *      new Point()
     *      new Point(1, 2)
     *      new Point([3, 4])
     *      new Point({x: 5, y: 6})
     *      new Point(new Point(7, 8))      
     *
     * @param {Point|Array<Number>} some
     */
    constructor(some) {
        let xy = Point.factory(Array.from(arguments)); // все-таки нельзя пока без доводки руками =(
        this.x = xy[0];
        this.y = xy[1];
    }
    /**
     * @returns {Point}
     */
    clone() {
        return new Point(this);
    }
    /**
     * @param {Point|Array<Number>} some
     * @returns {Object}
     */
    static factory(some) {
        if (!some.length) {
            return [0, 0];
        }
        if (some.length === 2) {
            return some;
        }
        let first = some[0]; // some.length === 1
        if (first instanceof Array) {
            return first;
        }
        if (first instanceof Point) {
            return [first.x, first.y];
        }
        if (first instanceof Object) {
            if ('x' in first && 'y' in first) {
                return [first.x, first.y];
            }
        }
        throw new TypeError(`This type not supported.`);
    }
}


console.log(new Point());
console.log(new Point(1, 2));
console.log(new Point([3, 4]));
console.log(new Point({x: 5, y: 6}));
console.log(new Point(new Point(7, 8)));

trikadin 27.10.2015 14:31

nerv_, ты сравнил интерфейс и имплементацию О_о

Используй class properties из es7, и будет сразу отлично видно, какие свойства у класса есть. Советую в связке с flow -- webstorm его хорошо держит, это удобнее, чем jsdoc.

nerv_ 27.10.2015 15:42

Цитата:

Сообщение от trikadin
ты сравнил интерфейс и имплементацию О_о

1. когда в js появятся интерфейсы, тогда и поговорим :) Сейчас их нет)
2. кроме того интерфейс - это описатель (насколько я понимаю), а у тебя уже реализация в твоем "интерфейсе" подмешена. Т.е. это не интерфейс, а базовый класс.

Цитата:

Сообщение от trikadin
Используй class properties из es7, и будет сразу отлично видно, какие свойства у класса есть. Советую в связке с flow -- webstorm его хорошо держит, это удобнее, чем jsdoc.

я всерьез подумываю о том, чтобы перейти на typescript

trikadin 27.10.2015 16:50

Цитата:

Сообщение от nerv_
1. когда в js появятся интерфейсы, тогда и поговорим Сейчас их нет)
2. кроме того интерфейс - это описатель (насколько я понимаю), а у тебя уже реализация в твоем "интерфейсе" подмешена. Т.е. это не интерфейс, а базовый класс.

Ну да, ты прав. Но в любом случае, это класс, не предназначенный для инстанциации, только для наследования. Какие плюсы вижу я: я использую this.constructor, а не Point (т. е. при наследовании всё будет правильно), можно создать много потомков Base, у которых будет единая логика, поведение легко перегружается и расширяется.

Цитата:

Сообщение от nerv_
я всерьез подумываю о том, чтобы перейти на typescript

Он крутой, но стоит подождать 2.0, к сожалению. А пока можно юзать Flow для базовой аннотации:

class Base {
  constructor() {
    Object.assign(this, this.constructor.castConstructorData(...arguments));
  }

  clone() :Base {
    return new this.constructor(this);
  }

  static castConstructorData() {};
}

class Point extends Base {
  x: number;
  y: number;

  constructor(
    pointOrX: ?(number | {x: number, y: number} | Point) = 0,
    y: ?number = 0
  ) {
    super(...arguments);
  }

  static castConstructorData(
    pointOrX: ?(number | {x: number, y: number} | Point) = 0,
    y: ?number = 0
  ) : {x: number, y: number} {
    if (typeof pointOrX === 'number') {
      return {x: pointOrX, y};
    }

    if (typeof pointOrX === 'object') {
      return {x: pointOrX.x, y: pointOrX.y};
    }

    throw new TypeError(`Invalid arguments for Point`);
  }
}


console.log(new Point());
console.log(new Point(1, 2));
console.log(new Point({x: 1, y: 2}));
console.log(new Point(new Point(1, 2)));
console.log(new Point(1, 2).clone());

kobezzza 27.10.2015 19:24

Цитата:

Он крутой, но стоит подождать 2.0, к сожалению. А пока можно юзать Flow для базовой аннотации:
Кстати скоро должен докатится до релиза 1.7 (поддержка асинков и генераторов).

ТайпСкрипт очень крутой (ну очень). Но ему пока реально не хватает ES6/7 фичей, хотя они ща реально сделали рывок в этом плане + пока очень раздражает невозможность описать this в анотации типа и отсутствие partial классов (причём в JS они есть). Поэтому я тоже жду 2.0.

trikadin 27.10.2015 20:03

Цитата:

Сообщение от kobezzza
и отсутствие partial классов (причём в JS они есть).

Это ты про мердж в прототип объекта, у которого методы заданы через расширенный литеральный синтаксис?

FINoM 27.10.2015 21:33

Цитата:

Сообщение от nerv_
FINoM, можно больше кода? Напиши для функции foo() пример.

Лучше живой пример.
https://github.com/matreshkajs/matre...jsdoc#L87-L146

Первая вариация: http://ru.matreshka.io/#!Matreshka-on
Вторая вариация: http://ru.matreshka.io/#!Matreshka-on(2)

Как видишь, я просто определил метод дважды с разными параметрами. Для первого (основного) @variation не использовал.

(не на правах рекламы :))

nerv_ 28.10.2015 00:12

Цитата:

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

т.е. абстрактный класс. Тады PointAbstract

Цитата:

Сообщение от trikadin
я использую this.constructor, а не Point (т. е. при наследовании всё будет правильно)

это да
Цитата:

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

и это тоже :)


---

FINoM, спасибо :) Карму не плюсует.

---

Цитата:

Сообщение от kobezzza
Поэтому я тоже жду 2.0.

уже известна дата релиза?

bes 28.10.2015 01:23

http://javascript.ru/forum/287999-post1062.html
Цитата:

Сообщение от cyber
20.12.2013, 11:01

Цитата:

Сообщение от cyber (Сообщение 287999)
kobezzza, я всетаки прописал grunt, танцы с бубном и битой помогли)

сейчас это решение описано в документации http://gruntjs.com/getting-started
в 2013 году возможно его там не было, хотя на 2ip.ru показал дату создания домена Creation Date: 19-apr-2012, но может быть и не было

в общем, там при глобальной установке дополнительно к grunt-у нужно ещё поставить grunt-cli
Цитата:

npm install -g grunt-cli
при установке которого на винду создастся файлик %appdata%\npm\grunt.cmd с незатейливым содержимым, а так как каталог %appdata%\npm после установки node.js оказывается в path, а .cmd по умолчанию в pathext, то становится возможным запуск по короткому имени - grunt

натолкнулся на этот пост сегодня (читай вчера), когда пытался понять почему глобальный grunt --help не выводит справку, а локальный выводит,
оказалось, что в файле %appdata%\npm\node_modules\grunt-cli\bin\grunt, который используется при "глобальном вызове", это просто не предусмотрено в отличие от node_modules\grunt\lib\grunt.js, который используется при "локальном вызове"
логика не совсем понятна, но уже можно спокойно идти спать :)

trikadin 28.10.2015 01:46

Цитата:

Сообщение от nerv_
т.е. абстрактный класс. Тады PointAbstract

Интерфейсом скорее по привычке обзываю.

А именовать как хочешь можно, хех.

bes 28.10.2015 21:22

Цитата:

Сообщение от bes
оказалось, что в файле %appdata%\npm\node_modules\grunt-cli\bin\grunt, который используется при "глобальном вызове", это просто не предусмотрено в отличие от node_modules\grunt\lib\grunt.js, который используется при "локальном вызове"

точнее будет сказать так: файл %appdata%\npm\node_modules\grunt-cli\bin\grunt используется всегда при вызове из консоли, но при вызове глобально установленного grunt (когда не находит локально установленного) до использования node_modules\grunt\lib\grunt.js в последней строчке просто не доходит (gruntpath is null)
// Everything looks good. Require local grunt and run it.
require(gruntpath).cli();

cyber 05.11.2015 15:24

как в es6 сделать что то такое?
расширить класс объектом
var obj = {
  hello: "world"
  
};

class UseGuide extends obj {

  constructor(height, width) {
    super();
    
  }
}


Часовой пояс GMT +3, время: 03:51.