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 Feb 21, 2021
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')

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 Jul 24, 2019
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 Aug 10, 2017
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 Mar 31, 2017
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 Dec 8, 2016
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 => x < 10)

bahmutov /
Last active Sep 27, 2018
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 Aug 11, 2018
Websites that can check your site's security
View Security