From 0542e022bdd7b3d4cff8f1db00055fa8a32e8e75 Mon Sep 17 00:00:00 2001 From: Aaron Gutierrez Date: Tue, 5 May 2015 10:21:07 -0400 Subject: [PATCH] Bare final report --- final/approach.txt | 7 +++ final/benefits.txt | 11 ++++ final/evaluation-criteria.txt | 4 ++ final/final.out | 5 ++ final/final.pdf | Bin 0 -> 34822 bytes final/final.tex | 89 +++++++++++++++++++++++++++++++++ final/gantt.jpg | Bin 0 -> 48851 bytes final/intro.txt | 17 +++++++ final/letter.pdf | Bin 0 -> 18362 bytes final/letter.tex | 42 ++++++++++++++++ final/literature-review.txt | 42 ++++++++++++++++ final/plan.txt | 12 +++++ final/proposal.tex.project.vim | 26 ++++++++++ final/qualifications.txt | 6 +++ final/sources.txt | 0 15 files changed, 261 insertions(+) create mode 100644 final/approach.txt create mode 100644 final/benefits.txt create mode 100644 final/evaluation-criteria.txt create mode 100644 final/final.out create mode 100644 final/final.pdf create mode 100755 final/final.tex create mode 100644 final/gantt.jpg create mode 100644 final/intro.txt create mode 100755 final/letter.pdf create mode 100755 final/letter.tex create mode 100644 final/literature-review.txt create mode 100644 final/plan.txt create mode 100644 final/proposal.tex.project.vim create mode 100644 final/qualifications.txt create mode 100644 final/sources.txt diff --git a/final/approach.txt b/final/approach.txt new file mode 100644 index 0000000..2dbef9a --- /dev/null +++ b/final/approach.txt @@ -0,0 +1,7 @@ +Approach + The approach section contains our methodology, how we plan to implement the project, and our project schedule, the timeline we plan to adhere to. The methodology outlines the specific tools we will use to complete the project in a timely manner whereas the schedule outlines the deadlines by which we hope to have certain tasks completed. + +Methodology + C$_0$ Cement is a Debugger designed for the CMU teaching language, C$_0$. It will be hosted on with the website itself designed in CSS and HTML, using Node.js to run most of the core functionality. We will first deploy a blank template website after which half of the team wil work on parsing C0 bytecode and the other half will work on creating a meaningful user experience. Once both teams have made reasonable progress, they will combine the two units to complete the basic outline of the project. +Project Schedule +The project will be separated into five main phases: Basic Website Design, Backend implementation, Frontend Implementation, User Testing, and Revisions. The first phase should take less than a week with the next two phases occurring simultaneously and composing the rest of the month's work. User implementation and revisions will then hopefully take up the remainder of the alloted time, with extra time padded in case implementation or revisions are more extensive than we have predicted. \ No newline at end of file diff --git a/final/benefits.txt b/final/benefits.txt new file mode 100644 index 0000000..4c47d62 --- /dev/null +++ b/final/benefits.txt @@ -0,0 +1,11 @@ +This project will benefit students in 15-122 Principals of Imperative +Computation at Carnegie Mellon University by helping them create correct +programs. The C0 Debugger will enable students to understand how their programs +execute and find where problems originate more easily than with existing tools. +In addition to debugging, students will have better knowledge for how the +underlying computation model works when evaluating their code. + +The C0 Debugger will also enable students to test simple programs with little +setup, using only a web browser. They will no longer have to set up and become +familiar with a Unix environment before they can program, making C0 accessible +to more people. diff --git a/final/evaluation-criteria.txt b/final/evaluation-criteria.txt new file mode 100644 index 0000000..37207c4 --- /dev/null +++ b/final/evaluation-criteria.txt @@ -0,0 +1,4 @@ +Evaluation Criteria + The goal of our website, as mentioned earlier in the proposal, is to provide a tool for 15-122 students to easily step through their C$_0$ code as a means of debugging and to gain a deeper level of understanding for the steps their code is actually taking. + In order to evaluate our final project, we would test the product on various groups of students. Both those who have completed 15-122 in the past and those currently enrolled. Unfortunately, due to the time constraints of the project, these students will no longer actively code in C$_0$ by the time they see our product, but their interactions with it will still have been recent enough for them to provide meaningful feedback. With their feedback, we will determine how well our product succeeds at its aforementioned objectives and plan a series of modifications based on the comments we receive. We will make sure that the stepping tool and GUI are fully functional before the group testing phase so that uninformative bugs do not catch the attention of our test subjects, and they instead provide us with information to improve the user experience as a whole. + Our main goal is to provide these students with a useful debugging tool, so their feedback is invaluable in slowly modifying our project to better suit their needs. \ No newline at end of file diff --git a/final/final.out b/final/final.out new file mode 100644 index 0000000..c4b6dce --- /dev/null +++ b/final/final.out @@ -0,0 +1,5 @@ +\BOOKMARK [1][-]{section.1}{Introduction}{}% 1 +\BOOKMARK [1][-]{section.2}{Approach}{}% 2 +\BOOKMARK [1][-]{section.3}{Results}{}% 3 +\BOOKMARK [1][-]{section.4}{Discussion}{}% 4 +\BOOKMARK [1][-]{section.5}{Sources Cited}{}% 5 diff --git a/final/final.pdf b/final/final.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f2f20e77a5955c3e3ce9769689c489c2164788ee GIT binary patch literal 34822 zcma%i1F-18mhG`^+qP}n<~_D`k8RtwZQHhSk8S+>X68-J{5MrIsZ^>vNvC&KW$(4K zYc;8Yh!`y+9V-;++|uwG6cZ-_1A(29B@_=26upe8t(mhq0UIm9e{4|nViwlUrj7*k zV%CPvrXr@sb|$7!e0)$&&W@&rHc;*x%qk23Lc*ZBz`Vl9$PA{2C2?7ks$-^QW(EcZ zMsSLLLm?7EPlBM2yiT$xI`{2B{&NC^xD;n{abN&d$LMxYrnV;k@vOhCf7rpq{$C7I z@vt`~px2N$vNSbzhN4$?F>?O5Gh%j*Hh*pVd;GUM7@_DDR75rC{u*m4XJ}(eKtV@u zZR-5ja5{UFUzGoGRl(5ARL;f5=rEv10yjzTj#%xzlgA~5iqm;V;I3-KH;2K(Auz?o6Qj53K$PD+d$X|Bh$1>bUJD148#HwRa`RP=)I_C#x(r0WAzjn4Jwg z%dmzurP8s|s_$-oNCWQRsGjw#eG0oB-k;da%$Hcx?y&`vK8 znfu`qZSTm6rm;g)z2bS}EY6RI8*{wbvcGVVZRX^MmH;BgbBnve&`JgMQ6bFR95My3*UojOPXO>2 zF8alHZzu5Pu4`ROgVU_J8egFAWkVTc5vx@ExV zMcDWV(FiI@g-jriP^QQq3is?0U>Rk@_1XX8SR2igD)tSQ@i>OV;^otg`1i(y2}pC ztmt3lBMzjEds9*(rOn@mbR~=h!G0D6Gq?brD!^1y9`q6iPpz9F{I1d@72O#?aY<;A zbqrSG?b@1*VX6EQ^cP?Tg3f}eHr|| z-ZmC1tRhg=tvB}tVInu3E{r${TJdPQDd;^AXANhRWR^Ruz2~vY{OtZgDmF(e&WcZ9 zR@sJMfZXM6c;B!AH0dWOQ}@g(YlO`lUzATh^w38KE#9HktpGtAb*^(U0jd)0h*xkhZ>xps1vFyfRpWd&23*jeqBpCVx6C zwEb$(Ljfn6Z2L zmqao;d$w{5?hyuq7v8X>%nlon{rM%>jwynbS?@$mr-3aeaaMii{+n+$fvHF0THsuw zGwQQch-LtbdQgun)e@9(adbnPR1UH$vx@vd02xmcb755Pa#{pR4ehGv7Jk%nL9<=0 z3~+|aAM}7lqiqe)*CWixSQ$t*xXcj1(_%w`pN+cRt#JklQ=AndFZgg4Q0w>%Ef+jfg!emt zfn0gB^8KK$cS!#)4S$1Z(h@oiq2+xw>q-l8!>EVc2P!;Llk2gCZH`%}y}i(kTc11y z-}J@i@w}f6leixh+h`opJlkF3B_?`z&V8&yg6dsRyNcxGvda(PD%Wchg|03TC)FPX z+~+CK4m!H6VCImN_qMh#YIPpJxB(p{?$StyxnvqPbmL>l;NL1ZcU+?G?$Z3cQib7@ zv-LnCBe-7y;4%ROFs&cwW|*&OJkR_`!Fb#j!C0nacRUAI9X6OH;2+#obMK1{AT`Ms zghOl`70b7ykfVdMz5GHbyVD78x#%EY$EDw+-`Dy>t%$z=>cp%}|LVj{oGkz6^yF%V zS2>6Q0c?pWP4HjFMyAPN7JsuXW8o-Lma&`OWY9eL7o2r^?#%_|6fwb$nk$i-6obFK7av1 z+>LKI`bwZ%Pdk48XI`-r6I@wA5(WW!SHI74iDUcz`s*Hn&aWTTYZTU@3*Z-$``WsQ=2@cex|ck3xq zRbCC$HTC0p<<*x9H%@e4_u}iu93frcs?rt1x&4$8)8wIGyz%=md$XBH0)?`q!H$#^ zloZOySRs$8_Fy)*I2tdSTTN_$E=pb;Di$~?%_a@)EuxnEk|M@4QQXO+W3+{2?NurlX-@VSr$R)(o7MC#K$v-51@$cRT@AwgImKz+Ke9vAb=P|h&@00--xEZ zd4!AFpNW7D)q~))WaAF)2>|qipg@QTGiLQ?xbFbN69Q~{Mu-n-mo%Fvq0GzrL2f%! z=4lgw&_#hlUh9tB?Sx&Wm?;T)gQg0*p}ZbHyS)L+O8$$>X?pfpTt1#H?HKyzlb% zo+e}Gplsg*0_wk2=&Nr4V~`xEhk>ZGFaa&H_M2ZJ1xTK2Y?yKgD5&+LHKM``LLf0V z5?o>PJLVCTC6dcjgv@MbAE0?>zhabwx+2*?4>{slT4Vgyaz9I$`~QU=r%-2 z&I1y2BPX<%fTWi$_trjO;SYIpi@X>1P~GV9dsm^h9M3*nV91#uY>lC?MNne7QG@HP zG%)ir+wxvawbLfWwu&L)9dqRuqikE^KY?SCXX(MNfD}b13eq#rl$F~so>ou4Kq~_W zr2@sedAa$l8!TBl`17{2h+iop&%V|T5KrK%GDzUXmwcV1{v_le@7Hg{xr|b$NGu!) z!$a|WcWd)emS$x9Ixl?s=HC*{U450wc2!1_whY;^0grNz6il598_hmpCFie2D}NkM zzQMQ5XvcO??DYg%WC{H;ws%Lto>OWpDXxHPHG6z~mkK3AP3=EdY?m)q|1#;6YpR2*le~l0Y`nr1U3gWXx}?LSi`>R`cmhNB!hscYHlz z4UCZ%#C7jC%C{En=Pw|qd7JePRn2jDR;IK{X)UBhv3|jiB0MSXj?l44Y<2z)*-5IK zl)`iRl5_kPoa?!ICo{mfEln*BEp@kjAiKFqhbht*=k+U@9Au=c!SJBlB^xRU+d5t0>pB%aje7DsP-1IuTj?0gKb-2RVtQ)CjmZ*(>%5TkAy10;L zp@4tA7oAuVHmja9@^G+U?(_4O+WtW)^!i>^~Fo+?w6vmx7WCiQ+4|@9Tt=-EE=OUxl>+K zB5_b~V6rYi9*iS{8*n8zCk6K%bpr(;t)L$}H#`$;bP)9%43MK^5=$TeC;*p$v>(YF zP~SM@-rnh{cnP2c2d7tiK$Q&vfG4dBE*KfviLcf-6kwXySLrD&GE9Rj$Xt(48}LImp^sd9h^USOs!9C5eM^}xdgYIN1BZUl{C{Zgzkk9%YO%grr9XeXa(_^@ zHl}y<)~EJu0Ke}>0Cw;&nZ^4yxq%fxKA+~=I6w6%f58!W)&8h2^om^o{Pe4Bjqlv+ z`#2&rw#J8XYW0o}%uIa46GPCz-h*gW1Q4LH0Z=o4w0eBmtU5M;LJMd}8-t6IBKEagiGuh8yKFxbA8!?xO-^$_=YF_0Xuj-)f|U8fVv04=z5x- zxpRB@x%)UBKhrlT!lBKg`O(6L4NEUP-Yoe_-KTF2&aAx1?DN(CZms!w_y1cU5?T5z_@Cz{g(C|uoe|LzwrBF$eSxub<1z@)O2-c z6H8f{oz7E;Alv-dQIx0C7$VPc7QQdP$L05pS-cW<>}H4}e6Xsn{bT0yL;p6d?(XfL zfbS`&_X{1PvMUeLv^cYO?-6kXJp#S*>IGLM`YX5_pBY89A-kE+8!6<9$Ye;0Gil|G zRn#}8b+^o}i)QOd1(jVbPEta1V3g4iu5BdA@>T`hFG~}hy^Qzw6N&tDqyPjY+DKRc19{=#P`5R<_jrU7B-NA*fi)zG#ehtA*o`2P@_s3& z4hzpKz2|z`>UCA!P>8*BAjl0dJHm-mXmZp{*>SxRh0*|%oPjd7Yxu=M5|deTOIhNW zZ`JDV0ATnC^?cZ!6fA@?ckIrGFE#t7!gl`V&|u0+PV!1h@Z-NUI~`0dF$rU(wy5$v zs*bkwsWSxi{B4CWuSmYA6cG-LQp?kyJWbtRTyum1`Hp8uVm+mizIMt$lZ-w55=I zqD*O5QGlESrTy&mAstko7WLc-*(zf|)$$V>{)n zZ^vcIHtG%%1tBrEY0MHoSLl^89o!LZ1~Dw}jg~owPO_93590Kkb=?YA?CV`8#tQ_U z*%yQ^9>;9%wnJadAch+#13Yj;z!SlH3CuF@uf8TFAVK{X{FYW<4KvDPdDTy5+Z zroH?;JzdSl3y?GJindGX38yJhM-C9%puDWBrDQ{R3qRl`Pg2^iaf<{z&AG*$57l7b zCq0oSspw>dtyaxpLRR26N&+dXs>V*YPw%uj|4q^-__v0T)iVnQZte731xZ!Tk*g8a zpoKsKDw8YTjr3}~;g7m>@qI>mWz^A4LwBnr#`~6UDwZ0d-Lf>KLLE)eQt?cffO&*^ zm?b#cf=G9`zY`MeX#%5J0>eI8-Olvm`Q4|~l zl+972JWj1MV1W{h#t`&2uzvrRiDLM@t`$oy!<3A;kw?`#b7*DdNH3C zY$sU_WgK#6BzdJ_S9-|pjpl}_PKvUij*)klUD_8ZQ9zN;3#KB0(_Y(Id;E&%bNX4> z_e+N~?duWO?a+L&MFcD!P5(>E&DcY2-1mg%Bnsb6w1CcE;l0cpGu2%UMv3z`|E^0a z@04RPlUhjF2yV1h==^_sHYu@EfTfQ}{}gZkv=tf~wvDuEXf0@SA@eVcwUP8IH%N-;QWl zvkIwrstix#KMgU#5~^QTZQ1jiKiVvw)2@V}q{Ug548U?yh(%D;C@s3*_1ee*;WwJzZpKz5g~vQ=y-B(r$CFwCP5A`SY0o7N-$nlQ}S$>RAEG6qO z@2y;&D<&$1<^ExG!P?zPl-3Pe3C}4$CLjVU1R9<nH2bX$4Hy?k#XQy_w>&BFAZ zk4{LKc@}5PUNu|H>}0 znV+1X$-#IiuS3A=`GbS5#p{W0bZ#z`2S}Po^QF0s63GWK$1ag2!Jw}J+B^}-+Sj5- zd4R7VLivWvA({6kg2sU=b_ZzJryy$O&0<_x5$8>srS+9YI~oL$ToO4V{E~2*5zEWLLpihbDODBVw<2u z+4yw(8O7{LVcP18UEr4}_%WG*yvf{QEKF_#pVE^s#4g9rIFQ-Z1~ZfAGlPAFG_jV!#x|ZAlMxp&f|Fn^J#gp zdvALJU1~Ju0^*sG)z&4}ktw0D4v~ci7t=|poI5a>3Xh5xn+yhrD5TXpol!dx2-w8c z9j=;cjG6A9Aa87{rQuj-!9m_&Id~x*iX&=(=~&d!bhR0;qOAPr96}3%GM7y)hNmfh znBL}LsASVwEVBC~n+9!MyJzh>L@to8mzJ$1LK26H%V-mPBhyJhazl_dVD4KEu-9yNCOhi*07*@`ds8}iy zmoxkORLVR+L&E-1c$&En8l+cDnhsBXlSsc|NC&oagb%B@nfPGk15%y&KAT)YokLX~ z2~;L=?Vci)FX-;{OFK$Z??6092V_**#p;!fOE01QL9x@HUoLn{e zh1^0HyTM_a%pyoqhlYy=yw=1Rrk9=Wax0k$W0e!lak~=$kLrQ6eBR-&$ZrLSA_qB; z4T@Ia4CU)kq^31_h}J=XzT_(f!&IFov61w07+wmq``dze39i6&{5JFUgYRK8ZY~(P zSR&|m>!w4krXuZZ{TTa;_2H`UAG-QJFi znI7&+;;C4;7{eTP!y<3=N}^$VPE2iFO_}k>5#ye{uXzt`I!i3J>n9s!2sn9k0@M04 zCd4SY4BW`(X+IdW;29%niG3bun-+_VSoii1m9Dxk144)UaiQ{*0*Ky}zvZuFL~$oN`T~;<;9~mle#r8&K<%Y1H}+@lXC3K7SZ{hT z3lVwEly1AMF^`XPXr`D#_PD0KTK{0-MY;C4!vBu=Ja>q-$Uz3Z$*eSwc&tZZ{cY6l z-@|ZI+CQGQKh8%(H1OaxnO__xE8aj!#&vW48XiMLL1(T994JQtI=}_z{1CPrJjF21 zf`zo5ICf$QHOf=$GGL)(bXmS0_AJ(*i_F$Z!|?1>ag884(=u?s2L}qqt1S$E(~Nlk z=!BXdanojM%_B!x9ndZ=yR8SpbL>(FKW*(l#v@_R+S}c|JbUcC(yLq-*eNQMl$^f^ z1xR#!^%+H9`tgj;kj%j$eOZof9mEmttuWe)>LFcVjitxl0-N>Chy>&DnwnIS~Wii9=jb5k{^9yYgq#;u9@(nY%nqTC7t=; zQLC^5;>h5sxD0tbK2w78dc-tyZV#TcY%t!zoG2k84uCy`?kgrcB8Uf!du9JfQZnJ{ zv-4jaRIBX$Atj7Xz4{-l#|Rgc@{ls{>}^jK8ZQFAKy+RI%m2N`!g5EtK~oYMOs;KuB-X z9p7v7&T.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

!wO`uh7Jz} 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 B=STnm literal 0 HcmV?d00001 diff --git a/final/final.tex b/final/final.tex new file mode 100755 index 0000000..1be59fa --- /dev/null +++ b/final/final.tex @@ -0,0 +1,89 @@ +\documentclass[11pt]{article} + +\usepackage{setspace} +\usepackage[margin=1in]{geometry} + +% Make table of contents look better +\usepackage{tabularx} +\usepackage{tocloft} +\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} + +\usepackage{graphicx} +\usepackage{pdfpages} +\usepackage{hyperref} + +% \usepackage[ngerman]{babel} +% \usepackage[T1]{fontenc} +% \usepackage[ansinew]{inputenc} +% \usepackage{lmodern} + +% Times New Roman font +\usepackage{txfonts} + +\begin{document} + +\setlength{\parindent}{2em} + +\includepdf[pages={1}]{letter.pdf} + +\begin{titlepage} +\clearpage +\thispagestyle{empty} + +\begin{center} +{\Huge Final Report}\\ +\vspace{10 mm} +{\Huge The {\tt C0} Debugger}\\ +\vspace{10 mm} + +Submitted to\\ +Mr. Thomas M. Keating\\ +Assistant Teaching Professor\\ +School of Computer Science\\ +Pittsbugh, PA 15289 + +\vspace{10 mm} + +Prepared by\\ +{\bf Aaron Gutierrez}\\ +{\bf Shyam Raghavan}\\ +Mitchell Plamann\\ +Suhaas Reddy + +\vspace{10 mm} + +School of Computer Science\\ +Carnegie Mellon University\\ +\today + +\vspace{10 mm} + +{\bf Abstract} +\end{center} +\par +This project is a proposal for C0 Debugger, a browser-based debugger for the +C0 programming language. +Students in Carnegie Mellon University's 15-122: Principles of Imperative +Computation and other classes learn to program in C0. +This project will allow students to better write C0 code by providing a +powerful and easy-to-use system for debugging their C0 programs. +This proposal goes over a detailed plan for how our team will create the C0 Debugger. +\end{titlepage} + +\pagenumbering{roman} +\tableofcontents +\newpage + +\pagenumbering{arabic} + +\section{Introduction} + +\section{Approach} + +\section{Results} + +\section{Discussion} + +\section{Sources Cited} + +\end{document} diff --git a/final/gantt.jpg b/final/gantt.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4c4a8fdebfd365a24bef81f8d9939cbdc3e04e1b GIT binary patch literal 48851 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 literal 0 HcmV?d00001 diff --git a/final/intro.txt b/final/intro.txt new file mode 100644 index 0000000..2ef0088 --- /dev/null +++ b/final/intro.txt @@ -0,0 +1,17 @@ +Introduction +=== + +One of Carnegie Mellon University's most widely attended class is 15-122, +Principles of Imperative Computation. 15-122 contains a capstone assignment +called the C0 Virtual Machine, which involves implementing a program that +allows the user to run arbitrary code in the language in which 15-122 is +taught, C0. The implementation of the virtual machine (C0VM) is not an easy +task - it involves higher level thinking and a deep understanding of the +abstractions associated with running arbitrary code. Because it is difficult, +the CDB (C0 Debugger) hopes to improve the learning process by making +visualization and interaction with a working implementation of the C0VM more +accessible to 15-122 students. This involves creating a working Javascript +version of the C0VM, implementing visualizers for relevant parts of the +assignment, and developing the interface for student-based interaction with +the application. With development time and effort, the CDB has the opportunity +to change the future of imperative computation education. diff --git a/final/letter.pdf b/final/letter.pdf new file mode 100755 index 0000000000000000000000000000000000000000..d9f756d0d5f3265004dd6265a969197166b4722f GIT binary patch literal 18362 zcma%i18`+c*KRaPCbn(cws~UPnm7|N`@?Cxi+ zUcL8T)m`WGL#iMmM$1UY3Pn0SKd=nNOu#^3XJ|>l!vjSxV`6LOWKO`r#76L+4-~za zg|(B30|C95wSkj~h>4M%u?Z9(AC#k$gNcC+l-p{h%82b6148E!wP!h4f0@e&C#x(r z0WAzzh@A~Q%YeEyCEx(C` zyJUg-t8eDNDi^4k#ZJntr*$d){7zB3@#h)1##l7z6PP7ez6{Dr;_ECK-;jxO2e82> zi#oZHGDtPFj8@|ddYvl*=JUcH*WH`Knd*4ikCDfT+^;A34*dI=m^$t*dViNJl)xam zy_T`GeP7k8>kl|=>=4soL%xP|+cRn%&XE*U2axs9I3$KRd;!y^);e^|Y+ zrHDWWiiIxJL%szY4_l8)oArL?Z~03K~Toq)d|E6Ykn3z%tB)>-k~Iu{@L`Rp=8a^YZ`>i|+?x zDW((rhYyn_ED*&kQJOh$vxDlj1^njqhngtRMSMR_@S88b0O*!v$DlqD-tbNzq&9;^ zwD>S`6I}k=q&RzWl4J*yzD;Tdi@^lz%)}Zu?W4%iLDxY=?#~6nk|F7ULB0~pslXIb zuwtKg2*fCL7sVA0DTD52^jYq#FBg#?{6GVdx(iE67<)O|Jt7@NeOp2$=aIrK-{e4b zhTz7>4R107(#w9&@ev2m#=HOkq_nv^-(3i!!LT1i!S&BT$MY}&N_`&U5Xm)@gr5}} zq@tU>D9&+BvTm6>d<+x)zlXLa9aRxDg2kOCXfIaA&zaeJ`O}pKaNI^1@Uk52gW+wa zPa4IIN%qDEZhl_Vqt17}bhN%eu>OYYf-@C2w4AN@$nJ-cbvag|0cZHAK!m6|4(|euo1BQB@+BeZh8d=J0m3%CjzZMF^Gr} z&?}p`IT7gm$@_nOu>Z#glol&18^Pbg$i_~<%*^~}bVdRuc8-7W-)n|{5G&hX-+%j9 zSXlmP`OEnm?f>oj*N%~cfq;qiKh`V^90aTk4F434KYi@~!~b9IKYf2j_?Q2;{_Fo= zoBvn+m-`R@kB`5R{w;sw|`Q@2mLt1^oL&{(Uk2vl1}=d9KV1|E>#61dJ@q zjLiRD{&~3nLIOrsMpov3mW=<86{E$-sZghx3`bSjU|_x0X00g`SH*g*=`T>Gk{l>q zcDX(Hxy9$@o>BcK|MXHj)UwpiYCpj`gq5D4AegE;-MOdn4ADz0M{G@0T>H3B?TxVBO{}x0LVa# z+Z6(u*^wM5uq=*?l$CYDN9vOi7^C$o_;74)rgt1%;PGJxq@k{{9(5iKf8Zwm-o+&48KH*!u5 zKEoOqjcrhMlI)A*nv}iqLrus9u1ODVQLl}j;hUB?xwsJoG&gyVn({ZqTA!m6W833< zd28`-de)xB`?1;n#pRdmxX;2j|Cd=VOwDBukPKg2xvzdE5D*y}oQn#Wjc!99zZFjP zcWPKOacJ!NuW?`SZ6FqACx%)OE-vrio(5lYnO_yi*WJo?=4NIGpY(QXJ{liWI5ZhJ zeyT-IH4!p;jFFjLhUps1J+oiT)NyP@O+aEnK4Y>O7oWmMAWqL}0TiF9n4{GsFtXM* z73;uc0!r%coLa@zF+gEo+({>&ZxWw&InUjJ+h1tzUt7Z;)i@vY$=5=*?f2)V@ivemmXA z%Hy;VKCAD-AZOhw0@(3in!nL?zDBckg*8Q#L=s

h-@&O0HQU<)|)Q^jbfnEsbqt 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 CA+Ue| literal 0 HcmV?d00001 diff --git a/final/letter.tex b/final/letter.tex new file mode 100755 index 0000000..c4ffedc --- /dev/null +++ b/final/letter.tex @@ -0,0 +1,42 @@ +\documentclass[11pt]{letter} + +\usepackage{setspace} +\usepackage[margin=1in]{geometry} + +\usepackage{txfonts} + +\signature{Mitchell Plamann} +\address{5032 Forbes Ave \\ SMC 4275 \\ Pittsburgh, PA 15289} + + +\begin{document} + +\begin{letter}{Mr. Thomas M. Keating \\ + Assistant Teaching Professor \\ + School of Computer Science \\ + Pittsburgh, PA 15289} + +\opening{Dear Mr. Keating:} + +Included with this letter is our team's proposal for a browser-based debugger +for the c0 language called cdb. % Is this what we are calling it? +The purpose of the proposal is to define the need for the debugger and explain +our plan of approach. + +The proposal includes the problem addressed by our program, +explanations of prior literature and work on similar projects, +an outline of our plan for designing and implementing the program, +the intended benefits of our program, +our planned approach, +how we will evaluate our success, +and our qualifications. + +If you have any further questions or comments, please contact us at +mplamann@andrew.cmu.edu. + +\closing{Sincerely,} + +\encl{project proposal paper for cdb} + +\end{letter} +\end{document} \ No newline at end of file diff --git a/final/literature-review.txt b/final/literature-review.txt new file mode 100644 index 0000000..e819d65 --- /dev/null +++ b/final/literature-review.txt @@ -0,0 +1,42 @@ +* Building an In-Browser JavaScript VM and Debugger Using Generators +http://amasad.me/2014/01/06/building-an-in-browser-javascript-vm-and-debugger-using-generators/ + +In this blog post, Amjad Masad describes how he implemented debug.js, a JavaScript debugger running +inside the web browser. Since we wish to implement a c0 debugger running inside the web +browser, Masad's notes seem to be relevant. +Specifically, this post discusses the architecture of debug.js, as well as various challenges Masad faced +in developing it. +Debug.js was designed in two separate parts: a virtual machine and a debugger. The virtual machine handled +the task of evaluating the JavaScript program being debugged, adding support for stopping, starting, and +analyzing the program. The debugger was the visual interface to the virtual machine, allowing users to +control the virtual machine and see its output. + +Masad also discusses challenges he overcame while writing debug.js. These included being able to step line-by-line +through a program, keeping track of a call stack, handling errors and exceptions, implementing native APIs, and +dealing with events. While many of the details will be different when working with c0, we must still consider all +of these challenges in developing our project. + +* The Architecture of Open Source Applications (Volume 2): Processing.js +http://www.aosabook.org/en/pjs.html + +In Chapter 17 of Mike Kamermans' book The Architecture of Open Source Applications, +he discusses the design of Processing.js. Processing is a Java-based programming language +designed to help teach computer programming in a visual context. Processing.js is a project +designed to run Processing programs in the web browser using only JavaScript. +This was done by writing a own Java-to-JavaScript compiler, and running the resulting code attached to a HTML canvas. +Along the way, the developers ran into several different challenges, mostly due to differences between +the Java and JavaScript languages. +The largest difference between the languages was that JavaScript programs do not get their own thread; +the browser freezes if a JavaScript program tries to run for too long. +We must consider this issue among others for our project. + +* Node.js Documentation +http://nodejs.org/documentation/ + +This is the documentation for the node.js platform. +We plan to use node.js to write the server-side code for our project. +We believe that node is a good fit for our project since we are writing JavaScript for the client +side of our code, so this will let us work in the same language on the server and client side. +Also, we can make use of the existing cc0 compiler to translate c0 source code to the bytecode +our virtual machine will run. This is the same compiler used in 15-122, and integrating it +with our server will make it feasible to run actual c0 source code. diff --git a/final/plan.txt b/final/plan.txt new file mode 100644 index 0000000..95b462d --- /dev/null +++ b/final/plan.txt @@ -0,0 +1,12 @@ +Our goal is to build a web application that can debug c0 code. +The user will type in or upload c0 source files. +Once this is done, these files will be transferred to our server, where the cc0 compiler will be used to +generate bytecode corresponding to the user's source code. +This bytecode will be sent back to the user's web browser, where we will be running a c0 virtual machine. +The user will be able to control this virtual machine as it executes their code. +This will give the user the ability to run their code line-by-line, +to set breakpoints, view stack traces, and see the values of variables. +By providing access to all this information, we hope to make it easier for users to write and debug c0 programs. + +For version control, we will use a git repository hosted on GitHub. +We will use a Gantt chart, shown later in this proposal, to stay on schedule. diff --git a/final/proposal.tex.project.vim b/final/proposal.tex.project.vim new file mode 100644 index 0000000..1d422b8 --- /dev/null +++ b/final/proposal.tex.project.vim @@ -0,0 +1,26 @@ +" ATP project vim script: Tue Apr 14, 2015 at 02:43 PM -0400. + +let b:atp_MainFile = 'proposal.tex' +let g:atp_mapNn = 0 +let b:atp_autex = 1 +let b:atp_TexCompiler = 'pdflatex' +let b:atp_TexOptions = '-synctex=1' +let b:atp_TexFlavor = 'tex' +let b:atp_auruns = '1' +let b:atp_ReloadOnError = '1' +let b:atp_OutDir = '/Users/shyam/Dropbox/cdb/proposal' +let b:atp_OpenViewer = '1' +let b:atp_XpdfServer = 'proposal' +let b:atp_Viewer = 'okular' +let b:TreeOfFiles = {} +let b:ListOfFiles = [] +let b:TypeDict = {} +let b:LevelDict = {} +let b:atp_BibCompiler = 'bibtex' +let b:atp_StarEnvDefault = '' +let b:atp_StarMathEnvDefault = '' +let b:atp_updatetime_insert = 4000 +let b:atp_updatetime_normal = 2000 +let b:atp_LocalCommands = [] +let b:atp_LocalEnvironments = [] +let b:atp_LocalColors = [] diff --git a/final/qualifications.txt b/final/qualifications.txt new file mode 100644 index 0000000..137dd72 --- /dev/null +++ b/final/qualifications.txt @@ -0,0 +1,6 @@ +Qualifications of Team Members + We are a team of sophomore CS majors who have varied experience in the field. + Suhaas Reddy has had two years of programming experience. He has also served as a course assistant for the School of Computer Science for three semesters which gives him an understanding of what computer science students may need from a debugging tool. This spring Suhaas competed in his first Hackathon where he and a group of three other students worked to create a webapp which eliminated unwanted Craigslist postings from view using machine learning, and sorted the rest based on specific attributes. He is well-versed in Python, C$_0$, and C. + Shyam Raghavan has had seven years of programming experience. He has served as a teaching assistant for the School of Computer Science for two semesters, specifically for 15-122, which makes him especially prepared to create a teaching tool for C$_0$, the main language used in the course.. In the past, Shyam has interned at Thumbtack, a west coast company which specializes in enabling consumers to hire experience professionals from a variety of fields. Shyam has experience with C, JavaScript, and C$_0$. + Aaron Gutierrez has had ten years of programming experience. He has also served as a teaching assistant for the School of Computer Science for two semesters, specifically for 15-122 just like Shyam. Aaron is very well-versed in JavaScript, C, and C$_0$. + Mitchell Plamann has had years of programming experience. He is very experienced in creating projects designed to . Mitchell has coded extensively in , , and . diff --git a/final/sources.txt b/final/sources.txt new file mode 100644 index 0000000..e69de29