﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8%E8%80%85%3AGandalf3%2FGSoC_2017%2FProposal</id>
	<title>利用者:Gandalf3/GSoC 2017/Proposal - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.blender.jp/index.php?action=history&amp;feed=atom&amp;title=%E5%88%A9%E7%94%A8%E8%80%85%3AGandalf3%2FGSoC_2017%2FProposal"/>
	<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Gandalf3/GSoC_2017/Proposal&amp;action=history"/>
	<updated>2026-04-21T09:58:07Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Gandalf3/GSoC_2017/Proposal&amp;diff=153275&amp;oldid=prev</id>
		<title>Yamyam: 1版 をインポートしました</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Gandalf3/GSoC_2017/Proposal&amp;diff=153275&amp;oldid=prev"/>
		<updated>2018-06-28T21:22:32Z</updated>

		<summary type="html">&lt;p&gt;1版 をインポートしました&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;2018年6月28日 (木) 21:22時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yamyam</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Gandalf3/GSoC_2017/Proposal&amp;diff=153274&amp;oldid=prev</id>
		<title>2017年7月13日 (木) 23:01にwiki&gt;Gandalf3による</title>
		<link rel="alternate" type="text/html" href="https://wiki.blender.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Gandalf3/GSoC_2017/Proposal&amp;diff=153274&amp;oldid=prev"/>
		<updated>2017-07-13T23:01:37Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Python Package Manager Proposal =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Name ===&lt;br /&gt;
&lt;br /&gt;
Ellwood Zwovic&lt;br /&gt;
&lt;br /&gt;
=== Email / IRC / Social / Web ===&lt;br /&gt;
&lt;br /&gt;
I can be reached through [mailto:gandalf3@blendermonkey.com gandalf3@blendermonkey.com], and I’m usually in #blendercoders as gandalf3. I’m also [http://blender.stackexchange.com/users/599/gandalf3 gandalf3 on stackexchange] and the bf-committers mailinglist.&lt;br /&gt;
&lt;br /&gt;
=== Synopsis ===&lt;br /&gt;
&lt;br /&gt;
This project will add a package manager to Blender’s current addon system with the goal of providing functionality similar to that found in [http://atom.io/ Atom].&lt;br /&gt;
&lt;br /&gt;
=== Benefits ===&lt;br /&gt;
&lt;br /&gt;
Introducing a package manager will allow:&lt;br /&gt;
* Addons to be collected into decentralized, searchable repositories (e.g. official, contrib, blender market).&lt;br /&gt;
* Addons to be searched for, downloaded, and installed, all from within Blender.&lt;br /&gt;
* Installed addons to be automatically updated at the whim of the user.&lt;br /&gt;
* “Rolling release” style addon development.&lt;br /&gt;
&lt;br /&gt;
In addition, future work could extend this project to add:&lt;br /&gt;
* New package types. For example, assets such as materials, nodegroups, texture collections, or even themes.&lt;br /&gt;
* A web interface for viewing repositories through a browser, making it easier to report bugs and request features in addons. (again, similar to [https://atom.io/packages Atom])&lt;br /&gt;
* Perhaps even a way for Blender to upgrade itself?&lt;br /&gt;
&lt;br /&gt;
=== Deliverables ===&lt;br /&gt;
&lt;br /&gt;
* Integrated UI allowing:&lt;br /&gt;
** Searching of packages&lt;br /&gt;
** Download and Installation of packages&lt;br /&gt;
** Update of installed packages&lt;br /&gt;
** Addition of package repositories&lt;br /&gt;
** Preliminary mockup of how this could look:&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-width:300px;&amp;quot;&amp;gt;&lt;br /&gt;
[[{{ns:6}}:Blender_package_manager_mockup_v1.png|caption|Preliminary mockup]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Implementation of a repository server&lt;br /&gt;
* Documentation of UI and repository server setup&lt;br /&gt;
&lt;br /&gt;
=== Project Details ===&lt;br /&gt;
&lt;br /&gt;
'''Client'''&lt;br /&gt;
&lt;br /&gt;
The client will be completely integrated, stable, compatible, unobtrusive, and asynchronous (non-blocking) — and leave the user in control over when package-related actions take place.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Integrated&lt;br /&gt;
** From user POV, everything happens from within Blender (no need for user to use other software to install packages)&lt;br /&gt;
* Stable&lt;br /&gt;
** Gracefully handles exceptions, avoids removing old version of a package until the new version is downloaded successfully, etc.&lt;br /&gt;
** Performs checks for free space, write permissions&lt;br /&gt;
* Compatible&lt;br /&gt;
** Use existing addon installation methods; addons will be stored on disk just as they are currently.&lt;br /&gt;
** Be able to handle installation of addons created prior to the introduction of a package management system (be backwards compatible)&lt;br /&gt;
** Ensure it can be extended for new package types and try to gracefully handle unknown inputs which could be valid in the future (be forwards compatible)&lt;br /&gt;
* Unobtrusive&lt;br /&gt;
** Inform user of actions being taken/progress without modal popups or anything against Blender UX paradigms. (progress bar/reports in header should work well)&lt;br /&gt;
* Asynchronous&lt;br /&gt;
** Work in the background, allowing user to click “update all” and go back to modeling while addons are updated.&lt;br /&gt;
* User Control&lt;br /&gt;
** All actions are initiated by the user in order to avoid stealing precious CPU cycles or IO time during processing intensive tasks such as lighting or material creation — with the possible exception of an option to automatically refresh package lists and notify if updates are available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The client will:&lt;br /&gt;
* Store complete package lists from all known repositories (allows quick searching)&lt;br /&gt;
* Provide a way for the user to add new repositories (in the form of a URL)&lt;br /&gt;
* Decide which version of a given addon to install, if multiple are available (possibly with input from user)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Server'''&lt;br /&gt;
&lt;br /&gt;
The goal for the server side is to be as simple as possible, without compromising in performance or client usability.&lt;br /&gt;
&lt;br /&gt;
A server will serve a repository which consists of:&lt;br /&gt;
* A directory containing the package files, and a JSON file which has:&lt;br /&gt;
** Information about the repository itself (name, maybe maintainer info, etc)&lt;br /&gt;
** A list of all packages in the repo, with information about each package, such as:&lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
** &lt;br /&gt;
*** Name&lt;br /&gt;
*** Type (e.g. “addon”, “theme”)&lt;br /&gt;
*** Version&lt;br /&gt;
*** Compatible Blender version (for now keep it simple as it is in bl_info, but this could potentially support comparators like “&amp;gt;=2.75, &amp;lt;2.8” in the future)&lt;br /&gt;
*** Author info, etc. (could possibly be pulled from bl_info)&lt;br /&gt;
*** Size on disk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Package'''&lt;br /&gt;
&lt;br /&gt;
A package is simply an archive (.tar.gz? I believe Blender uses gzip already for compressing .blends), which contains the files to be installed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Package type handler'''&lt;br /&gt;
&lt;br /&gt;
A “package type handler” handles tasks (such as installation, uninstallation) for a particular type of package. For instance, there would be one for addons, one for themes, etc. This should provide a flexible place for support for additional package types to be added in the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some operations a handler would provide:&lt;br /&gt;
* Install package (i.e. copy files)&lt;br /&gt;
* Uninstall package (this could move the package to a temporary “holding” area to allow quick rollbacks. The need for this will depend on if repositories will support storing multiple versions of the same package)&lt;br /&gt;
* Pre-install check (ensure destination is writable, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Example installation process'''&lt;br /&gt;
&lt;br /&gt;
How an installation might work:&lt;br /&gt;
# Ensure package list is up to date (do this efficiently to avoid redownloading same info; caching, conditional requests?)&lt;br /&gt;
# Check for available space, write permissions, etc. using the appropriate package type handler&lt;br /&gt;
# Download package tarball using name (or possibly a uuid or generated url) provided in the package list.&lt;br /&gt;
# Install archive contents with the method provided by the relevant package type handler.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Project Schedule ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before May 30: ''(In spring classes)''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left:0.5in;margin-right:0in;&amp;quot;&amp;gt;Get familiarized with any automated testing practices in use with Blender.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left:0.5in;margin-right:0in;&amp;quot;&amp;gt;Implement a simple UI to get familiarized with how Blender’s UI works.Play around with getting asynchronous code running inside Blender.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Week 1-2: ''(Finishing up spring classes)''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left:0.5in;margin-right:0in;&amp;quot;&amp;gt;Start exploring ways of communicating with server without blocking Blender UI, such as asyncio, threads, multi-processing, or perhaps Blender’s task running (i.e. how rendering and baking work).&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Week 3: (''Available full time'')&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left:0.5in;margin-right:0in;&amp;quot;&amp;gt;Implement package list generation.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Week 4-6: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left:0.5in;margin-right:0in;&amp;quot;&amp;gt;Implement fetching/caching of packagelist, actual asynchronous downloading of packages, package installation.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Week 7: Implement search, add UI which allows for browsing, installing, and uninstalling packages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Week 8-9: Implement multiple repo support, auto-updating of repositories.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Week 10: Start documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Week 11: Polish rough edges&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Final week: Finish documentation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Second evaluation targets====&lt;br /&gt;
&lt;br /&gt;
For the second evaluation I intend to have a working, if simplistic, package manager. It should have the following functionality:&lt;br /&gt;
&lt;br /&gt;
* An interface to browse packages contained in a packagelist which is downloaded from a configurable URL.&lt;br /&gt;
** Add URL preference - 30 minutes&lt;br /&gt;
** Add Packagelist downloading - 2 hours&lt;br /&gt;
** Add Packagelist browsing interface - 1 or 2 days&lt;br /&gt;
* The ability to install and uninstall packages from the list browsing interface&lt;br /&gt;
** Add uninstall function - 5 hours&lt;br /&gt;
** Add operator to expose uninstall function to interface - 3 hours&lt;br /&gt;
* The ability to search/filter packages&lt;br /&gt;
** 1 or 2 days&lt;br /&gt;
* User level documentation&lt;br /&gt;
** 1 day&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Bio ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I am a high school senior going to college full-time in the fall of 2017. In the meantime, I’m also studying computer science/software engineering at the University of Oregon, in the US. I enjoy taking part in community coding events; I’ve participated in local CoderDojos and hackathons. I’m also a moderator on [http://blender.stackexchange.com/ blender.stackexchange.com], and have been an avid Blenderhead since 2.57. In fact, much of my python experience comes from writing games[[https://youtu.be/AZscMk2aofw 0]][[https://github.com/gandalf3/comp_sci_II-lab2 1]][[https://github.com/gandalf3/The-Queen-s-Workers 2]][[https://github.com/gandalf3/lone-photon 3]] in the BGE. Besides Blender and pretty much all aspects of 3D graphics, I also enjoy music and photography.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I want to do this project because I want to get more involved in Blender development, and because, as a user, I’ve been looking for an addon package manager for a long time (or at least a more organized place for addons, making it easier for developers to release them where artists can find them). I even thought of writing an addon to provide something similar before it popped up as a GSoC idea.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I’m an exclusive linux user (but I expect I’ll be able to test code on other platforms), and so have had exposure to a variety of package management implementations — and created packages for a few of them. I have some experience with HTTP (mostly with AJAX requests between JavaScript and PHP), and I’ve [https://github.com/gandalf3/multibge experimented with asyncio] before.&lt;br /&gt;
&lt;br /&gt;
That said, this will certainly be an educational experience for me. I will no doubt be learning new things as I go, but I intend to dedicate my summer entirely to Blender coding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I’ve submitted one or two (very) small patches to Blender in the past, for instance: [https://developer.blender.org/D754 colorized menu shadows] and [https://developer.blender.org/D822 additional theming control]. So far nothing landed in master (except [https://developer.blender.org/D712 remove auto-disable renderborder]), but I hope to change that soon! I’ve also contributed [https://developer.blender.org/search/query/rFiQgP9PDPY0/#R some documentation] (and according to stackexchange, helped 4.6 million people with their blender questions).&lt;/div&gt;</summary>
		<author><name>wiki&gt;Gandalf3</name></author>
		
	</entry>
</feed>