Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Mar 27 2015 20:26
    User @sudodoki banned @doneck-russia from this room
  • Mar 19 2015 20:58
    User @mr-mig banned @pgr-ru from this room
  • Mar 15 2015 00:34
    User @mr-mig banned @putin-hero from this room
  • Mar 14 2015 22:31
    User @mr-mig banned @stepan-bendera from this room
  • Dec 07 2014 13:47

    sudodoki on master

    Update README.md Rearrange ele… (compare)

  • Dec 07 2014 13:47

    sudodoki on master

    Added Gitter badge Merge pull request #1 from gitt… (compare)

  • Dec 07 2014 13:47
    sudodoki closed #1
  • Dec 07 2014 13:46
    gitter-badger opened #1
acopalipsis
@acopalipsis
а очищать его как?
@bildja а куда тут throttle засунуть?
Observable.fromEvent(document, 'keydown')
.scan( ( keys, event ) => keys.add(event.key), new Set() )
.do(console.log.bind(console))
.subscribe();
acopalipsis
@acopalipsis
Если кто-то знает как сделать проще, подскажите, а то вообще жуткий вариант получился...
class Hotkey {
    constructor(){
        this.set = new Set();
    }

    getObservable(){
        let keydown = Observable.fromEvent(document, 'keydown') 
        .map( event => this.set.add(event.key) );

        let clear = Observable.timer(500)
        .do( ()=> this.set.clear() );


        return keydown.switchMap( keys => clear.startWith(keys) )
        .filter(value => (value instanceof Set) )
    }

    getCombo(){
        return this.getObservable()
        .filter( keys => keys.has('Control') )
    }
    getInput(){
        return this.getObservable()
        .filter(keys=>!keys.has('Control'))
    }
}

let hotkey = new Hotkey();

hotkey.getCombo()
.do(console.log.bind(console, 'combo'))
.subscribe();

hotkey.getInput()
.do(console.log.bind(console, 'input'))
.subscribe();
Denis Stoyanov
@xgrommx
я когда-то делал удалялку без внешнего стейта
Dima Bildin
@bildja
@acopalipsis если вопрос только в ctrl+какая-то кнопка, то в event в keydown есть свойство .ctrlKey, .altKey и тд
Denis Stoyanov
@xgrommx
Можно вообще в резалт селекторе а потом фильтр булеан
acopalipsis
@acopalipsis
нет, вопрос в том чтобы хоткеи сделать. То есть, мне нужно все кнопки собирать определенное время. а по контрл я уже потоки режу,если он есть, значит в текстфилд не ввожу
Shion
@ShionAt
Please support my attempt to change the world of the project, spread it, baptize it
https://github.com/ShionAt/Keys
https://twitter.com/ShionKeys
Yuriy Pitomets
@Pitometsu
@ShionAt Морально-то я тебя поддерживаю, эргономические клавы — дело хорошее, дожившие со времён печатных машинок клавиатуры просто стыд.
Но во-первых, твоя клавиатура не так уж и эргономичнa, чем она лучше десятков других уже существующих проектов, того же keyboard.io (тоже не идеал, но твоя и того менее эргономична)? А во-вторых, какое это имеет отношение к FRP?

@ShionAt,

If you are an English reader, I would like you to use Google Translate.

Seriously? Back off, please.

Shion
@ShionAt
It is the easiest way to make the keyboard close to ergonomics, and can be easy to achieve universal. I am currently only showing a 2D version of the picture, the future version of the 3D it will have a very good ergonomic version, not because it only met a little ergonomic and denied it is ergonomic
My English is not good, can not correctly translated to the English version, the future will have a team I will provide English version
Denis Stoyanov
@xgrommx
этому не место в этом канале
acopalipsis
@acopalipsis
я нажимаю кнопки две с половиной секунды и проходит только два раза, так как "какой-то задержки" установлено значение 1000. Но если я пишу только пол секунды, все равно должно выполнится один раз. Есть такой оператор?
Denis Stoyanov
@xgrommx
Хз bufferCountOrTime есть ли такой
acopalipsis
@acopalipsis
мне буферовать не нужно
Мне нужно по времени чистить. То что я делал ранее работает, но я многого не знал и оказывается что этого не достаточно.
и честно сказать, мне не хочется писать свое, так как это не просто, но кажется, что и с rx тоже не получается. По факту у него фигова туча операторов, но к моему сожалению покрывают они ка кэто показалапрактика, только малую часть задач.
acopalipsis
@acopalipsis
с временем связанно с десяток операторов, но они все почти одни и те же и я бы удивился, если бы узнал что кому-то их хватает.
Denis Stoyanov
@xgrommx
Debounce?
acopalipsis
@acopalipsis
@xgrommx да! его не пробовал.
Denis Stoyanov
@xgrommx
Там можно в него передать обзервабл
acopalipsis
@acopalipsis
@xgrommx спасибо. Как раз его можно будет отменять и вроде получится то, что мне и нужно.
Denis Stoyanov
@xgrommx
Ок)
acopalipsis
@acopalipsis
А можно как-то сделать так, чтобы interval переданный в debounce можно было перезапускать по другому событию? Типа, он засекает время, по окончанию которого происходит очистка, но тут происходит событие говорящие что сейчас произошло совпадение с первой частью комбо,и поэтому нужно начать отсчет сначала?
Denis Stoyanov
@xgrommx
Посмотри на timeout оператор
acopalipsis
@acopalipsis
есть subject и несколько observable. Можно как-то сделать так, чтобы послав событие subject.next оно прошло через observables?
Denis Stoyanov
@xgrommx
ну наверное mergeMap как-то или mergeMapTo
acopalipsis
@acopalipsis
вот какой вопрос. Есть действия a -> b -> c, если на с получаю true, то нужно выполнить d, после которого снова выполнить всю цепочку начиная с a, иначе переходим на e. И таких моментов должно быть много и они должны формировать подобие дерева формирующего состояние. Такое с помощью чего делают? rxjs подходит для этого или что-то другое есть?
Dima Bildin
@bildja
function a() {
  b();
}

function b() {
  c();
}

function c() {
  if (condition) { 
    d();
  } else {
    e();
  }
}

function d() {
  a();
}

function e() {
  console.log(‘e');
}
зачем rx)
Denis Stoyanov
@xgrommx
иногда люди входят в кураж и переосложняют свои задачи
acopalipsis
@acopalipsis
это ещё мягко сказано. да, можно взять и вот так просто сделать в функциях, а потом думать как это тестировать. Ведь я не могу взять и на каком-то моменте отключить d в c. Я вообще не фанат функциональщины, так как почти не пишу верхний уровень. и поэтому я туплю, и задаю странные вопросы. Я понимаю что часть можно сделать с каким-то инструментом, но отказываюсь верить в то, что другую часть он не может решить.
Denis Stoyanov
@xgrommx
rx больше для ассинхронности для остального это оверхед
Dima Bildin
@bildja

просто сделать в функциях, а потом думать как это тестировать.

Их легче всего тестировать

часть можно сделать с каким-то инструментом, но отказываюсь верить в то, что другую часть он не может решить.

Ну отчего же, всё правильно, как бы это не было банально, у инструмента своя задача (и тут какой-нибудь пример про забивание гвоздя дрелью)

andretshurotshka
@goodmind
Кто объяснит разницу между signal, atom, behaviour и cell?
Denis Stoyanov
@xgrommx
каким это таким боком это к ФП относится?
acopalipsis
@acopalipsis
а есть оператор который выполняется до обсервабла?
acopalipsis
@acopalipsis
let o = Observable.fromEvent(...)

// как при  таком условии можно выполнить метод до клика и после?
Это возможно?
Aleksey
@nanomen
Привет друзья! Как-то потребовалось обрабатывать ширину экрана с помощью RxJS и связывать с его типом (desktop, mobile), заданным в конфиге. Не нашел подобного в интернете, написал сам. Может кому пригодиться https://github.com/RGRU/ScreenViewer
Undefitied
@Undefitied
@nanomen а как потом использовать привязанный тип?
@nanomen Можно проверить какой сейчас тип из подписки?
acopalipsis
@acopalipsis
есть некий объект который содержит метод getObservable возвращающий массив объединенных observable.
И вот значит приложение запустилось и все кому нужно подписались на возвращенный из метода getObservable observable. Но уже после, в массив с observable могут добавится другие observable и нужно чтобы подписчики могли получать изменения и от них. Такое возможно?
acopalipsis
@acopalipsis
Ситуация, которая немного похожа на ховер; сначала подписан на mouseover и по его возникновению, от него отписываешься и подписываешься на mouseout. А потом наоборот. Можно такое сделать на rxjs имея два потока?
acopalipsis
@acopalipsis
помнится мне говорили что rxjs изоморфный, а я только сейчас с его помощью пишу изоморфный запросы и он говорит что XMLHttpRequest is not supported by your browser. Получается что он не изоморфный чтоль или как правильно запросы делать?
в гугле тоже пишут что было бы классно если бы он запускался на ноде...Но я точно помню как Вы здесь говорили что он изоморфный
Dima Bildin
@bildja
Ну, xhr очевидно не будет в ноде работать, надо другой транспорт
Vladimir Kozhaev
@vladimirkozhaev
Коллеги, тут можно вакансии постить?
Dima Bildin
@bildja
@vladimirkozhaev здесь нет, в dev-ua/jobs, предварительно ознакомившись с правилами
Andrew Brigthon
@snatvb
Привет народ! Я на TS не смог найти ни одной нормально рабочей монады Maybe, сделал свою, ну и добавил туда еще Either, чтобы можно было быть уверенны в их корректном интерфейсе. Так же планируется добавление и других монад тоже, вдруг кому интересно:
https://github.com/snatvb/monad-maniac
Буду рад, если кому-то помогу.
PS на чистом JS они тоже работают