Skip to content

Instantly share code, notes, and snippets.

on a roll

Gleb Bahmutov bahmutov

on a roll
View GitHub Profile
View page-reload-spec.js
it('until the number 7 appears', () => {
const checkAndReload = () => {
// get the element's text, convert into a number
.then((number) => {
// if the expected number is found
// stop adding any more commands
if (number === 7) {
cy.log('lucky **7**')
bahmutov / ping-spec.js
Created February 21, 2021 19:08
Example anchor ping stub in Cypress
View ping-spec.js
/// <reference types="Cypress" />
describe('intercept', () => {
it('stubs anchor ping', () => {
method: 'POST',
pathname: '/track'
}, {}).as('ping')
bahmutov /
Created August 4, 2020 23:53

Keybase proof

I hereby claim:

  • I am bahmutov on github.
  • I am glebb ( on keybase.
  • I have a public key ASBM0WBon-OfVjLsNOuqvrPMbR0HNkjc9zdg42Sxp-K3kQo

To claim this, I am signing this object:

bahmutov /
Created July 24, 2019 19:43
Looking at wallclock vs frame timestamp

Printing wallclock timestamps and frame timestamps (since common start)

cypress:server:video 1.3989999294281006 frame 1.326711893081665 received screencastFrame +0ms
  cypress:server:video 1.5299999713897705 frame 1.4792709350585938 received screencastFrame +131ms
  cypress:server:video 2.922999858856201 frame 2.340052843093872 received screencastFrame +1s
Browserslist: caniuse-lite is outdated. Please run next command `npm update caniuse-lite browserslist`
  cypress:server:video 4.042999982833862 frame 2.4192519187927246 received screencastFrame +1s
  cypress:server:video 4.049000024795532 frame 2.584810972213745 received screencastFrame +7ms

bahmutov / index.js
Created August 10, 2017 15:37
Kleisli composition example (JSON parsing + deep property)
View index.js
// following along
const R = require('ramda')
const Maybe = require('ramda-fantasy').Maybe
// parse JSON string into object
// parse :: String -> Object | Null
function parse(s) {
try {
return JSON.parse(s)
} catch (e) {
bahmutov /
Last active March 31, 2017 15:47
tmux basics


Install on Mac using brew install tmux and start with tmux

main commands

See help (list of commands) with Control-b ? key combination. Leave help view by pressing q key. From now on use Control-b (aka C-b) to start all tmux commands (C-b is called command prefix and can be changed, see tmux.config options).

bahmutov / Advanced
Created December 8, 2016 04:05
List of advanced Rx.js topics
View Advanced
  • Marble diagrams are awesome and show the streams really well. When you cannot fit them due to space constraints - time to refactor
  • Testing Rx.js code is still hard and requires controlling timing of events. See
  • Reactive is all about controlling sequence of events. A simple operation might be take

In its first form it just takes N items s.take(2) which creates second stream with first 2 events from s and the completes. But what happens if you don't know how many items to take? Maybe there is a condition, a simple function that operates on the event data and/or global state that tells when to stop taking items. In this case takeWhile is useful s.takeWhile(x =&gt; x &lt; 10)

bahmutov /
Last active September 27, 2018 00:55
Loading multiple service workers

Imagine I want to separate caching for offline support from other features. I would load first service worker to cache index.html and static resources in /static and would load second service worker to do other things.

    if ('serviceWorker' in navigator) {
      console.log('page is registering two service workers')
      // one.js should cache index.html and /static folder
 navigator.serviceWorker.register('one.js', {scope: './'})
bahmutov / Security
Last active August 11, 2018 08:39
Websites that can check your site's security
View Security