├── .gitignore ├── Icon1024.png ├── Local iPython Server.url ├── build.sh ├── iPythonNotebook.app └── Contents │ ├── Info.plist │ ├── MacOS │ └── iPythonNotebook │ └── Resources │ ├── AppSettings.plist │ ├── MainMenu.nib │ ├── appIcon.icns │ ├── iPythonNotebookServer.app │ └── Contents │ │ ├── Info.plist │ │ ├── MacOS │ │ └── iPythonNotebookServer │ │ └── Resources │ │ ├── AppSettings.plist │ │ ├── MainMenu.nib │ │ ├── appIcon.icns │ │ └── script │ └── script ├── ipythonNotebook.py ├── ipythonNotebookServer.py ├── readme.md ├── test.ipynb ├── todo.txt └── v1.0.0 screenshot.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | *.egg-info/ 23 | .installed.cfg 24 | *.egg 25 | 26 | # PyInstaller 27 | # Usually these files are written by a python script from a template 28 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 29 | *.manifest 30 | *.spec 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .coverage.* 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | *,cover 45 | 46 | # Translations 47 | *.mo 48 | *.pot 49 | 50 | # Django stuff: 51 | *.log 52 | 53 | # Sphinx documentation 54 | docs/_build/ 55 | 56 | # PyBuilder 57 | target/ 58 | -------------------------------------------------------------------------------- /Icon1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/Icon1024.png -------------------------------------------------------------------------------- /Local iPython Server.url: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=http://localhost:8888/tree#running 3 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Prerequisites: Platypus.app, and the installed command line tool (use File > Preferences... from the app). 4 | 5 | # Make the icon from the icon PNG. 6 | mkdir Icon1024.iconset 7 | sips -z 16 16 Icon1024.png --out Icon1024.iconset/icon_16x16.png 8 | sips -z 32 32 Icon1024.png --out Icon1024.iconset/icon_16x16@2x.png 9 | sips -z 32 32 Icon1024.png --out Icon1024.iconset/icon_32x32.png 10 | sips -z 64 64 Icon1024.png --out Icon1024.iconset/icon_32x32@2x.png 11 | sips -z 128 128 Icon1024.png --out Icon1024.iconset/icon_128x128.png 12 | sips -z 256 256 Icon1024.png --out Icon1024.iconset/icon_128x128@2x.png 13 | sips -z 256 256 Icon1024.png --out Icon1024.iconset/icon_256x256.png 14 | sips -z 512 512 Icon1024.png --out Icon1024.iconset/icon_256x256@2x.png 15 | sips -z 512 512 Icon1024.png --out Icon1024.iconset/icon_512x512.png 16 | cp Icon1024.png Icon1024.iconset/icon_512x512@2x.png 17 | iconutil -c icns Icon1024.iconset 18 | rm -R Icon1024.iconset 19 | 20 | # Make the server app. 21 | /usr/local/bin/platypus -i 'Icon1024.icns' -a 'iPythonNotebookServer' -o 'Text Window' -p '/usr/bin/python' -g '#ffffff' -b '#D53D1B' 'ipythonNotebookServer.py' 22 | 23 | # Make the opener app. 24 | /usr/local/bin/platypus -DBR -i 'Icon1024.icns' -a 'iPythonNotebook' -o 'None' -p '/usr/bin/python' -V '1.0.2' -X 'ipynb' 'ipythonNotebook.py' 25 | 26 | # Put the server app inside the opener app. 27 | mv iPythonNotebookServer.app iPythonNotebook.app/Contents/Resources/ 28 | 29 | # Clean up the icon. 30 | rm Icon1024.icns 31 | -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Info.plist -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/MacOS/iPythonNotebook: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/MacOS/iPythonNotebook -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/AppSettings.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/AppSettings.plist -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/MainMenu.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/MainMenu.nib -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/appIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/appIcon.icns -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Info.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Info.plist -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/MacOS/iPythonNotebookServer: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/MacOS/iPythonNotebookServer -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Resources/AppSettings.plist: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Resources/AppSettings.plist -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Resources/MainMenu.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Resources/MainMenu.nib -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Resources/appIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Resources/appIcon.icns -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/iPythonNotebookServer.app/Contents/Resources/script: -------------------------------------------------------------------------------- 1 | ''' Front end to the iPython notebook server. ''' 2 | 3 | import os, sys, webbrowser, subprocess, time, atexit 4 | from urllib2 import urlopen, URLError 5 | 6 | # If the server isn't running, start it. 7 | try: 8 | urlopen('http://localhost:8888/') # Check for server. 9 | print 'Server already running!' 10 | except URLError: 11 | os.chdir('/') 12 | servProc = subprocess.Popen('/usr/local/bin/ipython notebook --no-browser --port-retries=0', shell=True) # Start server here. 13 | 14 | # For testing: 15 | #inPath = "/Users/dpinney/Desktop/laterbase/ipythonNotebookServer/HAX.ipynb" 16 | # Open all the files. 17 | 18 | # Shut down the server when quitting. 19 | def serverQuit(): servProc.kill() 20 | atexit.register(serverQuit) 21 | 22 | # Wait for the process to finish: 23 | servProc.wait() -------------------------------------------------------------------------------- /iPythonNotebook.app/Contents/Resources/script: -------------------------------------------------------------------------------- 1 | ''' Open documents in the filesystem with the local iPython notebook server. ''' 2 | 3 | import os, sys, webbrowser, subprocess, time, atexit 4 | from urllib2 import urlopen, URLError 5 | 6 | # If the server isn't running, start it. 7 | try: 8 | urlopen('http://localhost:8888/') # Check for server. 9 | except URLError: 10 | subprocess.Popen('/usr/bin/open ./iPythonNotebookServer.app', shell=True) 11 | time.sleep(2) 12 | 13 | # For testing: 14 | # inPath = "/Users/dpinney/Desktop/laterbase/ipythonNotebookServer/HAX.ipynb" 15 | 16 | # Open all the files. 17 | if len(sys.argv) > 1: 18 | for inPath in sys.argv[1:]: 19 | webbrowser.open('http://localhost:8888/notebooks' + inPath) 20 | else: 21 | webbrowser.open('http://localhost:8888/tree#running') -------------------------------------------------------------------------------- /ipythonNotebook.py: -------------------------------------------------------------------------------- 1 | ''' Open documents in the filesystem with the local iPython notebook server. ''' 2 | 3 | import os, sys, webbrowser, subprocess, time, atexit 4 | from urllib2 import urlopen, URLError 5 | 6 | # If the server isn't running, start it. 7 | try: 8 | urlopen('http://localhost:8888/') # Check for server. 9 | except URLError: 10 | subprocess.Popen('/usr/bin/open ./iPythonNotebookServer.app', shell=True) 11 | time.sleep(2) 12 | 13 | # For testing: 14 | # inPath = "/Users/dpinney/Desktop/laterbase/ipythonNotebookServer/HAX.ipynb" 15 | 16 | # Open all the files. 17 | if len(sys.argv) > 1: 18 | for inPath in sys.argv[1:]: 19 | webbrowser.open('http://localhost:8888/notebooks' + inPath) 20 | else: 21 | webbrowser.open('http://localhost:8888/tree#running') -------------------------------------------------------------------------------- /ipythonNotebookServer.py: -------------------------------------------------------------------------------- 1 | ''' Front end to the iPython notebook server. ''' 2 | 3 | import os, sys, webbrowser, subprocess, time, atexit 4 | from urllib2 import urlopen, URLError 5 | 6 | # If the server isn't running, start it. 7 | try: 8 | urlopen('http://localhost:8888/') # Check for server. 9 | print 'Server already running!' 10 | except URLError: 11 | os.chdir('/') 12 | servProc = subprocess.Popen('/usr/local/bin/ipython notebook --no-browser --port-retries=0', shell=True) # Start server here. 13 | 14 | # For testing: 15 | #inPath = "/Users/dpinney/Desktop/laterbase/ipythonNotebookServer/HAX.ipynb" 16 | # Open all the files. 17 | 18 | # Shut down the server when quitting. 19 | def serverQuit(): servProc.kill() 20 | atexit.register(serverQuit) 21 | 22 | # Wait for the process to finish: 23 | servProc.wait() -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ### iPythonNotebook.app Features 2 | 3 | This is a tiny Mac OS X app that will run an iPython notebook server for you. And shut it down when you quit it. 4 | 5 | The app opens .ipynb files by default when you double click them in the Finder. Bonus! 6 | 7 | ### Installation Instructions 8 | 9 | 1. Make sure you have iPython. If you don't, install the excellent [brew package manager](http://brew.sh) and then run ```brew install python; pip install ipython[notebook]``` in Terminal.app. 10 | 2. Download the [iPythonNotebook.app](https://github.com/dpinney/iPythonNotebookServer/releases/download/1.0.1/iPythonNotebook.app.zip), put it wherever you want. 11 | 12 | ### Obligatory Screenshot 13 | 14 | ![Obligatory Screenshot](https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/master/v1.0.0%20screenshot.png) 15 | 16 | ### Developer Build Instructions 17 | 18 | 1. Install [iPython](http://ipython.org), [Platypus.app](http://www.sveinbjorn.org/platypus), and [Platypus's command line tool](http://www.sveinbjorn.org/files/manpages/PlatypusDocumentation.html#45). 19 | 2. Run the build.sh script. 20 | 21 | ### Credits 22 | 23 | Sveinbjorn Thordarson's [Platypus.app](http://www.sveinbjorn.org/platypus) made quick work of generating the .app. 24 | 25 | WasteOfAMan built a beautiful iPyNotebook App in his [Faneza Extra Icons](http://wasteofaman.deviantart.com/art/Faneza-extra-icons-539097199) collection. 26 | 27 | And of course none of this would work without [iPython](http://ipython.org). 28 | -------------------------------------------------------------------------------- /test.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 3, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "x = [1,2,3]" 12 | ] 13 | }, 14 | { 15 | "cell_type": "code", 16 | "execution_count": 4, 17 | "metadata": { 18 | "collapsed": false 19 | }, 20 | "outputs": [ 21 | { 22 | "data": { 23 | "text/plain": [ 24 | "6" 25 | ] 26 | }, 27 | "execution_count": 4, 28 | "metadata": {}, 29 | "output_type": "execute_result" 30 | } 31 | ], 32 | "source": [ 33 | "sum(x)" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 5, 39 | "metadata": { 40 | "collapsed": true 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "from matplotlib import pyplot as plt" 45 | ] 46 | }, 47 | { 48 | "cell_type": "code", 49 | "execution_count": 6, 50 | "metadata": { 51 | "collapsed": false 52 | }, 53 | "outputs": [], 54 | "source": [ 55 | "%matplotlib inline" 56 | ] 57 | }, 58 | { 59 | "cell_type": "code", 60 | "execution_count": 7, 61 | "metadata": { 62 | "collapsed": false 63 | }, 64 | "outputs": [ 65 | { 66 | "data": { 67 | "text/plain": [ 68 | "[]" 69 | ] 70 | }, 71 | "execution_count": 7, 72 | "metadata": {}, 73 | "output_type": "execute_result" 74 | }, 75 | { 76 | "data": { 77 | "image/png": "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\n", 78 | "text/plain": [ 79 | "" 80 | ] 81 | }, 82 | "metadata": {}, 83 | "output_type": "display_data" 84 | } 85 | ], 86 | "source": [ 87 | "plt.plot([1,2,3,4,5])" 88 | ] 89 | }, 90 | { 91 | "cell_type": "code", 92 | "execution_count": null, 93 | "metadata": { 94 | "collapsed": true 95 | }, 96 | "outputs": [], 97 | "source": [] 98 | } 99 | ], 100 | "metadata": { 101 | "kernelspec": { 102 | "display_name": "Python 2", 103 | "language": "python", 104 | "name": "python2" 105 | }, 106 | "language_info": { 107 | "codemirror_mode": { 108 | "name": "ipython", 109 | "version": 2 110 | }, 111 | "file_extension": ".py", 112 | "mimetype": "text/x-python", 113 | "name": "python", 114 | "nbconvert_exporter": "python", 115 | "pygments_lexer": "ipython2", 116 | "version": "2.7.10" 117 | } 118 | }, 119 | "nbformat": 4, 120 | "nbformat_minor": 0 121 | } 122 | -------------------------------------------------------------------------------- /todo.txt: -------------------------------------------------------------------------------- 1 | XXX Version 1.0. 2 | XXX Write down the build process? Create the server with Platypus. Then create the notebook app. Put the server app inside the resources folder of the notebook app. Done. 3 | XXX Use a custom port instead of the ipython default 8888? No. No use case for changing it. 4 | OOO Real icon. 5 | XXX Good one? How about this CC-licensed one? http://wasteofaman.deviantart.com/art/Faneza-extra-icons-539097199 6 | XXX How to make an icns? Made a script for it. 7 | XXX Credits? Added to readme.md. 8 | XXX Manual icon application. 9 | OOO What about document icon? 10 | XXX Make a script, build.sh. Add instructions to readme. 11 | OOO QuickLook plugin. 12 | OOO Contact other projects in this space: https://github.com/liyanage/ipython-notebook, http://kronosnotebook.com, https://github.com/ihrke/IPythonQL, http://ipython.org 13 | OOO Build this as a real Mac application instead of a Platypus one. -------------------------------------------------------------------------------- /v1.0.0 screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dpinney/iPythonNotebookServer/fde976e88d3898f35764ff935baf435b8fc91448/v1.0.0 screenshot.png --------------------------------------------------------------------------------