Commit cfef5065 authored by GI's avatar GI

Merge branch 'master' into bootstrap4

parents 3bb8b96b a6d18654
#! /usr/bin/python
#! /usr/bin/python3
import os, sys
pwd = os.path.dirname(os.path.realpath(__file__))
sys.path.insert( 1, os.path.join( pwd, 'ext' ) )
import staticjinja
from jinja2_markdown import MarkdownExtension
import re, optparse, shutil, ConfigParser, glob, subprocess
import re, optparse, shutil, configparser, glob, subprocess
from stat import *
from jinja2 import contextfunction, contextfilter
......@@ -15,20 +15,20 @@ import coloredlogs
# Callable python functions / filters
def jinja_search( s, pat ):
if type(s) == str or type(s) == unicode:
if type(s) == str:
return True if re.search( pat, s ) else False
elif type(s) == list:
return [ e for e in s if re.search( pat, e )]
def jinja_sub( s, pat, rep, count=0 ):
if type(s) == str or type(s) == unicode:
if type(s) == str:
return re.sub( pat, rep, s, count )
else:
return [ re.sub( pat, rep, e, count ) for e in s ]
def jinja_test( site, context, arg ):
print site.searchpath
print context['dirname']
print(site.searchpath)
print(context['dirname'])
return arg
def jinja_glob( site, context, pat ):
......@@ -76,7 +76,7 @@ def cleanup_outpath( site ):
sname = p.join( site.searchpath, rname )
try:
smode = os.stat(sname).st_mode
except OSError, e:
except OSError as e:
if e.errno == 2: continue # Source deleted
else: raise
if smode != os.stat(dname).st_mode:
......@@ -144,16 +144,16 @@ class Site( staticjinja.Site ):
For sym-links, copy it as a link.
"""
p = os.path
for f in files:
src = p.join(self.searchpath, f)
dst = p.join(self.outpath, f)
self._ensure_dir(f)
if not ( p.isfile(dst) or p.islink(dst) ) or \
( os.stat(src).st_mtime - os.stat(dst).st_mtime > 1e-4 ) \
for f in files:
src = p.join(self.searchpath, f)
dst = p.join(self.outpath, f)
self._ensure_dir(f)
if not ( p.isfile(dst) or p.islink(dst) ) or \
( os.stat(src).st_mtime - os.stat(dst).st_mtime > 1e-4 ) \
or \
( os.stat(src).st_ctime - os.stat(dst).st_ctime > 1e-4 ):
self.logger.info("Copying %s." % f)
#shutil.copyfile(src, dst)
( os.stat(src).st_ctime - os.stat(dst).st_ctime > 1e-4 ):
self.logger.info("Copying %s." % f)
#shutil.copyfile(src, dst)
if p.islink(src):
if p.islink(dst):
os.unlink(dst)
......@@ -183,32 +183,32 @@ class Site( staticjinja.Site ):
Overrides site.render_template. This version only renders templates if
the need rendering based on mtimes.
"""
if context is None:
context = self.get_context(template)
try:
rule = self.get_rule(template.name)
except ValueError:
self._ensure_dir(template.name)
filepath = self.needs_rendering( template, filepath )
if filepath:
self.logger.info("Rendering %s..." % template.name)
template.stream(**context).dump(filepath, self.encoding)
if context is None:
context = self.get_context(template)
try:
rule = self.get_rule(template.name)
except ValueError:
self._ensure_dir(template.name)
filepath = self.needs_rendering( template, filepath )
if filepath:
self.logger.info("Rendering %s..." % template.name)
template.stream(**context).dump(filepath, self.encoding)
shutil.copymode( template.filename, filepath )
else:
else:
rule(self, template, **context)
ignored_re = re.compile( r'\.(?:swp|un~)$', flags=re.I )
def is_ignored( self, f ):
return True if self.ignored_re.search( f ) else False
return True if self.ignored_re.search( f ) else False
partial_re = re.compile( '(?:^|/)_|\.j2$' )
def is_partial( self, f):
return True if self.partial_re.search( f ) else False
return True if self.partial_re.search( f ) else False
static_re = re.compile(
'(?:^|/)static/|\.(:?pdf|jpg|png|svg|eps|ps|txt|sty|mp4|webm|bst)$',
flags=re.I )
'(?:^|/)static/|\.(:?pdf|jpg|png|svg|eps|ps|txt|sty|mp4|webm|bst)$',
flags=re.I )
def is_static( self, f ):
if not self.is_ignored(f) and self.static_re.search( f ):
return True
......@@ -223,11 +223,11 @@ if __name__ == "__main__":
# Use -p for production. The global dev_env is set to 'local' or
# 'production' respectively.
parser.add_option( '-p', '--production', dest='production',
action='store_true', help='Generate site for production' )
action='store_true', help='Generate site for production' )
parser.add_option( '-f', '--force', dest='force',
action='store_true', help='Render even if source is unchanged' )
action='store_true', help='Render even if source is unchanged' )
parser.add_option( '-u', '--upload', dest='upload',
action='store_true', help='Upload after rendering (implies -p)' )
action='store_true', help='Upload after rendering (implies -p)' )
parser.add_option( '-w', '--watch', dest='watch',
action='store_true', help='Continuously watch for changes' )
......@@ -237,7 +237,7 @@ if __name__ == "__main__":
dev_env = 'production' if options.production else 'local'
# Read site configuration
cfg = ConfigParser.ConfigParser()
cfg = configparser.ConfigParser()
cfg.read( os.path.join( pwd, 'site.cfg' ) )
# Jinja2 globals
......@@ -261,18 +261,18 @@ if __name__ == "__main__":
env_globals.update( dict( cfg.items(dev_env) ) )
site = staticjinja.make_site(
searchpath=os.path.join( pwd, 'src' ),
outpath=os.path.join( pwd,
searchpath=os.path.join( pwd, 'src' ),
outpath=os.path.join( pwd,
'out-prod' if options.production else 'out'),
followlinks=False,
extensions=[MarkdownExtension],
contexts=[
('.*', mdconverter.get_name_vars),
extensions=[MarkdownExtension],
contexts=[
('.*', mdconverter.get_name_vars),
('.*\.md', lambda t: mdconverter.get_context( site, t) ),
],
rules=[
('.*\.md', mdconverter.render),
],
],
rules=[
('.*\.md', mdconverter.render),
],
filters={
'markdown': contextfilter( lambda c, s: \
site.md.mdconvert(c, s).html ),
......@@ -282,7 +282,7 @@ if __name__ == "__main__":
},
env_globals=env_globals,
mergecontexts=True,
)
)
# Type cast to my class
site.__class__ = Site
......
#! /usr/bin/python
import os, sys
pwd = os.path.dirname(os.path.realpath(__file__))
sys.path.insert( 1, os.path.join( pwd, 'ext' ) )
......@@ -125,7 +124,7 @@ class mdconverter:
r.toc = self.md.toc
r.Meta = self.md.Meta
for key in r.Meta.keys():
for key in list(r.Meta.keys()):
val = r.Meta[key]
if len( val ) == 1:
r.Meta[key] = val[0]
......@@ -148,7 +147,7 @@ class mdconverter:
real_fname = p.realpath( p.join( cdir, filename ) )
rel_name = p.relpath( real_fname, site.searchpath )
if not self.meta.has_key( rel_name ):
if rel_name not in self.meta:
# Read until the first blank line to get the meta-data
meta = ""
......@@ -163,7 +162,7 @@ class mdconverter:
self._md_meta.convert( meta )
self.meta[rel_name] = \
self._md_meta.Meta if hasattr( self._md_meta, 'Meta' ) else {}
for key in self.meta[rel_name].keys():
for key in list(self.meta[rel_name].keys()):
val = self.meta[rel_name][key]
if len( val ) == 1:
self.meta[rel_name][key] = val[0]
......@@ -176,7 +175,7 @@ class mdconverter:
"""
meta = self.read_yaml_meta( context, filename )
if key:
return meta[key] if meta.has_key(key) else None
return meta[key] if key in meta else None
else:
return meta
......@@ -232,7 +231,7 @@ def get_context( site, template):
context = get_name_vars( template )
context.update( site.md.read_yaml_meta( context, '/' + template.name ) )
if context.has_key( 'raw' ) and context['raw']:
if 'raw' in context and context['raw']:
# Don't render before passing to mdconvert
# This still doesn't work perfectly. Better to surround document with
# {% raw %} tags.
......@@ -255,4 +254,4 @@ def get_context( site, template):
return context
def slugify( s, sep='-' ):
return mdx_headerid.slugify( unicode(s), sep )
return mdx_headerid.slugify( str(s), sep )
teaching/2017-18/944-scalc-finance1
\ No newline at end of file
......@@ -16,10 +16,12 @@ Save the appropriate file in the same directory as your `tex` file and use it by
```
Replace `habbrv` with `halpha` or `halpha-abbrv` as appropriate.
Since some DOIs might contain evil special characters, I strongly recommend you use the `doi` package by adding the following to your preamble:
To make the links clickable, you need to use the `hyperref` package.
Also, since some DOIs might contain evil special characters, I strongly recommend you use the `doi` package by adding the following to your preamble.
```tex
\RequirePackage{doi}
\usepackage{hyperref}
```
That's it.
......
......@@ -17,6 +17,7 @@ ENTRY
{ address
author
booktitle
label
chapter
edition
editor
......@@ -41,7 +42,7 @@ ENTRY
year
}
{}
{ label extra.label sort.label }
{ cite.label extra.label sort.label }
INTEGERS { output.state before.all mid.sentence after.sentence after.block }
......@@ -93,7 +94,7 @@ FUNCTION {output.check}
FUNCTION {output.bibitem}
{ newline$
"\bibitem[" write$
label write$
cite.label write$
"]{" write$
cite$ write$
"}" write$
......@@ -1125,24 +1126,28 @@ FUNCTION {editor.key.organization.label}
}
FUNCTION {calc.label}
{ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
{ type$ "proceedings" =
'editor.key.organization.label
{ type$ "manual" =
'author.key.organization.label
'author.key.label
if$
}
{ label empty$
{ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
{ type$ "proceedings" =
'editor.key.organization.label
{ type$ "manual" =
'author.key.organization.label
'author.key.label
if$
}
if$
}
if$
duplicate$
year field.or.null purify$ #-1 #2 substring$
*
}
{ label duplicate$ }
if$
duplicate$
year field.or.null purify$ #-1 #2 substring$
*
'label :=
'cite.label :=
year field.or.null purify$ #-1 #4 substring$
*
sortify 'sort.label :=
......@@ -1311,10 +1316,10 @@ FUNCTION {reverse.pass}
{ "a" 'extra.label := }
'skip$
if$
label extra.label * 'label :=
label width$ longest.label.width >
{ label 'longest.label :=
label width$ 'longest.label.width :=
cite.label extra.label * 'cite.label :=
cite.label width$ longest.label.width >
{ cite.label 'longest.label :=
cite.label width$ 'longest.label.width :=
}
'skip$
if$
......
page: 20140303-kvm-macvtap.md
subject: problem with setting the private NAT not default
name: hakayova
email: ehakanduran@gmail.com
avatar: http://cdn.libravatar.org/avatar/c74cdfada12894308690438e17a54683
date: 2018-03-24 14:54:08 EDT
ip: 173.18.63.2
referer: http://www.math.cmu.edu/~gautam/sj/blog/20140303-kvm-macvtap.html
Thank you for a very useful and easy-to-understand, easy-to-follow guide. My only problem is with step 6, where we define private NAT to be not default for internet communication. I use Manjaro linux, which is Arch-based, and I don't have a /etc/dhcp/dhclient.conf file in the VM (nor in the host for that matter). I believe these settings can be made by issuing an ip route change or replace command, but I am not technologically savvy enough to compose this command. Additionally, I am not sure if those setting would be saved after rebooting the VM. Your input and help troubleshoot this step will be greatly appreciated.
I recently set up a Pi-Hole server in this VM and although I could get dmasq listen to the right interface (macvtap), I could not get it answer to the same interface, no matter how hard I tried. It would always answer to the private NAT for whatever reason. I eventually removed the private NAT interface from the VM via virt-manager to make it work. However, this effectively caused the loss of network communication between the host and VM as expected.
page: 20140303-kvm-macvtap.md
subject: Re: problem with setting the private NAT not default
name: GI
email: gautam@math.cmu.edu
avatar: http://cdn.libravatar.org/avatar/0ec534a31b72b69338d0897211ec9925
date: 2018-03-24 17:41:51 EDT
ip: 24.3.21.34
referer: http://www.math.cmu.edu/~gautam/sj/blog/20140303-kvm-macvtap.html
The `ip route` command you want is
ip route change default via x.x.x.1 dev eth0
Here `x.x.x.1` is the ip address of the gateway on eth0 (which I'm assuming is your public macvtap interface). Usually this is the IP address of the interface with the last digit replaced by 1.
This won't persist across reboots. My suggestion to get something permanent is to figure out what DHCP client your system is using and configure it to not set the default route on your NAT interface. A few other common clients are `dhcpcd`, `pump` and `udhcpc`. Try seeing if one of these is installed and running on your system, and then look up the appropriate configuration instructions.
page: 20140303-kvm-macvtap.md
subject: Re: problem with setting the private NAT not default
name: hakayova
email: ehakanduran@gmail.com
avatar: http://cdn.libravatar.org/avatar/c74cdfada12894308690438e17a54683
date: 2018-03-24 22:25:55 EDT
ip: 173.18.63.2
referer: http://www.math.cmu.edu/~gautam/sj/blog/20140303-kvm-macvtap.html
Thank you so much for your prompt reply. While preparing to tackle the problem, I first added the private NAT again to the VM via virt-manager. When I booted up the VM, I happily noticed that this interface (enp0s3) was no longer marked as default (previously, both interfaces were marked as default). That was it! Everything is working as intended right now. Thank you again for this wonderful guide!
page: 20140303-kvm-macvtap.md
subject: Re: problem with setting the private NAT not default
name: GI
email: gautam@math.cmu.edu
avatar: http://cdn.libravatar.org/avatar/0ec534a31b72b69338d0897211ec9925
date: 2018-03-25 09:13:15 EDT
ip: 24.3.21.34
referer: http://www.math.cmu.edu/~gautam/sj/blog/20140303-kvm-macvtap.html
On 2018-03-24, hakayova wrote:
> While preparing to tackle the problem, I first added the private NAT
> again to the VM via virt-manager. When I booted up the VM, I happily
> noticed that this interface (enp0s3) was no longer marked as default
> (previously, both interfaces were marked as default). That was it!
Be careful! If when your machine boots, your network interfaces are
initialized in a different order then it might stop working again. To
get it working consistently, you will likely have to find a way to bring
up your interfaces in the same order every boot. (I'm not sure how to do
this, but I'm sure it's possible...)
Good luck.
GI
page: 20140303-kvm-macvtap.md
subject: No host communication in *any* mode
name: Bryan
email: bmurdock@gmail.com
avatar: http://cdn.libravatar.org/avatar/319808c897bda0a1a5d40c648972d3d5
date: 2018-08-04 09:44:26 EDT
ip: 71.199.37.248
referer: http://www.math.cmu.edu/~gautam/sj/blog/20140303-kvm-macvtap.html
When you singled out VEPA mode I had hope that other macvtap modes, there is also bridge mode and private mode, might allow communication with the host. None of them allow communication with the host. With private mode not even a hairpin switch will allow communication with the host. With bridge mode guests on the same machine will be able to communicate with each other, but not with the host.
page: 20140810-android-ftp.md
subject: So confusing
name: Anonymous
email: unknown@email.id
avatar: http://cdn.libravatar.org/avatar/99daad327e93a79b9b1a785c70649146
date: 2018-04-16 20:43:45 EDT
ip: 121.212.170.149
referer: http://www.math.cmu.edu/~gautam/sj/blog/20140810-android-ftp.html
I know you mean well, and thanks for the article, but to give you an idea of how much you have left out, consider this:
I have spent two days trying to just figure out how to do this on various SSH apps from the Play store: "Create a new connection and enter your login information." And if I ever manage to do that, how does one then "generate an SSH key on your desktop"? How do you then "copy it over to your phone"? Where would you even put it on your phone? How do you "use it"? What the heck is a UNIX password?? etc etc
page: 20150324-bibtex-reverse.md
subject: THE BEST!
name: Tim
email: unknown@email.id
avatar: http://cdn.libravatar.org/avatar/99daad327e93a79b9b1a785c70649146
date: 2018-04-23 06:14:33 EDT
ip: 129.217.160.124
referer: http://www.math.cmu.edu/~gautam/sj/blog/20150324-bibtex-reverse.html
This bibstyle just saved my ~8 hours of work! Many thanks!
page: 20171114-bibtex-doi.md
subject: Thank you...
name: Annika
email: rivvyn@gmail.com
avatar: http://cdn.libravatar.org/avatar/4cad77d0e12e0a3a7000c21198e60d95
date: 2018-04-20 11:42:41 EDT
ip: 134.93.84.155
referer: http://www.math.cmu.edu/~gautam/sj/blog/20171114-bibtex-doi.html
...SO much for habbrv!
page: 20171114-bibtex-doi.md
subject: Thank yor
name: Anonymous
email: unknown@email.id
avatar: http://cdn.libravatar.org/avatar/99daad327e93a79b9b1a785c70649146
date: 2018-05-03 03:45:50 EDT
ip: 119.39.248.75
referer: http://www.math.cmu.edu/~gautam/sj/blog/20171114-bibtex-doi.html
Thanks for sharing!!! So nice!
page: 20171114-bibtex-doi.md
subject: Thank you!
name: Krzysztof
email: unknown@email.id
avatar: http://cdn.libravatar.org/avatar/99daad327e93a79b9b1a785c70649146
date: 2018-12-03 08:27:02 EST
ip: 156.17.7.2
referer: http://www.math.cmu.edu/~gautam/sj/blog/20171114-bibtex-doi.html
habbrv worked without problem.
page: 20171208-bibtex-custom-label.md
subject: Wrong link?
name: Anonymous
email: unknown@email.id
avatar: http://cdn.libravatar.org/avatar/99daad327e93a79b9b1a785c70649146
date: 2018-01-29 05:59:38 EST
ip: 137.226.12.101
referer: http://www.math.cmu.edu/~gautam/sj/blog/20171208-bibtex-custom-label
Thanks for your great work. As far as I can tell, the referenced BST file 20171114-bibtex-doi/halpha-abbrv.bst does not contain the necessary changes.
page: 20171208-bibtex-custom-label.md
subject: Re: Wrong link?
name: Gautam Iyer
email: gautam@math.cmu.edu
avatar: http://cdn.libravatar.org/avatar/0ec534a31b72b69338d0897211ec9925
date: 2018-01-29 15:03:46 EST
ip: 128.2.117.145
referer: http://www.math.cmu.edu/~gautam/sj/blog/20171208-bibtex-custom-label.html
Oops. You're right! I uploaded a new version now. Thanks for pointing it out.
page: 20171208-bibtex-custom-label.md
subject: great
name: Anonymous
email: unknown@email.id
avatar: http://cdn.libravatar.org/avatar/99daad327e93a79b9b1a785c70649146
date: 2018-10-10 06:05:12 EDT
ip: 130.83.116.25
referer: http://www.math.cmu.edu/~gautam/sj/blog/20171208-bibtex-custom-label.html
Thanks for the great work man! I used this on the german version of alpha, geralpha, and it worked like a charm.
Had been stuck on the problem of unusual reference labeling that my research institute requires for a while now, and this solved the problem in a few minutes.
{% set pubs = {
'denh' : {
'authors' : ['Y. Feng', 'G. Iyer'],
'title' : 'Dissipation Enhancement by Mixing',
'year' : 2018,
'com-journal' : 'Nonlinearity',
'com-sjournal' : 'Non',
'link' : '201811-denh.pdf',
'twoup' : '201811-denh-2up.pdf',
'tablet' : '201811-denh-tablet.pdf',
'tags' : ['pde', 'fluids'],
},
'fcomb' : {
'authors' : ['S. Cohn', 'G. Iyer', 'J. Nolen', 'R. L. Pego'],
'title' : 'Anomalous diffusion in one and two dimensional combs',
'year' : 2018,
'com-journal' : 'Ann. Appl. Probab.',
'com-sjournal' : 'AAP',
'link' : '201809-fcomb.pdf',
'twoup' : '201809-fcomb-2up.pdf',
'tablet' : '201809-fcomb-tablet.pdf',
'tags' : ['probability', 'pde', 'homogenization'],
},
'winding' : {
'authors' : ['X. Geng', 'G. Iyer'],
'title' : 'Long Time Asymptotics of Heat Kernels and Brownian Winding Numbers on Manifolds with Boundary',
'year' : 2018,
'com-journal' : 'Communications in Partial Differential Equations',
'com-sjournal' : 'Comm. Partial Differential Equations',
'link' : '201804-winding.pdf',
'twoup' : '201804-winding-2up.pdf',
'tablet' : '201804-winding-tablet.pdf',
'tags' : ['probability', 'pde'],
},
'dtc' : {
'authors' : ['G. Iyer', 'N. Leger', 'R. L. Pego'],
'title' : 'Coagulation and universal scaling limits for critical Galton-Watson processes',
'year' : 2016,
'year' : 2018,
'journal' : 'Advances in Applied Probability',
'sjournal' : 'Adv. in Appl. Probab.',
'link' : '201610-dtc.pdf',
'twoup' : '201610-dtc-2up.pdf',
'tablet' : '201610-dtc-tablet.pdf',
'tags' : ['probability', 'coagulation'],
'tags' : ['probability', 'coagulation', 'pde'],
},
'snuc' : {
......@@ -14,7 +52,8 @@
'title' : 'A model for vortex nucleation in the Ginzburg-Landau equations',
'journal' : 'Journal of Nonlinear Science',
'sjournal' : 'J. Nonlinear Sci.',
'year' : 2016,
'year' : 2017,
'jlink' : 'https://doi.org/10.1007/s00332-017-9391-4',
'link' : '201610-snuc.pdf',
'twoup' : '201610-snuc-2up.pdf',
'tablet' : '201610-snuc-tablet.pdf',
......@@ -116,7 +155,7 @@
'jlink' : 'http://projecteuclid.org/euclid.aoap/1424355128',
'link' : '201212-coagulation.pdf',
'twoup' : '201212-coagulation-2up.pdf',
'tags' : ['probability', 'coagulation'],
'tags' : ['probability', 'pde', 'coagulation'],
},
'extdyn' : {
......@@ -289,6 +328,9 @@
} -%}
{% set publist = (
pubs.denh,
pubs.fcomb,
pubs.winding,
pubs.dtc,
pubs.snuc,
pubs.fkinetic,
......
......@@ -75,7 +75,7 @@
<small>All findings my own and do not necessarily reflect the views of respective funding agencies.</small>
{% endmarkdown %}
<h2>Publications</h2>
<h2 id='publications'>Publications</h2>
{# <ul>{{ macros.pubs( p.publist[0:5] ) }}</ul> #}
{% set base_tags = [
......
teaching/2016-17/944-scalc-finance1
\ No newline at end of file
......@@ -15,23 +15,4 @@ require shib-attr affiliation Faculty@andrew.cmu.edu
#require shib-attr affiliation Staff@andrew.cmu.edu
#require shib-attr affiliation Member@andrew.cmu.edu
require user vansp@andrew.cmu.edu
require user xudanb@andrew.cmu.edu
require user cbeidema@andrew.cmu.edu
require user twbrown@andrew.cmu.edu
require user yuwenche@andrew.cmu.edu
require user sunghyuc@andrew.cmu.edu
require user bcobb@andrew.cmu.edu
require user lydiag@andrew.cmu.edu
require user nlovettg@andrew.cmu.edu
require user emcclave@andrew.cmu.edu
require user jspyo@andrew.cmu.edu
require user cschmid1@andrew.cmu.edu
require user xsong1@andrew.cmu.edu
require user mstjohn@andrew.cmu.edu
require user jvanbure@andrew.cmu.edu
require user cvaz@andrew.cmu.edu
require user dtv@andrew.cmu.edu
require user dianazho@andrew.cmu.edu
......@@ -15,36 +15,4 @@ require shib-attr affiliation Faculty@andrew.cmu.edu
#require shib-attr affiliation Staff@andrew.cmu.edu
#require shib-attr affiliation Member@andrew.cmu.edu
require user ahagerty@ANDREW.CMU.EDU
require user darshanc@andrew.cmu.edu
require user rishavd@andrew.cmu.edu
require user ninae@andrew.cmu.edu
require user wfan@andrew.cmu.edu
require user thammond@andrew.cmu.edu
require user ehaney@andrew.cmu.edu
require user szh@andrew.cmu.edu
require user sdkim1@andrew.cmu.edu
require user eli1@andrew.cmu.edu
require user wanshenl@andrew.cmu.edu
require user kaigel@andrew.cmu.edu
require user ruoyuanl@andrew.cmu.edu
require user tnayak@andrew.cmu.edu
require user bney@andrew.cmu.edu
require user enie@andrew.cmu.edu
require user borloski@andrew.cmu.edu
require user nrauen@andrew.cmu.edu
require user kruan@andrew.cmu.edu
require user wenzes@andrew.cmu.edu
require user jungjoos@andrew.cmu.edu
require user zsussman@andrew.cmu.edu
require user liliat@andrew.cmu.edu
require user ntarn@andrew.cmu.edu
require user nviggian@andrew.cmu.edu
require user jianminw@andrew.cmu.edu
require user pkwang@andrew.cmu.edu
require user yuepengy@andrew.cmu.edu
require user xiruoz@andrew.cmu.edu
require user azzheng@andrew.cmu.edu
require user jbz@andrew.cmu.edu
require user sunghyuc@andrew.cmu.edu
require user xudanb@andrew.cmu.edu
../../2016-17/269-vector-analysis
\ No newline at end of file
../944-scalc-finance1
\ No newline at end of file
* Very Brief Notes
* [[pdfs/ch1-limits.pdf|Limits]]
* [[pdfs/ch2-diff.pdf|Differentiation]]
* [[pdfs/ch3-inv.pdf|Inverse and Implicit Functions]]
* [[pdfs/ch4-int.pdf|Multiple integrals]]
* [[pdfs/ch5-lint.pdf|Line Integrals]]
* [[pdfs/ch6-sint.pdf|Surface Integrals]]
* [[pdfs/notes.pdf|All chapters]]
(and [TeX Source](https://gitlab.com/gi1242/cmu-math-268))
* [[pdfs/notes-tablet.pdf|Tablet friendly version]]
* [[pdfs/2012-notes.pdf|Lecture notes (2012)]]
(and [TeX Source](https://gitlab.com/gi1242/cmu-math-268))
* [[../../2015-16/268-multid-calc/pdfs/sample-questions.pdf|Sample Midterm 1 Questions]]
* 2015 [[../../2015-16/268-multid-calc/pdfs/midterm1.pdf|Midterm 1]] and [[auth/2015-midterm1-sol.pdf|Solutions]]
* Your [[pdfs/midterm1.pdf|Midterm 1]] and [[auth/midterm1-sol.pdf|Solutions]]
* [[../../2015-16/268-multid-calc/pdfs/sample-questions2.pdf|Sample Midterm 2 Questions]]
* 2015 [[../../2015-16/268-multid-calc/pdfs/midterm2.pdf|Midterm 2]] and [[auth/2015-midterm2-sol.pdf|Solutions]]
* Your [[pdfs/midterm2.pdf|Midterm 2]] and [[auth/midterm2-sol.pdf|Solutions]]
* [[../../2015-16/268-multid-calc/pdfs/sample-questions3.pdf|Sample integration Questions]]
* 2015 [[../../2015-16/268-multid-calc/pdfs/final.pdf|final]] and [[auth/2015-final-sol.pdf|Solutions]]
* Your [[pdfs/final.pdf|Final]] and [[auth/final-sol.pdf|Solutions]]
* [[../../2015-16/268-multid-calc/index.md|268 website from Fall 2015]]
* [[../../2016-17/269-vector-analysis/index.md|269 website from Spring 2016]]
{%- if glob('pdfs/hw.pdf') -%}
* [[pdfs/hw.pdf|Homework]]
{%- elif glob('pdfs/hw-page*.pdf') -%}
* [[{{glob('pdfs/hw-page*.pdf')[0]}}|Current Assignment]]
{%- if glob('pdfs/hw-prev.pdf') %}
* [[pdfs/hw-prev.pdf|Previous assignments]]
{%- endif %}
{%- else -%}
Homework and solutions will be posted here.
{%- endif -%}
{%- if glob('auth/sol*') %}
* [[sol.md]]
{%- endif %}
../../2015-16/268-multid-calc
\ No newline at end of file
{%- from get_file('course_info.j2') import course -%}
title: Lecture Schedule
breadcrumb: index.html|{{course.title}}
Here is a lecture by lecture list of topics covered in class.
## Functions of several variables <small>(Lectures 1 -- ?, 8/31 -- ?)</small>
*Reference: Kaplan, Chapter 2*
* Open sets and domains