Ethereum Wallet / Mist, checksum mismatch in dowloaded node, geth-1.8.23, MyCrypto Desktop App

Bottom line:

Ethereum Wallet stopped working for me, so I stopped working with him. Now using MyCrypto Desktop App with the keystore files (in my keystore/ folder).

The longer story:

After a while of not running my Ethereum Wallet, it notified me of the existence of a new geth. I told him to download it (as I’ve done multiple times in the past), but since that point it stopped working for me: kept complaining on a checksum mismatch in the downloaded node, and told me I should download geth-1.8.23 myself. I did. I tried various other geth versions. I tried running the geth locally and then run the Ethereum Wallet etc., but it wouldn’t work.

I eventually realized that the team has decided to sunset Mist, and they proposed some migration options.

I followed their recommendation and installed MyCrypto Desktop App from (there’s a checksums.txt file here). That’s it. Apparently you could use their online version directly to some extent. Anyway, from their Desktop App (.exe file running directly from where you saved it), choose to access your wallet from a “Keystore File” and just refer to the keystore file (in your keystore/ folder, which I’m sure you took care of backing up after each transaction, right?). Done.

Final note: At that point, relying on a remote node using that MyCrypto app, there’s probably no need for the big geth/ local folder, as well as the geth.exe (can uninstall it if you installed it using their installer file).

Chrome Extensions

Some random notes on Chrome Extensions:

A Browser Action appears as some added icon that e.g. opens some popup.html when clicked.

How to debug (e.g. where to see the console.log messages) each script:

  • Background script: In chrome://extensions/, there’s a link to “inspect views” or access the background page.
  • Content script: The active tab’s main console
  • popup.js: Right-click icon (or the popup.html) and click inspect element

Example permissions:

  • “activeTab”: to use
  • “contextMenus”: to do stuff with context menus
  • DB or something for the Chrome Extension is stored here:

    C:\Users\\AppData\Local\Google\Chrome\User Data\Default\Extensions\theextensionidsomestring
    When I removed an extension (from chrome://extensions/, it also deleted its theextensionidsomestring folder from there.

    Python notebook tricks (Jupyter, nbconvert, Slideshow)

    Tip #1: To generate slides (“Slideshow”) from your notebook:

  • View => Slideshow, then decide which cell is which Slide / Sub-slide (arrow down to see it) / Fragment (Enter to reveal; i.e. fragment of a Slide) / Skip
  • Then from command line: jupyter nbconvert my_slides.ipynb --to slides --post serve will generate an html file + serve it from local webserver (that also has reveal.js etc.).
  • There’s a ~bug with the zoom

    There’s a ~bug with the zoom. reveal.js takes control of the zoom, so you cannot e.g. adjust font size during Slideshow, whose default is too small.

    For anyone interested in a temporary fix to both issues (nicer initial font size + browser zoom functionality to affect the slides): You can hack the CSS of the `.slides` element in the page by adding the following code (=essentially one line of JS) to some(*) Markdown cell in your Slideshow notebook: <script> console.log("Hello. You'll see this printed in your browser's DevTools / Console. Feel free to delete this line."); document.querySelector('head').innerHTML += '<style>.slides { zoom: 1.0 !important; }</style>'; </script> (*)any cell which is not of type ‘Skip’; e.g. add it to some Markdown cell that you already intended to display in your Slideshow.

    Tip #2: Run notebook from command line using `nbconvert`

    C:\Temp>jupyter nbconvert --to notebook --execute C:\dev\python\JupyterLocal\MyStuff\Statistics.ipynb
    [NbConvertApp] Converting notebook C:\dev\python\JupyterLocal\MyStuff\Statistics.ipynb to notebook
    [NbConvertApp] Executing notebook with kernel: python2
    [NbConvertApp] Writing 4319 bytes to C:\dev\python\JupyterLocal\MyStuff\Statistics.nbconvert.ipynb

    Python packages, conda, pip

    Fresh install, Feb. 21, 2018

    • Started with `conda -V` 4.6.3. (had Anaconda 2.2.0 (64-bit), installed in C:\Dev\Anaconda\).
    • Ran the `Uninstall-Anaconda.exe` in C:\Dev\Anaconda\. Note: Once you click the “Details” button, it cannot be undone (and it takes more time when it prints all the stuff it deletes; so don’t click “Details”, the uninstall is already long as it is).
    • Went to (Anaconda 2018.12 for Windows Installer), where I could download either Python 3.7 version or Python 2.7 version. Downloaded the Python 3.7 version, “64-Bit Graphical Installer” (, 614.3 MB).

    Older notes

    Useful commands — venvs:
    # list of venvs
    conda env list
    # activate/deactivate
    activate my_venv
    conda deactivate
    Usefull commands — packages:
    # installed packages
    pip list
    # search a package (actually a *string* in the text (descriptions?) of packages)
    pip search statsmodels
    # info on specific package
    pip show statsmodels
    # install / upgrade a package
    pip install statsmodels
    pip install statsmodels --upgrade
    # Conda list packages -- better than 'pip list', because supposedly listing all package installations whether they were installed using pip or conda (so e.g. you might have statsmodels version 0.8 that you once installed using pip, but version 0.9 if you installed using conda)
    conda list
    Conda channels etc.: The documentation is really helpful.
    conda config --help
    # So e.g. to add the channel conda-canary:
    conda config --add channels conda-canary

    How to fix: WordPress permalinks not working

    If only the “plain” permalinks work:
    • Maybe the .htaccess file is not set properly? Ensure WordPress can modify it (chmod 777 .htaccess for a moment; don’t forget to chmod back once we’re done with this step), then go to Settings ⇒ Permalinks and modify your Permalink preference and “Save Changes”. This will ensure .htaccess has the proper contents.
    • If you still have a problem, maybe the mod_rewrite is not enabled?! (have you upgraded your server recently?) So just enable it! (how? depending on your Apache version. Maybe: sudo a2enmod rewrite and then service apache2 restart)
    • If you already had mod_rewrite enabled, then maybe there is some conflicting plugin? :/ try to disable your plugins and enable them one after the other to see whether that’s the case.
    • Still not fixed? Let’s look again at the .htaccess. Maybe your Apache configuration does not AllowOverride All? Hope this helps!
    • None of this worked? Sucks for you.

    apt-get GPG error mongodb-org

    When running apt-get update, problem:
    Reading package lists... Done
    W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: xenial/mongodb-org/3.2 Release: The following signatures were invalid: KEYEXPIRED 1507497109
    W: Failed to fetch  The following signatures were invalid: KEYEXPIRED 1507497109
    W: Some index files failed to download. They have been ignored, or old ones used instead.
    Solution: Essentially getting the correct key:
    sudo apt-key adv --keyserver hkp:// --recv EA312927

    Some notes about Entropy

    KullbackÔÇôLeibler divergence (Wikipedia): A non-symmetric difference between two distributions:

        \[D_{KL}(P||Q) = \sum_i{P(i)\log\frac{P(i)}{Q(i)}}\]

    Conditional Entropy:

        \[H(Y|X) = -\sum_{x}{p(x) \sum_{y}{p(y|x) \log p(y|x)} } = -\sum_{x,y}{p(x,y) \log \frac{p(x)}{p(x,y)}}\]

    Joint Entropy:

        \[H(X,Y) = -\sum_{x,y}{p(x,y) \log p(x,y) }\]

        \[H(X,Y) = H(X) + H(Y|X) = H(Y) + H(X|Y)\]

    A non-symmetric measure of association (“uncertainty coefficient”?) between X and Y measures the percentage of entropy reduced from Y if X is given:

        \[U(Y|X) = \frac{H(Y) - H(Y|X)}{H(Y)} = \frac{I(X;Y)}{H(Y)}\]

    Or the percentage of entropy reduced from X if Y is given:

        \[U(X|Y) = \frac{H(X) - H(X|Y)}{H(X)} = \frac{I(X;Y)}{H(X)}\]

    Where I(X;Y) = H(X) + H(Y) - H(X,Y) = H(X,Y) - H(X|Y) - H(Y|X), the mutual information of X and Y, is non-negative and symmetric.

    Anyway, U(Y|X) equals 0 if no association, 1 if knowing X fully predicts Y (i.e. Y is a function of X).
    A symmetric measure can be made of a weighted average of U(Y|X) and U(X|Y):

        \[U(X,Y) &= \frac{H(X)U(X|Y) + H(Y)U(Y|X)}{H(X)+H(Y)}\]

        \[= 2 \Big[ \frac{H(X)+H(Y)-H(X,Y)}{H(X)+H(Y)} \Big]\]

    Relation to \chi^2 or measures like Cramer’s V etc.:

        \[\chi^2 = N \cdot \sum_{x,y}{\frac{(p(x,y)-p(x)p(y))^2}{p(x)p(y)}}\]

    No obvious relation. Generated some 2×2 contigency tables and plotted their U(X,Y) vs Cramer’s V:

    Laravel Cheatsheet

    Some useful Laravel 4 commands below.


    In app/config/ there are various files (objects) like ‘app’, ‘auth’, ‘database’, and more. Configure them as you like. You can use Config::get($key) to access some configuration in real-time, e.g.Config::get('app.debug').


    Redirect::to('') or Redirect::to('/') Redirects to /public/
    Redirect::route('someName') Redirects using a Named Route.

    Named Routes

    Route::get('user/profile', array('as' => 'profile', function() { ... })) or Route::get('user/profile', array('as' => 'profile', 'uses' => 'UserController@showProfile')); Associates the “user/profile” route with some function (or Controller method), and creates a Named Route to “user/profile” (so now when you’ll call Redirect::route('profile'); you’ll redirect to “user/profile”.