<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GSoC 2019 PSF Blogs</title><link>https://blogs.python-gsoc.org</link><description>Updates on different contributor blogs of GSoC@PSF</description><atom:link href="https://blogs.python-gsoc.org/feed/?y=2019&amp;p=1" rel="self"></atom:link><language>en</language><lastBuildDate>Tue, 27 Aug 2019 01:17:48 +0000</lastBuildDate><link href="https://blogs.python-gsoc.org/feed/?y=2019&amp;p=1?y=2019&amp;p=1" rel="first"></link><link href="https://blogs.python-gsoc.org/feed/?y=2019&amp;p=1?y=2019&amp;p=32" rel="last"></link><link href="https://blogs.python-gsoc.org/feed/?y=2019&amp;p=1?y=2019&amp;p=2" rel="next"></link><item><title>Final week</title><link>https://blogs.python-gsoc.org/en/peterbell10s-blog/final-week-1/</link><description>&lt;h2&gt;What did you do this week?&lt;/h2&gt;

&lt;p&gt;With the coding period coming to an end, this week I've wound down coding and focused on writing up my &lt;a href="https://gdoc.pub/doc/e/2PACX-1vR6iXXG1uS9ds47GvDgQk6XtpYzVTtYepu5B8onBrMmoorfKHhnHbN0ArDoXgoA23nZrcrm_DSFMW45"&gt;final work submission&lt;/a&gt;. This means I've been looking back at the work I've been doing; reading through my old PRs and comparing against my project's original goals.&lt;/p&gt;

&lt;p&gt;My original proposal focused solely on adding backend support to &lt;span style="font-family: Courier New,Courier,monospace;"&gt;scipy.fftpack&lt;/span&gt;, yet the scope of my work over the past 3 months was not limited there. The resulting &lt;span style="font-family: Courier New,Courier,monospace;"&gt;scipy.fft&lt;/span&gt; subpackage is a complete rewrite of &lt;span style="font-family: Courier New,Courier,monospace;"&gt;scipy.fftpack&lt;/span&gt; from the ground-up featuring not just the backend system but also an improved interface and the replacement of &lt;span style="font-family: Courier New,Courier,monospace;"&gt;FFTPACK&lt;/span&gt; with pypocketfft under the hood.&lt;/p&gt;

&lt;p&gt;My contributions were also not just limited to SciPy; I've also made contributed to &lt;span style="font-family: Courier New,Courier,monospace;"&gt;pypocketfft&lt;/span&gt;, &lt;span style="font-family: Courier New,Courier,monospace;"&gt;uarray&lt;/span&gt;, pyFFTW and &lt;span style="font-family: Courier New,Courier,monospace;"&gt;cupy&lt;/span&gt;. I've really enjoyed getting to collaborate with this range of open source projects and am very pleased with how my work has gone over GSoC. I would thoroughly recommend that any students interested in open source software should consider doing a project themself.&lt;/p&gt;</description><author>PeterBell10@live.co.uk (peterbell10)</author><pubDate>Tue, 27 Aug 2019 01:17:48 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/peterbell10s-blog/final-week-1/</guid></item><item><title>Final weekly check-in #7</title><link>https://blogs.python-gsoc.org/en/abhinandan0659s-blog/final-weekly-check-in-7/</link><description>&lt;p&gt;&lt;span style="color: #1abc9c;"&gt;Hey! Wassup?&lt;/span&gt;&lt;br&gt;
Time has passed and it's my final blog for Google Summer of code 2019. Every day was just amazing, I learned a lot, enjoyed a lot, worked a lot. This was really a life-changing experience, I am starting to feel different, look at this world from a different angle and I am myself a-lot different from the time when I started this.&lt;br&gt;
Now, about the work:&lt;br&gt;
&lt;span style="color: #8e44ad;"&gt;&lt;span style="font-size: 26px;"&gt;What did you do this week?&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
Well, I finished with the implementation of the documentation page of EOS-Icons. I just created a PR for that. PR link - https://gitlab.com/SUSE-UIUX/eos-icons-landing/merge_requests/22. This documentation page will be published at - https://eos-icons.eosdesignsystem.com/docs.html. &lt;br&gt;
I also finished my final evaluations and created my final work report.&lt;br&gt;
&lt;span style="font-size: 26px;"&gt;&lt;span style="color: #8e44ad;"&gt;What's coming next?&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
I also created a new PR for a few adjustments on the EOS-Icons landing page. I am planning to refactor the code and improve responsiveness. So, I am working on that now. Later I will work on a few other things that are still pending, mainly deploying strapi on Heroku.&lt;br&gt;
&lt;span style="font-size: 26px;"&gt;&lt;span style="color: #8e44ad;"&gt;Did you stuck anywhere?&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
Not really, this week was just about documentation and most of which was already on the readme, so it wasn't that of a big deal.&lt;br&gt;
So, ya this was all for my Google Summer of code 2019. Well, I won't be updating this blog for my future work because this was just for GSoC period. Maybe you can check me out on other platforms.&lt;br&gt;
Here is my linked-in - https://www.linkedin.com/in/abhinandan-sharma-672299150/&lt;br&gt;
My twitter - https://twitter.com/abhinandan0659&lt;br&gt;
&lt;span style="color: #f39c12;"&gt;Peace!&lt;/span&gt;&lt;/p&gt;</description><author>abhinandan0659@gmail.com (abhinandan0659)</author><pubDate>Mon, 26 Aug 2019 19:30:09 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/abhinandan0659s-blog/final-weekly-check-in-7/</guid></item><item><title>Final Blog - A Journey full of learnings</title><link>https://blogs.python-gsoc.org/en/funnelferrys-blog/final-blog-a-journey-full-of-learnings/</link><description>&lt;p&gt;&lt;strong&gt;Name&lt;/strong&gt; : Anveshan Lal&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organisation&lt;/strong&gt; : Mission Support System (Python Software Foundation)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mentors&lt;/strong&gt; : Joern Ungermann, Jens-Uwe Grooß&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project&lt;/strong&gt; : &lt;a href="https://summerofcode.withgoogle.com/projects/#5105239412178944"&gt;Updating Geographical Plotting Routines&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Code&lt;/strong&gt; : &lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/694/gsoc2019-funnelferry/diff"&gt;Pull Request referencing project code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Commit log&lt;/strong&gt; : &lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/694/gsoc2019-funnelferry/commits"&gt;All the commits comprising the all the progress of project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A detailed report about my GSoC project regarding migration of basemap dependent code to Cartopy.&lt;/p&gt;

&lt;h2&gt;Dependencies&lt;/h2&gt;

&lt;p&gt;Aside from the dependencies required to run MSS:&lt;/p&gt;

&lt;pre&gt;$ conda install cartopy
&lt;/pre&gt;

&lt;p&gt;I would detail the progress by headlining the project in 3 parts&lt;/p&gt;

&lt;h2&gt;1. Server Side Migration&lt;/h2&gt;

&lt;p&gt;This address changes in code in respect to files:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/mswms/mpl_hsec.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/mswms/mpl_hsec_styles.py&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Current State&lt;/h3&gt;

&lt;p&gt;Server side is complete with all the previous functionality retained&lt;/p&gt;

&lt;h3&gt;Remaining Progress&lt;/h3&gt;

&lt;p&gt;None&lt;/p&gt;

&lt;h3&gt;Unresolved Issues&lt;/h3&gt;

&lt;p&gt;Map produced is almost aligned with client perfectly but it is not 100 %&lt;/p&gt;

&lt;h3&gt;Relevant Pull-Requests&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/643"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/643&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/651"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/651&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/653"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/653&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/654"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/654&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;2. Client Side Migration&lt;/h2&gt;

&lt;p&gt;This address changes in code in respect to files:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/msui/mpl_map.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/msui/mpl_qtwidget.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/msui/mpl_pathinteractor.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/msui/topview.py&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Current State&lt;/h3&gt;

&lt;p&gt;User Interface is perfectly functional and all the functionality is retained including the interaction of waypoints and functions related to it.&lt;/p&gt;

&lt;h3&gt;Remaining Progress&lt;/h3&gt;

&lt;p&gt;If the time allowed I would have like to exploit Cartopy's native ability to plot Geodetic Circular Paths, instead of the current manual solution.&lt;/p&gt;

&lt;h3&gt;Unresolved Issues&lt;/h3&gt;

&lt;p&gt;None&lt;/p&gt;

&lt;h3&gt;Relevant Pull Requests&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/656"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/656&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/671"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/671&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;3. Added Support for EPSG&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/msui/mpl_map.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mss/mslib/utils.py&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;Current State&lt;/h3&gt;

&lt;p&gt;All the epsg's previously present and additional EPSG's added are supported by the program. This includes the epsg which were non-functional from Cartopy's in-house function to plot epsg codes directly and all others Cartopy already supports.&lt;/p&gt;

&lt;h3&gt;Remaining Progress&lt;/h3&gt;

&lt;p&gt;There exists a large number of EPSGs (in excess of 4300), I couldn't test all of them but did encountered few which are not yet supported by Cartopy like &lt;code&gt;2985&lt;/code&gt;, &lt;code&gt;2986&lt;/code&gt;, &lt;code&gt;7415&lt;/code&gt;. With more testing there ought to be more which are still not supported by Cartopy but a large number of them are.&lt;/p&gt;

&lt;h3&gt;Relevant Pull Requests&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/684"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/684&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bitbucket.org/wxmetvis/mss/pull-requests/691"&gt;https://bitbucket.org/wxmetvis/mss/pull-requests/691&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Testing&lt;/h2&gt;

&lt;p&gt;Since the project in large part required me to maintain previous functionality there was not much scope to create new tests, but I did add two tests; One to test for a new function I added and the other test for EPSGs.&lt;/p&gt;

&lt;h3&gt;Failed Tests:&lt;/h3&gt;

&lt;p&gt;Pytest shows 2 tests failed although the failed tests seem to relate to a working and manually tested functionality of adding and removing point on waypoint interactor.&lt;/p&gt;

&lt;h2&gt;Acknowledgement&lt;/h2&gt;

&lt;p&gt;I would like to thank Joern Ungermann who mentored me throughout summer and actively helped me better the program and code, and also provided valuable feedback frequently. I would also like to express my gratiude towards MSS community including Reimar Bauer, Jens-Uwe Grooß and Shivashish Padhi who have been very welcoming from the start and helped get started and be familiar with MSS despite my serious lack of programming expertise and made my summer experience really great.&lt;/p&gt;</description><author>anveshanrx8@gmail.com (funnelferry)</author><pubDate>Mon, 26 Aug 2019 18:07:49 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/funnelferrys-blog/final-blog-a-journey-full-of-learnings/</guid></item><item><title>Final work submission and future work</title><link>https://blogs.python-gsoc.org/en/yashlambas-blog/final-work-submission-and-future-work/</link><description>&lt;p&gt;As the final week ended, we had to submit a compilation of our work during GSoC. Below are some insights:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What was the original aim?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Adding new machine learning models to DFFML, the proposed models are given below:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Model 1: Ordinary Least Square Regression (OLSR)&lt;/li&gt;
	&lt;li&gt;Model 2: Logistic Regression&lt;/li&gt;
	&lt;li&gt;Model 3: k-Nearest Neighbour (kNN)&lt;/li&gt;
	&lt;li&gt;Model 4: Naive Bayes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Decided modifications during community bonding:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During the community bonding period, the proposed work was modified to achieve optimized result from the summer. The finalized work was:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Adding Linear Regression Model from scratch&lt;/li&gt;
	&lt;li&gt;Adding Linear Regression and other proposed models using scikit-learn&lt;/li&gt;
	&lt;li&gt;Adding tests for the added models&lt;/li&gt;
	&lt;li&gt;Documenting the models&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Tasks Completed:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;
	&lt;p&gt;Added Linear Regression model from scratch with tests&lt;/p&gt;

	&lt;p&gt;Simple Linear Regression model implemented from scratch. This was successfully completed with tests and documentation, and was also releasd on PyPI.&lt;/p&gt;
	&lt;/li&gt;
	&lt;li&gt;
	&lt;p&gt;Added scikit models with dynamic support Initially, it was planned to add certain number of models from scikit but as I did it with one model (Multiple Linear Regression with scikit), we decided to extend this and make a base for all scikit models and make other model classes dynamic. This was successful and now adding scikit models to DFFML is as easy as appending the model name to a python dictionary. The tests are complete and the documentation material is ready but we are still figuring out a more understandable way of documenting this before release.&lt;/p&gt;
	&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Future Work:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The project was started just before GSoC'19 and it has come a long way since. I plan on contributing significantly to the project after GSoC'19. Few of the planned stuff:&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;Adding more scikit models&lt;/li&gt;
	&lt;li&gt;Working on more machine learning libraries and add models&lt;/li&gt;
	&lt;li&gt;Contruct DFFML Web UI from scratch which was conceptualized during summer and much more.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;More detailed report: https://gist.github.com/yashlamba/5e0845a6cd5a1198f166ddedfba78802&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;</description><author>yashlamba2000@gmail.com (yashlamba)</author><pubDate>Mon, 26 Aug 2019 15:58:47 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/yashlambas-blog/final-work-submission-and-future-work/</guid></item><item><title>Final Weekly Check-in</title><link>https://blogs.python-gsoc.org/en/sudharsana-kjls-blog/final-weekly-check-in/</link><description>&lt;p&gt;In the final week of coding, I was refining the hadoop source PR.&lt;/p&gt;

&lt;h2 class="cms-plugin cms-plugin-aldryn_newsblog-article-lead_in-409 cms-render-model cms-plugin-aldryn_newsblog-article-lead_in-462"&gt;What did I do this week?&lt;/h2&gt;

&lt;p&gt;The dockerfile is finally working now. We are able to set up hadoop using dockerfile. Also the connection set up is well established in the application.&lt;/p&gt;

&lt;h2 class="cms-plugin cms-plugin-aldryn_newsblog-article-lead_in-409 cms-render-model cms-plugin-aldryn_newsblog-article-lead_in-462"&gt;What is coming up next?&lt;/h2&gt;

&lt;p&gt;There are few bug fixes to be done. Also Hadoop feature and MySQL feature are going to be packaged and uploaded in PyPi similar to the models. I will be working on that as well.&lt;/p&gt;

&lt;h2 class="cms-plugin cms-plugin-aldryn_newsblog-article-lead_in-409 cms-render-model cms-plugin-aldryn_newsblog-article-lead_in-462"&gt;Did you get stuck anywhere?&lt;/h2&gt;

&lt;p&gt;Fixing the hadoop source connection and writing a data into HDFS stream was an issue. My mentor and I had another meeting this week and we fixed it.&lt;/p&gt;</description><author>kjlsudharsana@gmail.com (sudharsana-kjl)</author><pubDate>Mon, 26 Aug 2019 14:48:10 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/sudharsana-kjls-blog/final-weekly-check-in/</guid></item><item><title>Check-in: 13th and final week of GSoC (Aug 19 - Aug 25)</title><link>https://blogs.python-gsoc.org/en/josealaniss-blog/check-in-13th-and-final-week-of-gsoc-aug-19-aug-25/</link><description>&lt;h3&gt;1. What did you do this week?&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;As this was the final week of GSoC, I have written and posted a final report of the project &lt;a href="https://gist.github.com/JoseAlanis/08d75e49ab30630adb34774107cc8a75"&gt;here&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;In addition, I made a major overhaul of the project's &lt;a href="https://josealanis.github.io/mne-stats/"&gt;website&lt;/a&gt;. Wich now contains a "&lt;a href="https://josealanis.github.io/mne-stats/limo_examples/index.html"&gt;gallery of examples&lt;/a&gt;" for some of major advancements and tools developed during the GSoC period.&lt;/li&gt;
	&lt;li&gt;See this &lt;a href="https://github.com/JoseAlanis/mne-stats/pull/16"&gt;PR&lt;/a&gt; for a more detailed list of contributions made this week.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;2. What is coming up next?&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;There are a couple of open questions that concern the integration of these tools and analysis techniques to MNE's API.&lt;/li&gt;
	&lt;li&gt;For instance, we've been using scikit-learn's linear regression module to fit the models. One of the main advantages of this approach consists in having a linear regression "object" as output, increasing the flexibility for manipulation of the linear model results, while leaving MNE's linear regression function untouched (for now). However, we believe that using a machine learning package for linear regression might lead to confusion among users on the long run.&lt;/li&gt;
	&lt;li&gt;Thus, the next step is to discuss possible ways of integration to MNE-Python. Do we want to modify, simplify, or completely replace MNE's linear regression function to obtain similar output..&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I really enjoyed working on this project during the summer and would be glad to continue working on extending the linear regression functionality of MNE-Python after GSoC.&lt;/p&gt;

&lt;h3&gt;3. Did you get stuck anywhere?&lt;/h3&gt;

&lt;ul&gt;
	&lt;li&gt;Not really. Although the final week included a lot of thinking about what the most practical API might be for the tools developed during the GSoC period. We want to continue this discussion online (see &lt;a href="https://github.com/mne-tools/mne-python/issues/6710"&gt;here&lt;/a&gt;) and hopefully be able to fully integrate this advancements in the released version of MNE-Python soon.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading and please feel free to contribute, comment or post further ideas!&lt;/p&gt;</description><author>alanis.jcg@gmail.com (JoseAlanis)</author><pubDate>Mon, 26 Aug 2019 14:15:16 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/josealaniss-blog/check-in-13th-and-final-week-of-gsoc-aug-19-aug-25/</guid></item><item><title>Google Summer of Code with Nuitka 7th Weekly Check-in</title><link>https://blogs.python-gsoc.org/en/tommyli3318s-blog/google-summer-of-code-with-nuitka-7th-weekly-check-in/</link><description>&lt;p&gt;&lt;b&gt;1. What did you do this week?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;As GSoC is wrapping up, I wrote a summary of my work which can be found&lt;a href="https://github.com/tommyli3318/Nuitka-website/blob/GSoC-final-posting/posts/tommy-gsoc-summary.rst"&gt; here&lt;/a&gt;. &lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;In addition, I have finalized my pull requests&lt;a href="https://github.com/Nuitka/Nuitka/pull/495"&gt; #495&lt;/a&gt; and&lt;a href="https://github.com/Nuitka/Nuitka/pull/484"&gt; #484&lt;/a&gt; which are now ready for merge.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;b&gt;2. What is coming up next?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;After GSoC ends, I plan on continuing my contributions to Nuitka and PSF.&lt;/b&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;b&gt;3. Did you get stuck anywhere?&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;I do not remember being stuck anywhere this week :)&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
 &lt;/p&gt;</description><author>taofengl@uci.edu (tommyli3318)</author><pubDate>Mon, 26 Aug 2019 08:24:13 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/tommyli3318s-blog/google-summer-of-code-with-nuitka-7th-weekly-check-in/</guid></item><item><title>Week 13: Weekly Check-In (#7) - Last Check-In</title><link>https://blogs.python-gsoc.org/en/digyts-blog/week-13-weekly-check-in-7-last-check-in/</link><description>&lt;p&gt;&lt;strong&gt;1. What did you do this week?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As described in my previous post, I spent last week doing some smaller corrections on my Pull Requests. The biggest amount of work was dedicated to allowing fast and memory saving computation to the tfr_stockwell function, the last function where I haven't implemented this yet. Principally, most of this went similar to the other functions, i.e. I had to create an alternative function which computes stuff separately for lists of SourceEstimate objects, and is capable of handling input from generator objects. However, the tricky and time consuming part was again to make sure the data fields were completely equal.&lt;br&gt;
Another step last week was to change the examples I created, from one example to three example that cover the diffferent TFR functions and SourceEstimate types which can be processed equally.&lt;br&gt;
Finally I did some smaller commits, correcting some stuff that my reviewers mentioned could be made better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What is coming up next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Well, as my project is finished now, and all of the important functional stuff has been implemented, I will only spend my time working on review corrections, in order to get everything merged into master.&lt;br&gt;
Concerning the extended plotting that I mentioned over the last blog posts, I will probably do a bigger independent PR, that can enhance plotting functionality and modularity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Did you get stuck anywhere?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. As I already mentioned I first had problems with making the data fields completely equivalent, when implementing a time/memory saving version of tfr_stockwell.&lt;br&gt;
But probably even more annoying (because I didn't expect it) was trying to erase Errors when submitting the freshly made examples. I rewrote the exampels first to a MNE-testing dataset which contained real neurophysiological data. Then, when submitting it, noticed that my version of the testing data was outdated (the respective dataset has been revised for another MNE-Python GSoC project running this summer). So I had to adapt the respective file paths again, which would've been no problem at all, if one of the files that I needed for one of my examples (a trans.fif file) wouldn't have been removed from the dataset. So this resulted in trying various solutions to make things work again, until I finally decided to change the example and make it run on a different dataset, where all needed files were accessible.&lt;br&gt;
So next time I'll be using testing data, I'll definitely will make sure to update my testing data folder first.&lt;br&gt;
&lt;br&gt;
So this was the last regular report on my GSoC project, and I hope that you've found it an interesting thing to read. As you might have noticed from reading, I've definitely learned alot of things during the project (probably a consequence of doing a lot of mistakes during the project), but I'm glad that I could really notably enhance my coding skills during this summer.&lt;br&gt;
From now (and after having all the stuff from the project entirely merged), I will still try to stay involved in MNE, so I hope that this won't be the last thing that you'll hear from me.&lt;br&gt;
&lt;br&gt;
Finally I want to say thanks to everyone who participated in this Google Summer of Code project with me - from my mentors to all reviewers to the people from the Salzburg Brain Dynamics lab to finally you, the reader of my blog.&lt;br&gt;
Thank's to everyone and have a good time - hopefully profiting from my works on MNE-Python this Google Summer of Code ;).&lt;br&gt;
&lt;br&gt;
Cheers!&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
Dirk&lt;/p&gt;</description><author>s1041134@stud.sbg.ac.at (DiGyt)</author><pubDate>Mon, 26 Aug 2019 08:17:46 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/digyts-blog/week-13-weekly-check-in-7-last-check-in/</guid></item><item><title>Final Report</title><link>https://blogs.python-gsoc.org/en/sounak98s-blog/final-report/</link><description>&lt;h2&gt;Summer Rewind&lt;/h2&gt;

&lt;p&gt;Let’s rewind to the beginning of this year. We had started working on this application way before GSoC had even started. The goal was to have a working application which PSF will be able to use for this year’s GSoC for the management of their students. In this way, we will be able to make sure that students actually use it and we get a clear idea if the application is serving its purpose. I’m glad the plan worked out, because tons of bugs were reported and we could fix them. We also received valuable feedback from all users.&lt;/p&gt;

&lt;h3&gt;Schedulers and Builders&lt;/h3&gt;

&lt;p&gt;Allow me to introduce you to some of the most important modules of our system. Without any doubt the first on the list is our &lt;code&gt;Scheduler&lt;/code&gt;, which can perform particular tasks from sending an email to archiving webpages. Well, the most powerful feature of this module is that it can perform those tasks at any particular date and time. Need to remind students that they have not written a blog on time? Not a big deal, &lt;code&gt;Scheduler&lt;/code&gt; can do that for you. Now think of this, many students who are not like me publish their blogs on time, so we don’t really need to spam them with emails. Thus we built the module &lt;code&gt;Builder&lt;/code&gt; which in turn builds &lt;code&gt;Scheduler&lt;/code&gt; on different conditions.&lt;/p&gt;

&lt;h3&gt;Blogging Platform&lt;/h3&gt;

&lt;p&gt;We didn’t have to create a blogging platform as we integrated &lt;a href="https://github.com/divio/aldryn-newsblog"&gt;&lt;code&gt;aldryn-newsblog&lt;/code&gt;&lt;/a&gt; but we had to tweak it a lot to fit into our system. Something that we had to work on was setting up custom permissions for each user so that they only have access to their blogs. We achieved this with the help of django admin which allows us to set add, view, change permissions based on querysets! Sanitizing the artilce contents was another challenge that we faced because aldryn-newsblog uses an editor which injects &lt;code&gt;HTML&lt;/code&gt; so that users can customize their blog posts. Our system currently allows only particular tags like&lt;/p&gt;

&lt;p&gt;,&lt;/p&gt;

&lt;h1&gt;, etc. Other tags are sanitized conditionally, like for iframes we only render iframes for YouTube videos so that users can add YouTube videos to their articles.&lt;/h1&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;We also tweaked the article list templates to include our own reddit-styled comment system which makes use of recursion on django templates to display different threads. For more information on how to achieve this, check out the article &lt;a href="https://blogs.python-gsoc.org/en/sounak98s-blog/creating-reddit-styled-comment-system-with-django/"&gt;Creating Reddit Styled Comment System with Django &lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Tweaking Django&lt;/h3&gt;

&lt;p&gt;We used &lt;code&gt;django-forms&lt;/code&gt; wherever we could, but there were cases where we needed to customize the forms to an extent which wasn’t supported out of the box. We have a form which lets suborg admins and admins add selected students to the system. Generally, this includes adding a lot of students (~50). Typing out the emails one by one is still okay, but selecting the GSoC year or the Suborg one by one for each student? Ask my mentor, and he will let you know what a pain it is. So, we tweaked the django form to add buttons which would let the admin select a particular Suborg, year for all the mentioned users.&lt;/p&gt;

&lt;p&gt;&lt;img alt="set-default-fields-gsoc19.gif" src="https://i.imgur.com/WUEPwDG.gif" style="width: 100%;"&gt;&lt;/p&gt;

&lt;p&gt;We have RSS feeds for each blog separately (all the articles published by a student) and also for all the articles published on this platform. Django has &lt;a href="https://docs.djangoproject.com/en/2.2/ref/contrib/syndication/"&gt;Syndication Feed Framework&lt;/a&gt; which allows customizable RSS feeds, but the all articles feed was too long and took seconds to load. We needed to paginate the feed, and we were out of luck as django didn’t support this out of the box. This was a challenge, as we had to take in the request object and parse the url to get the page number and render the blogs accordingly. We also added the year argument which takes in the year and displays the blogs of that particular GSoC. The current feed url looks something like this &lt;a href="https://blogs.python-gsoc.org/en/feed/?y=2019&amp;amp;p=2"&gt;https://blogs.python-gsoc.org/en/feed/?y=2019&amp;amp;p=2&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For most of the other admin features, we heavily relied upon django admin. The admin portal lets admins&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Add new &lt;code&gt;Scheduler&lt;/code&gt;s and &lt;code&gt;Builder&lt;/code&gt;s&lt;/li&gt;
	&lt;li&gt;Check blog post histories of different articles to track changes&lt;/li&gt;
	&lt;li&gt;Add the current GSoC timeline which gets pushed to the schedule page in the github site repository&lt;/li&gt;
	&lt;li&gt;Send custom emails to users as admins&lt;/li&gt;
	&lt;li&gt;Review comments and delete them if necessary&lt;/li&gt;
	&lt;li&gt;Disable a user profile if the student fails mid-way&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Integration with Github&lt;/h3&gt;

&lt;p&gt;We annotated some of the manual work that an admin has to put in to maintain the static site on Github. Our system creates pull requests adding new Suborgs in the Ideas page whenever a new Suborg Application is added, it also archives current pages when the GSoC program ends. These pulls can then be reviewed and merged to master by the admin.&lt;/p&gt;

&lt;h3&gt;Fixing Bugs&lt;/h3&gt;

&lt;p&gt;This was really a major part of the whole summer and it went hand in hand with the whole developmene process. There were bugs that were found by the users, and the others figured out by the mentors and me. There are a ton of “Bugfix” PRs which were basically bug fixes.&lt;/p&gt;

&lt;p&gt;There was a time when we pushed some changes and it made the system send emails to all the users regardless of whether they have blogged or not. Yes, basically we spammed a lot of users unintentionally. This was another challenge that we had faced and overcame eventually by making a flag which would disable all notifications to any user. We also followed a strict push cycle to avoid any disturbance to students blogging at the end of the week.&lt;/p&gt;

&lt;h3&gt;Wrapping Up&lt;/h3&gt;

&lt;p&gt;We ran accessibility tests on our websites and fixed issues which decrease the accessibility of the website, like fixing contrast ratios of texts and background, adding alts to images, etc. We also worked on boosting the loading speed of out website on mobiles. In built tools provided by Chrome and Firefox gave us a list of issues after analyzing the website which we could work on.&lt;/p&gt;

&lt;p&gt;We also ended up using a cache server to cache the data to fasten up the whole loading process. We also needed to manually override caching in some pages like the comments page, which would not show the new comment as the old one was cached. This is the &lt;a href="https://github.com/python-gsoc/python-blogs/issues/293"&gt;issue&lt;/a&gt; which describes more about this bug and how we solved it.&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Future Plans&lt;/h2&gt;

&lt;p&gt;Currently, the platform provides most of the functionality required for a smooth GSoC run at PSF, but there are features that would make it even smoother for the admins and make their lives a bit less painful. One of them is adding the mentors to the &lt;a href="https://summerofcode.withgoogle.com/"&gt;GSoC site&lt;/a&gt; automatically from the system’s database. This can be another nasty manual work (typing in the emails, names, etc. one by one) and needs to be done automatically. For more details, check this &lt;a href="https://github.com/python-gsoc/python-blogs/issues/287"&gt;issue&lt;/a&gt; out.&lt;/p&gt;

&lt;p&gt;We also need to write unit and integration tests for features that are not provided by django or any third-party packages.&lt;/p&gt;

&lt;p&gt;I would love to work on these in future even when this GSoC ends, fix more bugs as and when they come up and be a part of this great community!&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Credits&lt;/h2&gt;

&lt;p&gt;First of all, any of this would not have been possible without my mentors and other members of the PSF community. So a huge shout-out to them for helping me whenever I needed and for guiding me when I was clueless on how to proceed. While I was busy coding, my mentor would look for potential bugs in the system and point them out to me. This really kept me busy throughout the summer as I always had bugs to fix, and helped me make the system more stable.&lt;/p&gt;

&lt;p&gt;Next, I would thank Google for organising such an amazing program for students who are passionate about coding and giving them an opportunity to gain some hands-on experience.&lt;/p&gt;

&lt;p&gt;Last but not the least, I would thank my fellow applicants who also worked on building the application with me to bring it to a stage where it could be used in this year’s GSoC run.&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Apologies&lt;/h2&gt;

&lt;p&gt;There are a lot of mistakes that I made and learnt from them. In the beginning I was not testing stuff through before making a PR, sometimes trying to do things faster and the other times just being lazy. It only made me spend more time on a particular feature as there were things that would not work.&lt;/p&gt;

&lt;p&gt;Another thing that I should apologize for is being very irregular about posting blogs. This shouldn’t have come from me, as I was the student working on the very blogging platform itself.&lt;/p&gt;</description><author>sounak.98@gmail.com (sounak98)</author><pubDate>Mon, 26 Aug 2019 05:55:35 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/sounak98s-blog/final-report/</guid></item><item><title>Weekly Check-In #10</title><link>https://blogs.python-gsoc.org/en/sounak98s-blog/weekly-check-in-10-1/</link><description>&lt;h2&gt;What did I do in these two weeks?&lt;/h2&gt;

&lt;p&gt;There were a lot of bugs posted, kind of like the last set of major fixes that we need to make.&lt;/p&gt;

&lt;ol&gt;
	&lt;li&gt;be able to add gsoc_year&lt;/li&gt;
	&lt;li&gt;add username to password reset email&lt;/li&gt;
	&lt;li&gt;prepopulate have you partisipated before&lt;/li&gt;
	&lt;li&gt;'Settings' object has no attribute 'ADMIN_EMAIL' on suborg form since we removed that key&lt;/li&gt;
	&lt;li&gt;github username for org admins/mentors&lt;/li&gt;
	&lt;li&gt;add additional org admins as part of suborg form&lt;/li&gt;
	&lt;li&gt;cut out top part of suborg form&lt;/li&gt;
	&lt;li&gt;make a pr on suborg submit, dont auto commit&lt;/li&gt;
	&lt;li&gt;cookie notice&lt;/li&gt;
	&lt;li&gt;add mentors/suborg admins button&lt;/li&gt;
	&lt;li&gt;add psf privacy policy&lt;/li&gt;
	&lt;li&gt;checkbox on signing up for PSF terms and another for "opt-in to receive emails"&lt;/li&gt;
	&lt;li&gt;nuke all student users unless they click a link in an email, ie remove email name etc then readd with get request if they click at end of gsoc (gdpr)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this week we mostly worked on all of these. Terri posted some issues with the comment notification emails that we had totally overlooked. I fixed those too. We also worked on fixing the existing feed and adding blog wise feeds for every blog.&lt;/p&gt;

&lt;h2&gt;What's next?&lt;/h2&gt;

&lt;p&gt;Publishing the final report and making some final changes to improve the accessibility of the site, like fixing the contrast ratios, etc.&lt;/p&gt;</description><author>sounak.98@gmail.com (sounak98)</author><pubDate>Mon, 26 Aug 2019 05:53:48 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/sounak98s-blog/weekly-check-in-10-1/</guid></item><item><title>Paginate Django Feeds</title><link>https://blogs.python-gsoc.org/en/sounak98s-blog/paginate-django-feeds/</link><description>&lt;p&gt;Django has a great framework for generating feeds, but sadly it doesn't support pagination out of the box. Currently we have tons of blogs and the feeds page was loading especially slow with all the pages in it. I was hoping django will have some class variable to enable pagination but I was out of luck. But it had a method which took in the request, so I knew I had to parse the page number from there.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-python"&gt;from django.contrib.syndication.views import Feed

class BlogsFeed(Feed):
    ...
    def get_objects(self, request):
        ...
        page = request.GET.get("p", 1)
        ...
        return queryset_from_page&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So in the get_objects method we need to get the page number from the GET args and then return the queryset according to the page number.&lt;/p&gt;

&lt;p&gt;That seems to be enought right? Even I thought so. But the RSS standards say that we also need to add entries like url for last page number, first page number and the current page number. Well, we can even do that. The class BlogsFeed takes in a class variable called feed_type and we need to set it to the feed type class and django provides a class for that too called DefaultFeed. Well we will inherit this DefaultFeed and make out own type of Feed which will include the page numbers too.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-python"&gt;from django.utils.feedgenerator import DefaultFeed

class PaginateFeed(DefaultFeed):
    content_type = "application/xml; charset=utf-8"

    def add_root_elements(self, handler):
        super(CorrectMimeTypeFeed, self).add_root_elements(handler)
        if self.feed["page"] is not None:
            if not self.feed["show_all_articles"]:
                if (
                    self.feed["page"] &amp;gt;= 1
                    and self.feed["page"] &amp;lt;= self.feed["last_page"]
                ):
                    handler.addQuickElement(
                        "link",
                        "",
                        {
                            "rel": "first",
                            "href": f"{self.feed['feed_url']}?y={self.feed['year']}&amp;amp;p=1",
                        },
                    )
                    handler.addQuickElement(
                        "link",
                        "",
                        {
                            "rel": "last",
                            "href": (
                                f"{self.feed['feed_url']}?y={self.feed['year']}"
                                f"&amp;amp;p={self.feed['last_page']}"
                            ),
                        },
                    )
                    if self.feed["page"] &amp;gt; 1:
                        handler.addQuickElement(
                            "link",
                            "",
                            {
                                "rel": "previous",
                                "href": (
                                    f"{self.feed['feed_url']}?y={self.feed['year']}"
                                    f"&amp;amp;p={self.feed['page'] - 1}"
                                ),
                            },
                        )
                    if self.feed["page"] &amp;lt; self.feed["last_page"]:
                        handler.addQuickElement(
                            "link",
                            "",
                            {
                                "rel": "next",
                                "href": (
                                    f"{self.feed['feed_url']}?y={self.feed['year']}"
                                    f"&amp;amp;p={self.feed['page'] + 1}"
                                ),
                            },
                        )&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This code pretty much explains itself. But there is one catch here too self.feed dict does not have a 'page' or a 'year' key. We need to pass that from our BlogsFeed class. Let's see how.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-python"&gt;class BlogsFeed(Feed):
    ...
    feed_type = CorrectMimeTypeFeed
    ...
    def feed_extra_kwargs(self, obj):
        return {
            "page": self.page,
            "last_page": self.last_page,
            "show_all_articles": self.show_all_articles,
            "year": self.year,
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That's it guys. Now you have your own paginated feed as per the RSS standards.&lt;/p&gt;</description><author>sounak.98@gmail.com (sounak98)</author><pubDate>Mon, 26 Aug 2019 05:48:21 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/sounak98s-blog/paginate-django-feeds/</guid></item><item><title>Weekly Check-In #9</title><link>https://blogs.python-gsoc.org/en/sounak98s-blog/weekly-check-in-9-2/</link><description>&lt;h2&gt;What did I do this week?&lt;/h2&gt;

&lt;p&gt;We have come to the last phase of the summer. The application is almost ready but we needed to fix more bugs this time to fine tune the application. Some of those which we worked on this week were as follows.&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Fixed the sitemap to include each blog post and also different pages for the paginated blog&lt;/li&gt;
	&lt;li&gt;Handling exceptions on sitemap&lt;/li&gt;
	&lt;li&gt;Use django for sending mails to admins when any exception is raised on the main server&lt;/li&gt;
	&lt;li&gt;Fixed a very very old issue by enhancing the user add feature. Now the admin can use single dropdowns to select the default values for multiple fields.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;What will I do next week?&lt;/h2&gt;

&lt;p&gt;Will move towards finishing up whatever is left and work on more issues as and when they come up!&lt;/p&gt;

&lt;p&gt;That will be all folks!&lt;/p&gt;</description><author>sounak.98@gmail.com (sounak98)</author><pubDate>Mon, 26 Aug 2019 05:02:52 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/sounak98s-blog/weekly-check-in-9-2/</guid></item><item><title>Week 11-12 Check-In</title><link>https://blogs.python-gsoc.org/en/hecriss-blog/week-11-12-check-in/</link><description>&lt;p&gt;I am happy to announce that `CollisionHeightfield` is near completion! This week, I added some finalizations to `CollisionHeightfield`, which included improving the collision tests and adding the getter/setters of the class. My next steps would be to push my unit tests to the PR, and provide sample code which demonstrates the new CollisionSolid in action. One goal that I did not get to accomplish was to implement BAM serialization for `CollisionHeightfield`. BAM is one of Panda3D's native file formats, allowing users to export Panda3D objects. Additionally, I did not add collision tests for lines and line segments. `CollisionHeightfield` currently has a collision test for rays, which is probably used more commonly than line/segments in regards to terrain. However, it would be nice to add these tests, especially since they are only slight variants of the ray collision test. Regardless, I am happy to announce that `CollisionHeightfield` is pretty functional as is. That is all for this week, check back next week for my final blog post!&lt;/p&gt;</description><author>hec@bxscience.edu (hecris)</author><pubDate>Mon, 26 Aug 2019 03:33:15 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/hecriss-blog/week-11-12-check-in/</guid></item><item><title>Panda3D iOS Support - A Postmortem</title><link>https://blogs.python-gsoc.org/en/treamouss-blog/panda3d-ios-support-a-postmortem/</link><description>&lt;p&gt;Hi everyone!&lt;/p&gt;

&lt;p&gt;Well, it appears that this is the end of the line when it comes to my GSoC portion of my work. I got a huge amount of work done and am extremely proud of it, and I can't wait to continue working on this project in the coming months and make it the best it can be. This blog post is here to detail the work I completed over the summer, and also what I didn't have time to get to. So, let's begin!&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Everything I completed&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CMake Build Support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This actually ended up taking a lot of my time this summer (around a month). Currently, Panda3D uses a custom build system known as makepanda. Although this is a venerable and versatile build script, it was decided that a more standardized build system would be a better choice, so work began on replicating our current system with CMake. Because I began my iOS work before the CMake system was actually complete, this led to a couple of instances where I wasn't sure if there was an issue with my own code or with the Panda's experimental CMake implementation. In the end, however, thanks to CMake 3.14's new support for iOS devices, I was able to complete this task within the expected time frame.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;eagldisplay&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;David Rose, who briefly worked on an iOS port (back when iOS was iPhoneOS), created the iphonedisplay module as an experimental method of running Panda apps. While this was a good starting point, I felt it was best to start from scratch considering the number of changes iOS has seen since the days of the iPhone 3G. This new display module should be easier to extend in the future when adding in a Metal backend, for example. Most of this is complete - there is support both for GraphicsWindows and GraphicsBuffers, along with some basic features such as autorotation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PandaViewController&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PandaViewController is a helper UIView that encapsulates the entirety of Panda on the Cocoa side of things. All one needs to do is specify where the Python source is, and PandaViewController will handle initializing Python and handing control to the Python script. I decided to go with this method of starting Panda mostly so existing apps can easily integrate Panda - it doesn't take over the main application loop or anything, so it quite very nicely with existing systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;make_xcodeproj and makewheel.py&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In addition to actually getting iOS support working, I also wanted to get started on the deployment process. Firstly, this required modifying makewheel.py to allow for the creation of wheels for iOS. This actually ended up being more complicated than I was first expecting, since makewheel had been designed to only generate wheels for the host system. I got it working in the end, though, and was able to begin churning out iOS-specific wheels. In addition, I had to add a new command to our setuptools-based deployment system that allows for the creation of Xcode projects, since that is the only way to test and deploy iOS apps on-device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multitouch (only partially)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I had gotten mouse emulation working well pretty early on in the project, since it was just a matter of converting touch events to the existing mouse events Panda is used to. Adding full-blown multitouch, however, has been much more of a challenge. Panda is not accustomed to handling multiple pointers (or anything other than a mouse, for that matter), so it took some changing at the architectural level, but I got a partial implementation working.&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;Stuff I didn't get to&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DirectGUI touch support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is something that I simply didn't have time for. It took me longer than expected to change Panda's architecture to allow for multiple pointers. While the DirectGUI widgets will indeed work, any touch specific gestures such as swiping to scroll are not present.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C++ app support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I had decided to prioritize getting Python working over C++, since the vast majority of Panda apps are written in Python. This should not be too difficult to accomplish; it should just be a matter of changing the entrypoint that PandaViewController uses when spawning a new thread.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom file handler for make_xcodeproj&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Currently, make_xcodeproj just does a straight copy of all the game files, and ignores the custom handlers that can be specified in build_apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Although I documented a lot of the code through comments, I failed to write any manual entries or longform docstrings. When I do this in the future, I would like to wait until we are filly migrated to the Sphinx manual instead of our custom MediaWiki stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unit Tests&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I never got to these simply because it would have taken a while to figure out what to actually test. As far as I know, there also isn't any good method of running tests on the C++ side of things; most of the existing unit tests utilize the generated Python bindings and call into the codebase from there.&lt;/p&gt;

&lt;hr&gt;
&lt;h2&gt;What I could have done differently&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Better communication with mentors&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I did not talk to and consult with my mentors over Discord as much as I should have. I have a habit where I am hesitant to get feedback on my work unless it is in a somewhat completed state; I would end up telling myself, "I just need to finish up this one last feature/bug/whatever, then I'll push my work." And before I knew it, a week had passed by! This led to me dumping large changes all at once, which certainly was not helpful in quickly getting feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Separation and organization of my work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I mainly used two branches for development: one called "cmake-ios" that I used to add CMake support and also write the display backend, and then a separate "multitouch" branch that is based from "cmake-ios". For my GitHub pull request, I ended up just merging everything into an "ios" branch, so a lot of different types of commit are all intertwined. There's not a lot of separation where someone can think to themselves, "oh, they added this feature in this commit, then continued working on it in this next commit". It's more like a developer with ADHD jumping around between features and bugs whenever they get noticed.&lt;/p&gt;

&lt;hr&gt;
&lt;p&gt;Although this is the end of my GSoC experience for this year, it is not the end of my work with Panda. I had already fixed a few bugs and gotten a few pull requests merged before I started this project, and I don't plan to stop that trend. Additionally, I am excited to continue my work on the iOS backend into the fall (on my own time, without a deadline looming over my head!). I am extremely happy with how everything has turned out so far, and am super excited to continue working with my mentors and everyone else in the community!&lt;/p&gt;

&lt;p&gt;So long!&lt;/p&gt;</description><author>treamology@gmail.com (treamous)</author><pubDate>Mon, 26 Aug 2019 00:00:47 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/treamouss-blog/panda3d-ios-support-a-postmortem/</guid></item><item><title>[Blog #6] Part of the journey is the end.</title><link>https://blogs.python-gsoc.org/en/anubhavps-blog/blog-6-part-of-the-journey-is-the-end/</link><description>&lt;p&gt;&amp;lt;meta charset="utf-8"&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part of the journey is the end. It is time for me to work on my final work report for final evaluation of Google Summer of Code 2019. This week, I will devote my time mainly to write my final report and final blog post. If time permits, I will work on my PRs from last week.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;b&gt;Last week, I worked on getting Travis to push automatically to PyPI and I redid benchmarking.&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;</description><author>anubhavp28@gmail.com (anubhavp)</author><pubDate>Sun, 25 Aug 2019 20:07:38 +0000</pubDate><guid isPermaLink="true">https://blogs.python-gsoc.org/en/anubhavps-blog/blog-6-part-of-the-journey-is-the-end/</guid></item></channel></rss>