Difference between revisions of "User:BrentNewland"

From ReactOS Wiki
Jump to: navigation, search
m
m (ReactLive? InteractOS?)
 
(23 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
=Important Links=
 
*http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet
 
*http://en.wikipedia.org/wiki/Wikipedia:Cheatsheet
 
*http://www.reactos.org/wiki/Templates
 
*http://www.reactos.org/wiki/Templates
 +
*http://www.brandonsavage.net/encouraging-open-source-contribution/
  
 +
==Need to write rapps scripts for==
 +
Amaya W3C browser (supposed to be light fast stable and standards compliant)
 +
*http://www.w3.org/Amaya/User/BinDist.html
 +
 +
 +
=Updates=
 +
 +
*5/16* Sorry about the lack of updates, I lost internet access for a few months due to my phone's USB port breaking (I was also limited to a netbook for a while). I have high speed and a decent laptop, so I'll try to get some more done.
 +
 +
*3/25* I've spent the earlier part of the week creating ~220 RAPPS entry files. Spent the latter half doing some research on GIT and Subversion, specifically using svn:externals (link all the folders you aren't modifying in your branch to the trunk version so you benefit constantly from trunk updates)
 +
 +
=Plan=
 
*Right now I'm starting by going through every changelog and adding the information to each file page (as best I can) to establish a brief official history. I am also adding a link to the revision log for every file.
 
*Right now I'm starting by going through every changelog and adding the information to each file page (as best I can) to establish a brief official history. I am also adding a link to the revision log for every file.
 
*Next, once I've worked my way up to the 0.3.14 changelog, I will go filepage by filepage, determining exactly what that file does, including a detailed explanation, what components it fits into, any external references,a rostests list, and any current bugs (see [[Explorer.exe]] for an example bug list).
 
*Next, once I've worked my way up to the 0.3.14 changelog, I will go filepage by filepage, determining exactly what that file does, including a detailed explanation, what components it fits into, any external references,a rostests list, and any current bugs (see [[Explorer.exe]] for an example bug list).
Line 48: Line 62:
 
*Create a ReactOS updater and appmarket using PHP
 
*Create a ReactOS updater and appmarket using PHP
 
*Create an external web interface a-la Windows Home Server using PHP
 
*Create an external web interface a-la Windows Home Server using PHP
 +
**Music Server http://code.google.com/p/streeme/
 
*[http://www.reactos.org/forum/viewtopic.php?p=83509#p90349 Get Active Desktop working]
 
*[http://www.reactos.org/forum/viewtopic.php?p=83509#p90349 Get Active Desktop working]
 
**Simple GUI program that has no borders or title bar or menus, all it does is fill 100% with an HTML page (embedded using mshtml?, or webkit or gecko)
 
**Simple GUI program that has no borders or title bar or menus, all it does is fill 100% with an HTML page (embedded using mshtml?, or webkit or gecko)
Line 54: Line 69:
 
*then get [http://adp.sourceforge.net|my Active Desktop Portal] program (made with PHP) updated and expanded
 
*then get [http://adp.sourceforge.net|my Active Desktop Portal] program (made with PHP) updated and expanded
  
 +
 +
 +
=Misc Links=
  
 
*http://en.wikipedia.org/wiki/List_of_performance_analysis_tools#C_and_C.2B.2B
 
*http://en.wikipedia.org/wiki/List_of_performance_analysis_tools#C_and_C.2B.2B
Line 69: Line 87:
 
*smscoin seems only good option, others require $200-$400 paid per month (by the project)
 
*smscoin seems only good option, others require $200-$400 paid per month (by the project)
 
**But ReactOS could receive as little as 25% of the donation
 
**But ReactOS could receive as little as 25% of the donation
phpbb+reddit
 
  
  
Infobox for Wiki and extensions
+
=Misc Thoughts=
*http://www.etcwiki.org/wiki/Install_infobox
+
These are just notes I'm keeping as I explore different avenues.
**alternate at http://wikiexplora.com/index.php/Infobox_in_Mediawiki
+
 
*http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Transwiki
+
==Things a new programmer can do==
*http://en.wikipedia.org/wiki/Wikipedia:Navigation_templates
+
*Pick a ReactOS source code file, insert detailed comments into it, create a patch, submit it on BugZilla
*http://en.wikipedia.org/wiki/Wikipedia_talk:WikiProject_Transwiki
+
**This lets (some) new developers learn the code a bit before making changes that have serious impact
*http://www.mediawiki.org/wiki/Manual:Collapsible_elements
+
**Also notate any items not implemented
**Needs at least 1.1.18, ReactOS is 1.1.15
+
**Recording ROSTESTS failures when recording documentation might be useful (put a date on those)
*http://www.mediawiki.org/wiki/Extension:TODOListProgressBar
+
***Will notify people working with that file that something failed the test
*http://www.mediawiki.org/wiki/Extension:ReaderFeedback
+
***Can go through ROSTESTS every XX days and update the results
*http://www.mediawiki.org/wiki/Extension:DiscussionThreading
 
*http://www.mediawiki.org/wiki/Extension:EmbedVideo
 
**could use some custom coding, not a priority
 
*https://www.mediawiki.org/wiki/Extension:CategoryTree
 
*http://www.mediawiki.org/wiki/Manual:Importing_Wikipedia_infoboxes_tutorial
 
*http://reactos.org/wiki/index.php?title=Special:Log&dir=prev&offset=20080812154558&limit=500&type=delete&month=&year= deletion log
 
  
Go through NirSoft's website and identify programs that have featuers that would enhance ReactOS
+
===Things ReactOS might be able to do to help new programmers===
 +
*Mark more bugs in Bugzilla as [http://www.reactos.org/bugzilla/buglist.cgi?query_format=advanced&short_desc_type=allwordssubstr&short_desc=&product=Online+Services&product=ReactOS&product=ReactOS+Apps+%28rosapps%29&product=ReactOS+Build+Environment+%28RosBE%29&product=ReactOS+Tests+%28rostests%29&product=RosDbg&long_desc_type=allwordssubstr&long_desc=&bug_file_loc_type=allwordssubstr&bug_file_loc=&bug_status=UNCONFIRMED&bug_status=NEW&bug_status=REOPENED&bug_severity=minor&bug_severity=trivial&bug_severity=enhancement&emailtype1=substring&email1=&emailtype2=substring&email2=&bugidtype=include&bug_id=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&cmdtype=doit&order=Reuse+same+sort+as+last+time&field0-0-0=noop&type0-0-0=noop&value0-0-0= "Enhancements"] (or trivial or minor) and direct new programmers to take a look at the list and submit a patch
  
Replace ReactOS Registry with MySQL
+
==Guides==
*Convert any system registry calls or API registry functions to go through an abstraction layer or wrapper
+
Guide: Compiling your Windows program with WineLib (to run on a different OS)
*Abstraction layer will connect to Windows Registry (service), or to other database specially configured
+
*[http://wiki.winehq.org/Winelib Wine Wiki Winelib]
**e.g. MySQL, MSSQL, PostgreSQL, etc,
+
*[http://ftp.winehq.org/pub/wine/docs/en/winelib-guide.html Winelib User's Guide]
*Will require changes to ReactOS and database server
+
*[http://www.winehq.org/docs/winelib-guide/winelib-introduction Winelib Introduction]
*Will not be usable for first stages of boot (until database is started)
 
  
  
No bitmap resources in ReactOS
+
==No bitmap resources in ReactOS==
*All vector Graphics
+
*All [http://en.wikipedia.org/wiki/Vector_graphics vector Graphics]
 +
**[http://en.wikipedia.org/wiki/SVG SVG]
 +
*important for scaling to different resolutions and DPI's (quality is always consistent)
 +
*Should be designed at very high resolutions (going high>low resolution for vector should look better than low>high)
 
*includes icons
 
*includes icons
 
*includes items like "X" to close screen
 
*includes items like "X" to close screen
 
*of course, ReactOS should support bitmap resources for other programs, but itself shouldn't use any
 
*of course, ReactOS should support bitmap resources for other programs, but itself shouldn't use any
 +
*Essentially [http://en.wikipedia.org/wiki/Windows_Presentation_Foundation Windows Presentation Foundation] for ReactOS explorer?
  
[http://freetype.org/ Freetype] Fonts (an OpenType implementation, cross platform) and [http://www.pango.org/ Pango]
+
===[http://freetype.org/ Freetype] Fonts (an OpenType implementation, cross platform) and [http://www.pango.org/ Pango]===
 
*essentially vector graphic fonts
 
*essentially vector graphic fonts
 +
*ReactOS already supports TTF
  
Cairo graphics library
+
===[http://en.wikipedia.org/wiki/Cairo_(graphics) Cairo graphics library]===
*2D vector graphics library, supports Win32 GDI+
+
*2D vector graphics library with hardware acceleration
 
*Could be used to apply shading, gradients, and color blending (which vector graphics normally can't do) to Ui elements
 
*Could be used to apply shading, gradients, and color blending (which vector graphics normally can't do) to Ui elements
 +
*GPL, C, win32 GDI (or Direct2D) compatible
 +
*Used by GTK+ project
 +
**Crazy to think of using GTK+ for explorer?
  
 
+
===ReactOS Fonts===
 
 
ReactOS Fonts
 
 
*[http://en.wikipedia.org/wiki/DejaVu_fontsDejaVu Fonts]
 
*[http://en.wikipedia.org/wiki/DejaVu_fontsDejaVu Fonts]
 
**DejaVuSans-Bold.ttf
 
**DejaVuSans-Bold.ttf
Line 160: Line 177:
 
*[http://en.wikipedia.org/wiki/Droid_(font) Droid font]
 
*[http://en.wikipedia.org/wiki/Droid_(font) Droid font]
 
**[http://en.wikipedia.org/wiki/Roboto Roboto], Android 4 font
 
**[http://en.wikipedia.org/wiki/Roboto Roboto], Android 4 font
 +
*[http://www.devx.com/opensource/Article/21235/0/page/2 Caslon Roman]
 +
*[http://en.wikipedia.org/wiki/Junicode Junicode]
 +
*[http://en.wikipedia.org/wiki/Linux_Libertine Linux Libertine]
 +
 +
=ROSCMS=
 +
I've been thinking about checking out a branch of ROSCMS and doing some upgrades for it.
 +
 +
==Mediawiki Latest==
 +
*[http://www.google.com/webhp?sourceid=chrome-instant&ix=sea&ie=UTF-8&ion=1#hl=en&output=search&sclient=psy-ab&q=mediawiki%20themes&oq=&aq=&aqi=&aql=&gs_l=&pbx=1&fp=dcfb21c058468efb&ix=sea&ion=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&biw=1024&bih=677 theme search]
 +
*Use MediaWiki for storing forum posts
 +
**http://area51.phpbb.com/phpBB/viewtopic.php?f=78&t=35496
 +
**Allows revisioning
 +
*Setup MediaWiki to use phpbb markup as well (meaning possible wiki formatting in forums)
 +
**Make phpBB markup allow [[ ]] for linking
 +
***topics [[t15432]]
 +
***posts [[p999321]]
 +
***bugzilla bugs [[b3416]]
 +
***wine bugs [[wb22917]]
 +
***commits [[r56137]]
 +
***Wine commits [[wr99728]]
 +
***Wine Wiki [[wwAbout_Wine]]
 +
***otherwise it goes to the wiki
 +
*Use phpBB's text editor
 +
*Show categories for search results
 +
 +
==Infobox for Wiki and extensions==
 +
*http://www.etcwiki.org/wiki/Install_infobox
 +
**alternate at http://wikiexplora.com/index.php/Infobox_in_Mediawiki
 +
*http://en.wikipedia.org/wiki/Wikipedia:WikiProject_Transwiki
 +
*http://en.wikipedia.org/wiki/Wikipedia:Navigation_templates
 +
*http://en.wikipedia.org/wiki/Wikipedia_talk:WikiProject_Transwiki
 +
*http://www.mediawiki.org/wiki/Manual:Collapsible_elements
 +
**Needs at least 1.1.18, ReactOS is 1.1.15
 +
*http://www.mediawiki.org/wiki/Extension:TODOListProgressBar
 +
**Not as cool: http://www.mediawiki.org/wiki/Extension:Tasks_Extension
 +
*http://www.mediawiki.org/wiki/Extension:ReaderFeedback
 +
*http://www.mediawiki.org/wiki/Extension:DiscussionThreading
 +
**http://www.mediawiki.org/wiki/Extension:DPLforum
 +
*http://www.mediawiki.org/wiki/Extension:EmbedVideo
 +
**could use some custom coding, not a priority
 +
**http://www.mediawiki.org/wiki/Extension:VideoFlash
 +
*https://www.mediawiki.org/wiki/Extension:CategoryTree
 +
**or maybe http://www.mediawiki.org/wiki/Extension:Treeview
 +
*http://www.mediawiki.org/wiki/Manual:Importing_Wikipedia_infoboxes_tutorial
 +
*[http://reactos.org/wiki/index.php?title=Special:Log&dir=prev&offset=20080812154558&limit=500&type=delete&month=&year= ReactOS Wiki deletion log]
 +
*[http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi Syntax Highlighting]
 +
 +
==phpBB latest==
 +
*phpBB should handle wiki page talk and news comments
 +
**do this by having a separate table for wiki posts
 +
*phpBB should handle the primary site templates/themes (the headers and footers and sidebars)
 +
**should have several themes available
 +
*recaptcha for registration
 +
*phpBB handles user database
 +
**http://www.mediawiki.org/wiki/Extension:PHPBB/Users_Integration
 +
**http://www.mediawiki.org/wiki/Extension:Phpbb_Single_Sign-On
 +
**http://www.phpbb.com/community/viewtopic.php?f=70&t=2099531
 +
*Display bugzilla bugs in subforums, and allow filing and full markup
 +
*Display (optional) Wiki as a forum
 +
*Display SVN tree as forum
 +
*Ability to put posts in multiple forums http://area51.phpbb.com/phpBB/viewtopic.php?f=75&t=32103&start=20
 +
**e.g. "Feedback" forum and "ReactX" talk page
 +
*Reddit/digg style topic and comment voting
 +
**Optional views for both topics and forums to be viewed classic (by date), threaded by date, or threaded by votes (like Reddit)
 +
phpbb+reddit (votes, hiding comments, threading)
 +
 +
==phpbb styles==
 +
*Need some dark themes
 +
*Style should extend to all aspects of site, including ViewVC/Git
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1070
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1064
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=60
 +
**Switch some colors, orange to blue
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1061
 +
**switch green to blue
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=325
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=545
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=28
 +
**With moderate modifications
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=195
 +
**Change red to blue
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=58
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=44
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1065
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=445
 +
**http://www.phpbb.com/styles/demo/3.0/?style_id=1068
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1062
 +
**Change green to blue
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1057
 +
**http://www.phpbb.com/styles/demo/3.0/?style_id=995
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1102
 +
**Very cool!
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=14
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=1060
 +
**professional
 +
*http://www.phpbb.com/styles/demo/3.0/?style_id=4
 +
 +
 +
==ViewVC?==
 +
*Support wikibbcode in viewvc
 +
*Give it a lot more features (right click?)
 +
*Show commits by developer and in general in calendar style
 +
**either web.archive.org style or something showing number of commits
 +
 +
===PHP===
 +
ViewVc is written in Python, something PHP would be nice
 +
*''All web clients that I know of are read only, meaning that you can only browse the files, make diffs, set up RSS feeds, but you can not modify the repository in any way.''
 +
**How about changing that?
 +
**https://jeremy.visser.name/2007/05/doctorsvn-01-released/ Think it accesses SVN binaries on host directly
 +
**https://github.com/myelin/pure-php-subversion basic checkout and commit
 +
**http://www.php.net/manual/en/ref.svn.php
 +
***http://pecl.php.net/package/svn
 +
***http://pear.php.net/package/VersionControl_SVN/ (uses SVN executable)
 +
**[http://www.phpclasses.org/package/3427-PHP-Manipulate-files-in-a-subversion-repository.html PHP Manipulate files in an SVN repository] (Uses SVN executable)
 +
 +
*Administer the SVn server http://svnmanager.org
 +
**http://svnmanager.sourceforge.net/index.php
 +
**http://www.insanefactory.com/if-svnadmin/
 +
 +
*WebSVN http://www.websvn.info/features/
 +
**Used by official Tigris SVN project
 +
**Looks nice, [http://trunk.websvn.info/listing.php?repname=WebSVN&path=%2Ftrunk%2F&#a0b40758157c8f16fa703ca3be466fa8a demo]
 +
*Trac http://trac.edgewall.org/browser
 +
**Kinda ugly, slow browsing
 +
*http://www.indefero.net/tour/
 +
**http://www.indefero.net/open-source/
 +
**Same problems as Trac
 +
**http://www.webresourcesdepot.com/muti-project-software-forge-with-php-indefero/
 +
*[http://www.phpclasses.org/package/4270-PHP-Retrieve-files-from-an-SVN-repository-in-pure-PHP.html Retrieve files from an SVN in pure PHP]
 +
*http://www.roojs.com/blog.php/View/86/.html
 +
*http://svn-web-control.sourceforge.net/
 +
*http://viewsvn.fealdia.org/
 +
*http://websvnadmin.sourceforge.net/
 +
*http://svndashboard.sourceforge.net/
 +
*http://groogle.sourceforge.net/
 +
 +
==[http://svn.reactos.org/web/trunk/www/www.reactos.org/testman/ Testman]==
 +
*Would be nice to include the latest failed tests on a component's wiki page
 +
*Would also be nice to have historical charts, and separate components in general
 +
*Integration into API documentation (and/or doxygen) to show current status of API and areas where new tests could be written
 +
 +
==Subversion==
 +
*Complete CVS server written in PHP http://sourceforge.net/projects/asvcs/
 +
*Deltaweb, another http://sourceforge.net/projects/deltaweb/
 +
**https://www.ohloh.net/p/deltaweb
 +
*http://www.brandonsavage.net/why-great-development-tools-dont-seem-to-be-written-in-php/
 +
 +
 +
 +
==BugZilla==
 +
*http://eaves.ca/2011/08/22/design-matters-looking-at-a-re-themed-bugzilla/
 +
*https://wiki.mozilla.org/Bugzilla:Pretty
 +
*'''Currently version 3.0.11; latest version is [http://www.bugzilla.org/ 4.2]'''
 +
**http://svn.reactos.org/web/trunk/www/www.reactos.org/bugzilla/Bugzilla/Constants.pm
 +
***search for "use constant BUGZILLA_VERSION"
 +
**[http://www.bugzilla.org/status/changes.html changelog]
 +
**http://www.bugzilla.org/releases/4.0.3/release-notes.html
 +
***'''Since Bugzilla 3.0, almost every major user interface in Bugzilla has been redesigned, the WebServices have evolved enormously, there's a great new Extensions system, and there are hundreds of other new features.'''
 +
**Upgrading http://www.bugzilla.org/docs/4.2/en/html/upgrade.html
 +
*https://github.com/a-v-k/phpBugTracker
 +
 +
BugZilla: Subcomponents based off Wiki subcomponents (since the wiki should have an extensive list at that point)
 +
*Would have to go through old and current bugs and recategorize
 +
*Would make it easier and more accurate to include bugs on Wiki
 +
**which would result in more bugs getting attention
 +
*link on page directing user to the Wiki
 +
*Option to include more than one category (some components do span multiple categories)
 +
 +
==ROSCMS==
 +
*Future Integration with rapps (choose programs to install online, like android market)
 +
*Allow users to choose different background and transparency
 +
**Fixed background (doesn't scroll) with partially transparent tables
 +
*inspiration for professional aspects: http://www.projectpier.org/project-files
 +
*Statistics (need to do component and page tracking with public counters)
 +
**http://www.chiliscripts.com/scripts/chilistats/
 +
**http://slimstat.net/
 +
**http://piwik.org/
 +
**http://www.openwebanalytics.com/
 +
**http://www.quate.net/grape
 +
**http://www.php-web-statistik.de/
 +
*Image Manipulation http://stefangabos.ro/php-libraries/zebra-image/
 +
*news post and blog commenting
 +
*some facebook features (comment display, ?)
 +
**http://www.oxwall.org/
 +
**http://peoplepods.net/
 +
**http://www.webresourcesdepot.com/6-promising-and-open-source-social-networking-softwares-to-create-your-own/
 +
*TODO List http://getsurreal.com/surrealtodo/
 +
*File Upload http://blueimp.github.com/jQuery-File-Upload/
 +
*IdeaTorrent http://ideatorrent.org/
 +
**used for Ubuntu Brainstorm
 +
Win32 API items: would be nice to include on doxygen which individual entries in a source code file failed the ROSTest
 +
 +
==Search==
 +
*Curent search for almost everything: poor
 +
*[http://sphinxsearch.com/about/ Sphinx] - C++, Win32/Linux/Mac, works with mysql
 +
**http://www.ralree.info/2007/9/15/fulltext-indexing-wikipedia-with-sphinx/
 +
**http://www.mediawiki.org/wiki/Extension:SphinxSearch
 +
**http://www.phpbb.com/community/viewtopic.php?f=70&t=796875
 +
**https://github.com/tim4dev/bugzilla-sphinx-integration-example
 +
**might even be useful for ReactOS search, since it's language independent
 +
**Example: http://www.phpbb.com/search/?q=sphinx
 +
*As a backup http://www.mediawiki.org/wiki/Extension:Zend_Search_Lucene_for_MediaWiki
 +
**Fewer features than Sphinx, slower
 +
*Forms http://stefangabos.ro/php-libraries/zebra-form/
 +
*Something like this for C? http://www.wiode.org/
 +
*Some form of advanced search for mailing lists
 +
*should pull all search results into a table and allow subsearches on it
 +
*Need better sorting and URl based queries and sorting (so it doesn't time out)
 +
 +
==MailMan==
 +
*[http://sourceforge.net/projects/php-mailman/ Mailman PHP interface]
 +
*Would like to view MailMan online archives in threaded view and flat view, and would like (optionally) to display them as if they were a forum
 +
 +
 +
==Misc Notes==
 +
*Minimal in-script modifications (make upgrades easier)
 +
*Maybe use Symfony2 (http://symfony.com) as a framework to connect to everything
 +
**http://qdpm.qds-team.com/
 +
**Seems more for classes than working chunks of code
 +
*CodeIgniter http://codeigniter.com/
 +
**http://cibonfire.com/
 +
**Wrappers (control panels, news pages, forums, CMS)
 +
**content (actual forum dispaly modules, blog posts, wiki, etc.)
 +
**libraries (user authentication, text parsing, database abstraction, jquery, search, charts, templates, etc.)
 +
***http://usercake.com/
 +
***http://backpress.org/
 +
***'''[http://phpsavant.com/ Savant Template Engine]'''
 +
**Plugins (rich text editor, forum mods, voting module, ???)
 +
***http://www.webresourcesdepot.com/10-password-strength-meter-scripts-for-a-better-registration-interface/
 +
**Servers (see below)
 +
*jquery paginated tables http://www.webresourcesdepot.com/slick-ajaxed-datagrids-with-jquery-jtable/
 +
**Useful for all sections of site (especially wiki)
 +
*Dynamically sized images http://adaptive-images.com/
 +
*Download Info Library http://jdownloadplugin.com/
 +
*Cross domain PHP javascript proxy http://www.webresourcesdepot.com/cross-domain-javascript-with-simple-php-proxy/
 +
*Security http://www.webresourcesdepot.com/phpsecinfo-similar-to-phpinfo-but-focused-on-security/
 +
*iGoogle like start page http://www.picok.org/
 +
*syntax highlighter http://www.webresourcesdepot.com/11-syntax-highlighters-to-beautify-code-presentation/
 +
*[http://phpjs.org/ PHP.js]
 +
*Mouse tracking http://smt.speedzinemedia.com/
 +
*[http://blog.ircmaxell.com/2012/03/handling-plugins-in-php.html Handling Plugins in PHP code]
 +
*[http://philsturgeon.co.uk/blog/2012/03/packages-the-way-forward-for-php#.T1XrZ9iu6YI.twitter Packages for code] (instead of code as libraries or functions or something)
 +
*[http://requests.ryanmccue.info/ Simple HTTP requests]
 +
*[http://tumbledry.org/2011/08/31/9_million_hits_day_with_120 9 Million hits a day with 120MB RAM] (an excellent guideline for performance enhancing your scripts)
 +
 +
raddr2line http://svn.reactos.org/downloads/raddr2line.exe
 +
 +
==Side Projects==
 +
I've been planning on these for some time now, but given the different projects I'm working on it makes sense to make them now. I've made several of these in the past.
 +
 +
===Universal Database Abstraction/Access Layer===
 +
Need to make universal Db access layer
 +
*based on phpBB's
 +
*all major databases
 +
*basically a wrapper
 +
*Initially PHP, get people to port later
 +
**perhaps make parts more portable
 +
*http://crystal.martinrusev.net/
 +
 +
===PHP3/4/5/6 API compatibility wrapper===
 +
*Allow a PHP script written for version X to support older and newer versions
 +
*Maybe allow older scripts to work on newer PHP
 +
 +
===Open PHP web installer===
 +
*to make installing your scripts easy
 +
*A supplement to the PHP binary installer (which will allow you to install binary software on your computer with a PHP driven installer)
 +
 +
===Open Authentication Framework===
 +
*Something that can detect many installed programs (phpbb, vbb, ubb, mediawiki, wordpress, drupal, etc) and abstract their user databases
 +
*easy GUI converting or combining of different user databases
 +
*Simple and easy to use system for including auth on web pages
 +
*For external authentication: http://hybridauth.sourceforge.net/
 +
 +
===Storage Abstraction Framework===
 +
*Recognise how items like topics, forums, blog posts, etc. are stored
 +
*provide an API for a program to use that structure for its posts
 +
*not only good for new developers looking for compatibility, good for major projects and migration
 +
 +
===phpbb4===
 +
*Separate layout and style templates?
 +
**Widget templates?
 +
***Skinning a widget that can work with many mods is better than having to write many templates for one mod
 +
*Perhaps something like a php implementation similar to win32 (in function, not features or scope)
 +
*Open Source, may be useful for benchmarking all this stuff http://httparchive.org/
 +
 +
=Create a full PHP interface for Win32=
 +
With as little binary reliance as possible (only native php, should work on any PHP platform)
 +
 +
==ReactLive? InteractOS?==
 +
I've been considering beginning with a web based desktop (that looks ReactOS-like, since ReactOS looks like windows). This would be useful as an alternate version of ROSCMS. It would serve a good basis for a larger-scale implementation.
 +
*taskbar
 +
*Could do a whole desktop emulator, would allow stuff like chat and would definitely be functional
 +
*http://en.wikipedia.org/wiki/Web_desktop#Comparison_of_web_desktops
 +
*http://oos.cc/login.html
 +
**http://icube.at/oos.jsp?id=2
 +
*Maybe just base on '''eyeOS 1.9'''
 +
**OneEye (http://lars-sh.de/) 0.8 supposed to be a continuation, 0.9 supposed to be new
 +
**EyeOS Themes http://eyeos-apps.org/index.php?xcontentmode=814
 +
**Gotta have some portal themes (because why not)
 +
**Not to mention ReactOS, and android, and ubuntu, and whatnot
 +
*http://forums.eyeos.org/index.php?topic=121.5
 +
*http://en.wikipedia.org/wiki/XOS_Webtop
 +
*https://xos.xproduct.net/desktop/xoslogin/main.php
 +
*http://www.lifehack.org/articles/technology/your-desktop-anywhere-21-web-based-desktops.html
 +
*http://www.lucid-desktop.org/
 +
**http://www.webresourcesdepot.com/open-source-php-webos-lucid-desktop/
 +
*http://qwikioffice.com/
 +
*http://www.webresourcesdepot.com/desktop-like-web-interfaces-qwikioffice/
 +
*Integration with all kinds of services
 +
*"Online Command Prompt" (maybe emulator)
 +
**http://terminal.jcubic.pl/tilda-demo.html
 +
**http://code.google.com/p/jscmd/
 +
**http://binaerpilot.no/alexander/
 +
*http://gigaom.com/collaboration/your-office-in-the-clouds-the-best-online-virtual-desktops/
 +
**http://hashemzahran.com/cloud-computing-7-online-virtual-desktop/
 +
**http://lpc1.clpccd.cc.ca.us/lpc/mdaoud/webtops2/index.html
 +
**http://zomobo.net/play.php?id=tGOfPzPlUPY
 +
*Include some online game console emulators
 +
*custom pandora client
 +
*google Voice
 +
*rss reader
 +
**http://newswall.mayoco.de/index_e.php
 +
*http://rsslounge.aditu.de/
 +
*All chat platforms
 +
*All major e-mail and storage services
 +
*Cloud http://www.simplecloud.org/
 +
**http://simplecloudapi.org/
 +
*Encrypted Chat https://crypto.cat/
 +
*file Manager http://pgrfilemanager.sourceforge.net/
 +
**http://www.ajaxplorer.info/
 +
*System info http://phpsysinfo.sourceforge.net/
 +
*Picture taker http://code.google.com/p/jpegcam/
 +
**http://blog.vamapaull.com/?p=355
 +
*email/"social" http://www.conjoon.org/
 +
*[http://codetyper.tk/ Elite Programming]
 +
**https://github.com/codejoust/codetyper
 +
 +
===Virtual Machine===
 +
Makes sense to be able to access your virtual machines through the interface for expedited testing.
 +
 +
====VirtualBox====
 +
*phpVirtualBox http://code.google.com/p/phpvirtualbox/
 +
**Control Virtualbox from the browser
 +
**Another: https://github.com/nitrotm/virtualbox-php
 +
**IIRC VirtualBoxWebSrv needs to run as a service, but has to be local user and interact with desktop
 +
***Use PHP to launch and monitor vboxwebsrv?
 +
***Ping process occasionally to see if it still responds and restart it if not?
 +
***Need to make sure it can start/stop vm's cleanly on shutdown or reboot
 +
***http://code.google.com/p/virtualboxservice/
 +
*http://www.virtualbox.org/manual/ch07.html
 +
 +
====VMWare Player====
 +
NO! Only paid versions include either VNC/RDP access or the WSX feature (which embeds it in the browser)
 +
 +
====Server Side====
 +
Java Remote Desktop Client to access VM
 +
*ProperJavaRDP - An RDP client written in Java
 +
**Can access your virtual machine from anywhere
 +
**IP and Port are saved in ROSCMS
 +
**http://kb.juniper.net/InfoCenter/index?page=content&id=KB16835&cat=ssl_vpn&actp=LIST&smlogin=true
 +
**Later: Modify to allow recording of stream and making screenshots
 +
***Need to edit the recordings https://sourceforge.net/projects/moviemasher/
 +
***Gets stored in a PHP image gallery script so you can browse your pictures to attach to a bug report
 +
***Take a screenshot http://www.javalobby.org/java/forums/t16400.html
 +
**Need Java-Getopt-1.0.13 http://download.java.net/maven/2/gnu/getopt/java-getopt/1.0.13/
 +
**Need log4j-java1.1 http://logging.apache.org/log4j/1.2/download.html
 +
**Need all files from http://sourceforge.net/projects/properjavardp/files/properjavardp/1.1/
 +
**Needs to be modified - opens as windowed program ("extends frame") to an embedded applet ("extends applet")
 +
***Eliminate the main method in the application. Do not construct a frame window for the application. Your application will be displayed inside the browser.
 +
***Move any initialization code from the frame window constructor to the init method of the applet. You don't need to explicitly construct the applet object.the browser instantiates it for you and calls the init method.
 +
***Remove the call to setSize; for applets, sizing is done with the width and height parameters in the HTML file.
 +
***Remove the call to setDefaultCloseOperation. An applet cannot be closed; it terminates when the browser exits.
 +
***If the application calls setTitle, eliminate the call to the method. Applets cannot have title bars. (You can, of course, title the web page itself, using the HTML title tag.)
 +
***Don't call setVisible(true). The applet is displayed automatically.
 +
***http://java.sun.com/developer/technicalArticles/Programming/TurningAnApplet/
 +
***http://www.cs.vassar.edu/~walter/Applets/balloonapplet/framesandapplets.html
 +
 +
====Client Side====
 +
Install a small server with PHP
 +
http://stackoverflow.com/questions/627965/serial-comm-with-php-on-windows
 +
*Need to be able to take serial port data, stream to server, and allow to send commands back
 +
**Capturing serial port data http://stackoverflow.com/questions/627965/serial-comm-with-php-on-windows
 +
**Send to server which writes it to text file
 +
Quick access buttons for debugging
 +
 +
==Apps==
 +
**http://blogs.gnome.org/alexl/2011/03/15/gtk-html-backend-update/
 +
**Browser: Password Manager http://www.clipperz.com/open_source/clipperz_community_edition
 +
*[http://www.adayinthelifeof.nl/2010/07/30/creating-a-traceroute-program-in-php/ Traceroute]
 +
**[http://www.theworldsend.net/php-trace.php another]
 +
*WakeOnLan
 +
**[http://www.hackernotcracker.com/2006-04/wol-wake-on-lan-tutorial-with-bonus-php-script.html Script 1]
 +
**http://stackoverflow.com/questions/6055293/wake-on-lan-scipt-that-works
 +
**http://sourceforge.net/projects/wolviaphp/
 +
*Would like to read and reply to android/ios/winmo text messages from the computer
 +
**http://code.google.com/p/android-smspopup/
 +
*Would like to be able to play games too
 +
**http://www.emuparadise.me/playonline.php
 +
**http://www.google.com/search?q=online+console+emulator
 +
**http://www.atariage.com/forums/topic/129627-online-emulators-for-classic-consoles-and-old-computers/
 +
*[http://en.wikipedia.org/wiki/TorrentFlux BitTorrent Client] (need to write around its python dependency)
 +
*[http://www.purplepixie.org/phpping/ Ping]
 +
**[http://birk-jensen.dk/2010/09/php-ping/ Another Ping]
 +
**[http://phpping.maroszek.org/ Another Ping]
 +
**[http://www.theworldsend.net/php-ping.php Another Ping]
 +
*[http://sourceforge.net/projects/phpchrystal/ What is this?]
 +
*[https://github.com/docunext/pbooks PBooks Open Source Bookkeeping Software]
 +
 +
===A Breed Apart===
 +
*[http://cweiske.de/phpgtk_apps.htm#wlanscanner Wireless LAN Scanner] and connection tool
 +
 +
==Servers==
 +
===SMTP/POP/IMAP===
 +
Mail Server http://dd32.id.au/2011/10/14/php-based-mail-server-release-day/
 +
*Client: squirrelmail.org
 +
*http://phpop3clean.sourceforge.net/
 +
*https://github.com/flashmob/Guerrilla-SMTPd
 +
*[http://squirrelmail.org/plugin_view.php?id=115 Spam Filter]
 +
*http://sourceforge.net/projects/phpsmtpd/
 +
*[http://en.wiki.gg.st/w/index.php?title=PInetd&oldid=1991 PMaild] (smpt/pop)
 +
 +
*[http://stackoverflow.com/questions/5571806/bounced-mail-handling-in-php-any-up-to-date-solutions Handling bounced mail] and other great PHP mail resources
 +
*IMAP has secure version (IMAPS) ssl
 +
*POP3 has a secure version (POP3S) ssl
 +
 +
===TFTP===
 +
*[https://github.com/wader/php-tftpserver TFTP Server]
 +
 +
===Socket Servers and Daemons===
 +
[https://launchpad.net/smartsocket Socket Server]
 +
*[http://php.net/manual/en/ref.sockets.php PHP Manual: Sockets]
 +
*[http://devzone.zend.com/209/writing-socket-servers-in-php/ Writing Socket Servers in PHP]
 +
*http://www.mombu.com/php/php/t-php-telnet-server-3919544.html
 +
*http://blog.magicaltux.net/2009/09/29/pinetd2-new-website-and-release-coming-soon/
 +
*http://www.rshields.com/?q=node/91
 +
*http://stackoverflow.com/questions/8411182/proper-and-fast-way-to-telnet-in-php-sockets-are-damn-slow-or-how-to-telnet-wit
 +
*http://www.endyourif.com/how-to-create-a-socket-server-in-php/
 +
*http://code.google.com/p/tsock/
 +
*https://github.com/navarr/PHP-SocketServer
 +
**http://tech.navarr.me/2010/07/how-to-create-a-socket-server-in-php.html
 +
*http://simas.posterous.com/writing-a-php-daemon-application (good advice on process title, threading, etc.)
 +
*http://groups.google.com/group/smartsocket-discuss/browse_thread/thread/59583a6b308c2594
 +
*https://github.com/XaeroDegreaz/SmartSocket/tree/master/PHP%20(Depreciated)
 +
*[http://devzone.zend.com/article/1086 Zend article on writing socket server]
 +
*http://code.google.com/p/phpsocketdaemon/
 +
*[http://thewebdev.de/developing-a-daemon-in-php/ Developing daemons in PHP]
 +
*[http://phpdaemon.net/ PHPDaemon] '''This is one of the most important ones on the list'''
 +
**Servers Included: FastCGI, HTTP, SOCKS, MySQL Proxy, SOCKS, WebSockets, telnet, CGI (Perl/Python/Ruby?), others
 +
 +
*[http://nanoweb.si.kz/ NanoWeb]
 +
**HTTP/1.1
 +
**FastCGI, CGI and Server side includes support
 +
**Name and port based virtual hosts
 +
**htpasswd, MySQL, PostgreSQL and LDAP authentication support
 +
**Apache compatible log format, MySQL logging
 +
**Directory browsing
 +
**Proxy Server extension
 +
 +
*[http://nanoserv.si.kz/ Nanoserv] is a server daemon framework for PHP 5.1+
 +
**100% object oriented, asynchronous event-based framework
 +
**designed for high performance and robustness
 +
**native support for IPv6, TCP with SSL/TLS, UDP and Unix sockets
 +
**multiplexing and forking listeners
 +
**base handlers for raw connections, line input, Telnet, HTTP, SMTP, XML-RPC, Syslog, SOAP, DHCP and JSON-RPC
 +
**transparent inter process communication with forked handlers
 +
**high precision timers
 +
**and a lot more ...
 +
 +
===FTP===
 +
*[http://nanoftpd.sourceforge.net/ NanoFTPd]
 +
*[http://en.wiki.gg.st/w/index.php?title=PInetd&oldid=1991 SimpleFTPd]
 +
*[https://www.musc.edu/webserver/net2ftp/help.html Net2FTP] FTP Client
 +
*[http://www.phpwebftp.com/ PHPWebFTP] Another FTP client
 +
*[http://www.lighthousedocumentsolutions.com/ftp/help.html Web based FTP Client]
 +
 +
*FTP has secure version (FTPS) - ssl instead of ssh
 +
 +
===HTTP===
 +
*[http://php.webtutor.pl/en/2011/06/14/phpmultiserver-a-high-performance-http-server-written-in-pure-php/ HTTP Server]
 +
*[http://www.phpclasses.org/package/7000-PHP-HTTP-Server-written-in-pure-PHP.html Another]
 +
*[https://github.com/youngj/httpserver Another]
 +
*http://stackoverflow.com/questions/7874797/write-a-wrapper-for-ssl-encryption-to-my-simple-written-php-socket-server
 +
*http://code.google.com/p/phpd/
 +
*Integrate a nice control panel
 +
*Gotta make sure it has [http://www.php-developer.org/php-server-array-variables-tutorial-with-sample-test-script/ these]
 +
*[http://www.phpclasses.org/package/3098-PHP-Interpret-Apache-htaccess-to-emulate-mod-rewrite.html .htaccess emulator]
 +
**http://programmers.stackexchange.com/questions/24793/is-it-acceptable-to-work-around-apaches-htaccess-nonsense-in-another-language
 +
**http://xaurav.com/10-url-rewrite-php-classes/
 +
**http://elonen.iki.fi/code/misc-notes/htpasswd-php/index.html
 +
*Need to make sure it handles UDP natively (not many/any? web servers support UDP connections)
 +
 +
*Upon new request: Check if requested directory has a php.ini
 +
**if so, start a new PHP HTTP instance
 +
**Load extensions for that instance from their php.ini
 +
**Whitelist extensions only by admin
 +
**If user already has a PHP HTTP instance running for that INI file, and it's idle, use it
 +
**Should be safe to load extensions because they'll only be able to load whitelisted extensions from the server's PHP directory, and the HTTP server loads the extension, user is incapable of doing so
 +
**Disable enable_dl() in php.ini, when launching the HTTP server instance (which is completely separate f
 +
*[www.askapache.com/php/custom-phpini-tips-and-tricks.html Load php.ini separate apache]
 +
*"-c" command line option can load a specific INI file, maybe could do dynamically generated one
 +
*"-z" load a specific PHP extension
 +
*Enable PHP extensions per PHTTP server based on user settings (e.g. admin or user logs into their control panel, they can browse their code and have the xdebug extension enabled for their session as well as additional debug tools)
 +
*Spawn a new instance for a folder and hang onto it until it times out, link to user when user logged in, otherwise link to folder
 +
 +
*Primary script to act as a router/proxy
 +
**Must check status of sub-processes (test communications and check for process ID regularly)
 +
***If process not responding, wait XX seconds, try again, if still nothing, kill it
 +
**Multi-threaded so it can handle the socket communications
 +
***multiple processes can't access the same socket in Windows, so one process needs to do the job
 +
*Primary script launches [http://stackoverflow.com/questions/2458005/forking-in-php-on-windows with psexec] a new HTTP server process, depending on needs, or reuses an existing one if needed
 +
**Primary script made the socket to connect to the PHTTP server, and tells it what socket to communicate on
 +
**Primary script is essentially a router-proxy
 +
*secondary scripts each have a custom php.ini file (a temp one, based on socket for simplicity)
 +
**Modules loaded can even be configured via a mysql DB (e.g. admin gets xdebug extension loaded)
 +
*This all should ensure that different sites/configurations get the proper extensions, that they don't interfere with each other, and that they can't access each other's session data or files (and helps security, each PHTTP server can run under its own user name and permissions)
 +
 +
====SOCKS====
 +
SOCKS support (needed to  do proxies via your client browser control panel)
 +
*http://ssspl.sourceforge.net/ (perl, but see notes at bottom)
 +
*Windows requires [http://en.wikipedia.org/wiki/Generic_Security_Services_Application_Program_Interface GSSAPI]?
 +
*[http://www.phpclasses.org/package/1822-PHP-TCP-connection-wrapper-using-SOCKS-5-protocol.html TCP connection wrapper using SOCKS 5 protocol]
 +
*[http://www.phpclasses.org/package/5049-PHP-Establish-TCP-connections-via-a-SOCKS-5-server.html Establish TCP connections via a SOCKS 5 server]
 +
*[http://www.phphantom.com/scripts.html some proxy scripts] (not transparent - web based)
 +
*[http://bcable.net/ Nicely featured web based proxy]
 +
*[http://code.google.com/p/web-socks/source/browse/ web-socks] - A simple HTML 5 Websocket server written in pure PHP
 +
*[http://php-gtk.eu/en/apps/visual-proxy A php proxy] of the type needed
 +
 +
===TCP===
 +
*[http://grassi86.altervista.org/client-tcp-with-php/ TCP Client]
 +
*[http://www.tigoe.net/pcomp/code/PHP/56/ TCP Server]
 +
*[http://grassi86.altervista.org/server-tcp-with-php/ Another TCP Server] (seems more like an echo server)
 +
 +
===ECHO===
 +
*[https://gist.github.com/1408434 Echo Server]?
 +
*Easily extendable to some other protocols
 +
====DayTime====
 +
*http://en.wikipedia.org/wiki/Daytime_Protocol
 +
*Just have to return current date and time
 +
====Quote of the Day====
 +
*http://en.wikipedia.org/wiki/QOTD
 +
*Could even get quotes off the internet
 +
====TIME====
 +
====NTP====
 +
*http://en.wikipedia.org/wiki/Network_Time_Protocol
 +
 +
===WebDAV===
 +
*[http://en.wikipedia.org/wiki/SabreDAV WebDAV Server]
 +
*[http://owncloud.org/#1 OwnCloud] has several different DAV servers
 +
 +
===DHCP===
 +
*[https://github.com/adinardi/phpdhcp DHCP Server]
 +
 +
===DNS===
 +
*[http://blog.magicaltux.net/2009/02/16/php-dns-daemon/ DNS Server]
 +
*[http://en.wiki.gg.st/w/index.php?title=PInetd&oldid=1991 Wiki Page] (bottom)
 +
*http://blog.magicaltux.net/2009/02/19/your-own-php-dns-daemon/
 +
*http://blog.magicaltux.net/2010/03/19/simplednsd-new-features-bugfix/
 +
*[http://www.phpclasses.org/package/3736-PHP-Implement-a-DNS-server-in-pure-PHP.html Another]
 +
*[http://wiki.secondlife.com/wiki/LSL_http_server/examples/phpdns Another]
 +
 +
===IRC===
 +
*[http://sourceforge.net/projects/php-ircd/ IRC]
 +
*http://ostatic.com/phpircd
 +
*https://github.com/danopia/php-ircd
 +
*Don't forget ssl
 +
 +
===SSH/SFTP===
 +
[http://blog.magicaltux.net/2010/06/27/php-can-do-anything-what-about-some-ssh/ SSH Server]
 +
*this script supports SFTP
 +
**http://php.net/manual/en/function.ssh2-sftp.php
 +
**[http://kevin.vanzonneveld.net/techblog/article/make_ssh_connections_with_php/#comment_3759 SFTP]
 +
*called [http://en.wiki.gg.st/w/index.php?title=PInetd&oldid=1991 NetBatch]
 +
 +
*not the same as FTPS (tls/ssl) or FTP over SSH, or [http://www.techopedia.com/definition/26139/simple-file-transfer-protocol simple FTP]
 +
 +
===Finger===
 +
*[https://github.com/leihog/php-finger Finger] (don't think it's exactly portable or done entirely in PHP)
 +
 +
===BitTorrent===
 +
*BitTorrent server (torrential or tbdev)
 +
 +
===SNMP===
 +
*[http://www.theworldsend.net/snmpstepbystep.php SNMP with PHP]
 +
 +
 +
===Nothing comparable yet===
 +
====LDAP====
 +
LDAP (samba, active directory, ldap, wins, netbios, smb (netbios over tcp))
 +
*http://sourceforge.net/projects/phpldapadmin/?source=directory
 +
*http://sourceforge.net/projects/adldap/?source=directory
 +
*Not PHP (but useful as a starting point) http://directory.apache.org/apacheds/1.5/
 +
*Also not PHP (but useful as a starting point) http://www.samba.org/samba/docs/SambaIntro.html
 +
*http://web.archive.org/web/20031012005139/http://alcastle.com/aldap-1/credits.php
 +
 +
====Misc====
 +
*[http://en.wikipedia.org/wiki/Fast_And_Secure_Protocol Fast and Secure Protocol] (TCP replacement, pushed by amazon)
 +
*[http://en.wikipedia.org/wiki/File_Service_Protocol File Service Protocol] (FTP over UDP)
 +
**Protocol is dead but useful; how about implementing BitTorrent hashing to make sure downloads are good, and make it easier to download bad chunks
 +
**[http://en.wikipedia.org/wiki/UFTP UFTP] (another)
 +
*[http://sourceforge.net/projects/phpwhois/ Whois]
 +
**nntp
 +
***[http://pessoal.org/papercut/index.php Python NNTP server]
 +
***[http://www.csh.rit.edu/~jon/projects/pip/ Python in PHP] (probably no use)
 +
**git,  news (nntp), gopher, network time protocol (ntp), AppleShare (AFP),
 +
**imap
 +
*pptp (dial-up)?
 +
**[http://en.wikipedia.org/wiki/RADIUS RADIUS]
 +
*http://en.wikipedia.org/wiki/Service_Location_Protocol
 +
*syslog
 +
*UPNP
 +
*NFS, Server Message Block, [http://en.wikipedia.org/wiki/Apple_Filing_Protocol Apple Filing Protocol], Netware Core Protocol, Remote File System, WEBDAV, Samba (Windows), SSHFS,
 +
*[http://en.wikipedia.org/wiki/FTAM FTAM] (another file transfer model)
 +
*DC++
 +
**[http://sourceforge.net/projects/phpdccli/ Client]
 +
**[http://sourceforge.net/projects/phpdclibrary/?source=directory Library]
 +
*tor
 +
*Build server and client for all versions of [http://en.wikipedia.org/wiki/Microsoft_Notification_Protocol#MSNP19 MSNP]
 +
*[http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol XMPP]
 +
*[http://en.wikipedia.org/wiki/Google_Talk Google Talk]
 +
*[http://en.wikipedia.org/wiki/Yahoo!_Messenger_Protocol Yahoo Messenger]
 +
*[http://en.wikipedia.org/wiki/OSCAR_protocol AIM/ICQ]
 +
 +
==PHP==
 +
*[http://cweiske.de/tagebuch/ssl-client-certificates.htm Using client SSL Certs for auth]
 +
**[http://sourceforge.net/projects/phpicq/ PHPICQ]
 +
*Nice: PHP-GTK template system layer
 +
**Make PHP-GTK easier to use (but don't require it for operation)
 +
**[http://www.phpclasses.org/blog/post/162-Using-PHPGTK-to-serve-Web-Applications-to-HTML-5-Browsers.html using PHPGTK to serve GTK programs over the internet]
 +
**[http://www.devx.com/opensource/Article/21235/0/page/2 Deploy php-gtk in Windows]
 +
*would like the PHP group to take over this eventually, include some of the servers (not compiled) with the PHP distro, and let me redo their website
 +
**[http://www.reddit.com/r/PHP/comments/lr0k2/phpnet_really_needs_an_upvotedownvote_system_for/ PHP needs a better commenting system] (for their manual website)(whole website could use a revamp)
 +
**[http://www.reddit.com/r/PHP/comments/hdn7h/if_someone_forked_and_standardized_php_to/ If someone forked PHP...]
 +
***Best way: split PHP API into separate layers (external modules?); by default use the newest API, but allow scripts (or the server) to specify an older API for compatibility purposes
 +
***Appease people who need compatibility and/or [http://microphp.org "want to write it the old way"] (like me), as well as people who want everything OO.
 +
*[http://www.docunext.com/wiki/PHP_Apt_file_parser PHP Apt File Parser]
 +
**May be useful if using winapt for the update program
 +
 +
*[http://code.roadsend.com/rphp Roadsend PHP] - a different PHP implementation good for compiling
 +
*[http://code.roadsend.com/rphp Old Website]
 +
 +
===Error Control, Benchmarking, Debugging===
 +
*[http://pbl.elgatonaranja.com/demo PHP Error Console]
 +
*[http://coding.smashingmagazine.com/2009/01/20/50-extremely-useful-php-tools/ 50 Extremely useful php tools] (some really good stuff in there)
 +
*[http://phpmaster.com/getting-started-with-phpunit/ PHPUnit] Testing System for PHP
 +
**Especially useful for the server programs
 +
**Would like to see scripts that test all the features of PHP (would like to see which features supported on each version of PHP side by side to make a compatibility layer)
 +
*[https://github.com/sandeepcr529/codespy Codespy] - A tool for analyzing code coverage and path coverage without using xdebug
 +
**[http://code.google.com/p/webgrind/ WebGrind] (would like to expand that to match wincachegrind) (kind of benchmarking, but directly related to xdebug)
 +
**[http://www.reddit.com/r/PHP/comments/rc9nk/codespy_can_now_track_which_statements_in_a/ Can track which statements in a single line are executed]
 +
*[http://codeception.com/ Codeception] is a full-stack testing PHP framework
 +
 +
===Benchmark===
 +
*[http://particletree.com/features/php-quick-profiler/ PHP Quick Profiler]
 +
*[http://aaron-rosenfeld.com/2008/08/28/phpwatch-release-announcement/ PHPWatch
 +
*[http://pandorafms.org/ Pandora Flexible Monitoring System]
 +
*[http://www.phpbench.com/ Do not use is_array] without using isset or empty first (php benchmarking website)
 +
**Loop test
 +
**Using foreach and while and for
 +
 +
===Automated Build Systems/Continuous Integration Systems for PHP===
 +
*[http://www.brandonsavage.net/build-systems-relevancy-of-automated-builds-in-a-web-world/ Relevancy of Automated Builds In A Web World]
 +
*[http://sismo.sensiolabs.org/ Sismo] Continuous Testing Server written in PHP
 +
*[http://code.google.com/p/xinc/ Xinc] PHP Continuous Integration Server
 +
*[http://phpmaster.com/continuous-integration-with-jenkins-1/ Continuous Integration with Jenkins] (good description)
 +
 +
===Multithreading===
 +
Multiple threads can be established through The Gearman project. Requires some code changes,
 +
but it has allowed me to scale a lot of projects.
 +
 +
Everyone always recommends gearman, and while it is certainly functional, I don't really like
 +
how it works. It could just be lack of familiarity with it though. I prefer using rabbit-mq
 +
and [https://github.com/videlalvaro/php-amqplib PhpAmqpLib] although the documentation isn't
 +
amazing, you can figure everything out from reading documentation on rabbit-mq. You can/should
 +
always checkout [http://stackparts.com/ stackparts] if you're looking for a technology you think
 +
probably exists.
 +
 +
Don't reinvent the wheel. Use something like http://www.danga.com/gearman/
 +
 +
Another option I've seen sent around is: https://github.com/chrisboulton/php-resque
 +
 +
Gearman is a platform framework for processing jobs. I don't know why stackparts lists it
 +
alongside "message passing". It's substantially more than a message queue (and frankly, as a
 +
message queue, it sucks compared to ActiveMQ, RabbitMQ, MSMQ or the protocol ZeroMQ).
 +
PHP-AMQPLIB is just a PHP client for MQs which implmenent AMQP. Not really the same thing.
 +
Yes having a message-queue interface is important for distributed tasks there's still a whole
 +
lot more work he needs to do that just install a amqp library.
 +
 +
I think what I didn't like about gearman initially is that it seems to guide you towards waiting
 +
for a job to complete. That isn't a concept I want when putting stuff in a work queue, I want to
 +
add it to the queue and quit running. I think you can do this in gearman too, but I also enjoy
 +
the increased routing abilities in rabbit-mq.
  
 +
===Additional Resources===
 +
*[http://www.brandonsavage.net/hiphop-for-php-who-benefits-who-doesnt/ Compiled PHP applications from Facebook]
 +
**[http://ilia.ws/archives/213-My-Thoughts-on-HipHop.html#extended My Thoughts on HipHop] (facebook's compiler)
 +
**[http://php.webtutor.pl/en/2011/07/06/how-to-compile-php-scripts/ How to compile PHP scripts]
 +
*[http://news.ycombinator.com/item?id=2075493 Languages that compile to PHP]
 +
*[http://pecl.php.net/package/proctitle Change process title] on Linux only (need same for Windows)
 +
**[http://blog.magicaltux.net/2009/01/21/proctitle-a-new-step-for-pinetd/ Related] - Proctitle (part of pinetd)
 +
*[http://php.net/sem Inter-process communication]
 +
*[http://www.php.net/manual/en/function.pcntl-fork.php PHP Fork function] (must read comments)
 +
*[https://github.com/alecgorge/php_threading User-space php multithreading patch] (needs work)
 +
*[http://sourceforge.net/projects/phpmio/ PHP Multiplexed I/O]
 +
*http://www.bukisa.com/articles/341679_php-process-control-multithreading
 +
*[http://thefrozenfire.com/2011/02/using-the-windows-com-in-php/ Interfacing PHP with COM objects for Win32] (would rather not rely on any COM objects)
 +
*[http://pear.si.kz/index.php?package=pctk Text mode UI framework]
  
 +
PIP: Program for Interpreting PHP
 +
*If I need to fork PHP
 +
*Benefits from being one letter away from PHP (and PGP is already taken)
 +
Personal Home Page Tools or Personal Home Page Construction Kit
 +
PHP/Form Interpreter (PHP/FI)
 +
*Original PHP name
 +
PHPI (PHP Interpreter)
  
*Create a new branch that is empty
+
Need different license since it's not GPL compatible (don't really care about the name)
*Client sees a list of all files in trunk
+
*PHP 3 was GPL, could use that as a starting point (but may not be much use)
*Editing any file will move that file to the branch and make changes there, that file is not synced manually
+
**Wouldn't allow you to compile programs (even though the PHP code would be untouched, it would be considered a derivitive work, and all compiled PHP programs must have their scripts GPL)
**Optionally choose not to sync additional files or entire folders
+
*Modified or Simple BSD would be best
*Compiling a branch will use any files you've changed first, then the trunk for the rest
+
**Would not be able to use GPL code in it
**Always using the latest code
+
*[http://www.apache.org/licenses/LICENSE-2.0.html Apache 2.0 license] is compatible with GPLv3
**Ability to specify a revision of trunk to use for trunk files
+
*I'm really liking the Academic Free License 3.0. It's still not GPL compatible (according to GNU? according to author it is) but it has some extra copyright/patent protection for the end user.
Think I might have just described git, or a distributed version control system
+
 
*However, from wikipedia: ''As a disadvantage of DVCS, one could note that initial cloning of a repository is slower compared to centralized checkout, because all branches and revision history are copied.''
+
 
*I am thinking of a branch that doesn't clone the master, but kind of hard-links to it, except for files you've changed or marked as do-not-merge
+
If a complete rewrite is needed (perhaps from scratch)
*Also thinking of locking files at specific revisions, or entire directories (or the entire trunk you are going against)
+
*[http://dlang.org/overview.html D Programming Language]
**Since you haven't changed those files, there's no need to merge anything, it just downloads the specified revision of each file
+
**No 16-bit Support
 +
**Just like I want PHP to be - simpler and more functional (mirrors my philosophy)
 +
**"D is not for: Language purists. D is a practical language, and each feature of it is evaluated in that light, rather than by an ideal."
 +
**Automatic Memory Management (garbage collection)
 +
**"It's a practical language for practical programmers who need to get the job done quickly, reliably, and leave behind maintainable, easy to understand code."
 +
**"Make doing things the right way easier than the wrong way."
 +
**"Have a short learning curve for programmers comfortable with programming in C, C++ or Java."
 +
 
 +
*[http://www.xarg.org/2011/06/php-hacking/ PHP 5.3.6 Fork]
 +
**[https://github.com/infusion/PHP GitHub]
 +
 
 +
lol, by moving the API's into separate modules, you can not only choose a specific API (for a page, or a section of code, or a directory, or for the server) but you can add new ones
 +
*e.g. "British variant of PHP"
 +
*Or Perl, Python, Ruby, etc.
 +
*Perhaps someone doesn't like stuff like "Function myfunc($1,$a,$pin) { }" and "IF($apples == $oranges){ elseif($apples == $frogs) {} else {} }" and they want to do "<fun name="myfunc" parameters=[$1][$a][$pin]> </fun>" and "<if[$apples == $oranges]> <elseif[$apples == frogs]> </elseif> <else> </else> </if>"
 +
 
 +
CodeIgniter PHP4 compatibility brought PHP5 features to PHP4, didn't make PHP4 programs work in PHP5
 +
 
 +
[http://mariadb.org/en/about/ MariaDB] a MySQL fork
 +
===Compiling PHP===
 +
*[http://blogs.msdn.com/b/vcblog/archive/2012/03/25/10287354.aspx Using Win8SDK with Visual Studio]
 +
*[http://www.apachelounge.com/viewtopic.php?p=20992 PHP 5.4 x64]
 +
*[http://www.anindya.com/ x64 Apache and PHP builds]
 +
*[http://msdn.microsoft.com/en-us/windows/desktop/hh852363 Windows 8 SDK Download]
 +
*[http://www.microsoft.com/visualstudio/11/en-us/downloads#ultimate Visual Studio 11 Beta]
 +
*[http://www.zend.com/en/products/server-ce/ Zend server CE] - free PHP server with GUI from Zend (PHP) group
 +
*[https://github.com/facebook/hiphop-php/wiki/_pages Facebook HipHop]
 +
*[http://phpcompiler.org/ PHC PHP Compiler] (dead recently)(basis for roadsend php)
 +
*
 +
 
 +
====Instructions====
 +
*[http://opensourcepack.blogspot.com/2012/03/static-build-php-540-with-mingw.html Build PHP with MingW]
 +
*[http://www.blackdot.be/?inc=apache/knowledge/tutorials/x64 Building Apache for Win64]
 +
*[http://tmont.com/blargh/2009/10/compiling-php-on-windows-64-bit-with-vc9 Building PHP for Win64]
 +
*[https://wiki.php.net/internals/windows/stepbystepbuild PHP Windows Step by Step Build]
 +
*[https://wiki.php.net/internals/windows/windowssdk PHP Supported SDK]
 +
 
 +
===Extensions===
 +
*[http://www.iis.net/download/WinCacheForPhp Windows Cache Extension for PHP] (seems to be for PHP regardless of HTTP server)
 +
*[http://en.wikipedia.org/wiki/PHP-Qt PHP-Qt]
 +
 
 +
===Tips/Tricks===
 +
*[http://www.devtheweb.net/blog/2010/01/12/things-you-probably-didnt-know-about-php/ Things you probably didn't know about PHP]
 +
*[http://ilia.ws/files/barcelona_2010_hidden_features.pdf PHP Hidden Features]
 +
[http://stackoverflow.com/questions/601670/whats-the-best-way-to-fork-thread-in-php-on-win finally got PHP to fork]
 +
 
 +
===Scripts===
 +
*[http://www.fpdf.org/ FPDF PHP PDF Library]
 +
*[http://github.com/brianlmoon/GearmanManager Gearman Worker Manager]
 +
*[http://pear.php.net/package/PEAR_Frontend_Web/redirected PEAR PHP frontend]
 +
**[http://tias.ulyssis.org/frontweb_demo Demo]
 +
 
 +
===Asterix===
 +
http://marcelog.github.com/articles/php_asterisk_agi_protocol_tutorial.html
 +
http://marcelog.github.com/PAGI/
 +
http://marcelog.github.com/articles/pagi_tutorial_create_voip_telephony_application_for_asterisk_with_agi_and_php.html
 +
http://phpagi.sourceforge.net/
 +
 
 +
===PHP Rewrite===
 +
simple and advanced PHP
 +
*Split the documentation (like simple and regular wikipedia, or regular ROS Wiki and TechWiki)
 +
 
 +
===Official revamp of PEAR - simple and advanced===
 +
**Simple is more samples of code and basic scripts that are well written but easy for a new user to understand (light use of functions, no OOP, lots of comments, less complicated loops, etc)
 +
**Advanced PEAR is all OOP and uses lots of advanced API, and must meet a certain coding standard
 +
**all users can suggest changes
 +
**Discussion on every page
 +
**Allow certain framework based code to be published in certain sectoins?
 +
***e.g. CodeIgniter in Simple and Savant in Advanced
 +
**Code that is duplicated between projects/scripts should be combined into a separate script and linked by both
 +
**Specify script dependencies
 +
**If duplicate scripts are uploaded, add additional scripts to the page of the original and, if possible, combine scripts (for more features or w/e) or embed later script's sections in first script and show the later ones differently (e.g. different color and italics)(as an alternate implementation)
 +
**Remove scripts by community vote - if PHP wants to delete a script, or if too many users report it, put it in a queue that shows on the front page and give people XX days to vote on keeping it or not
 +
**Add scripts by community vote - must post new scripts and get a minimum # and % of positive votes
 +
**Up/down for scripts
 +
***Show votes for either all ever, or since the last (or specified) version, or within the last X versions, or within the last X days, or only the last XXX votes (or a combination of the above)
 +
***All scripts should integrate with the PHP Control Panel and remind users to vote and comment on scripts they've been using (after XX days or XXX views)
 +
****Should also ask when you install it if you want to report that you are using the script and what version you have installed (although version is only displayed on PEAR as the % of everyone using a script, and never as your specific version)
 +
****Should check for updates and notify the user
 +
*****If installed via the CP should be easy, if installed manually... will take some figuring out with the CP
 +
****should give users the option of publishing a link to the install, waiting XX days to ask again, or not publishing the link (and can set default in script control panel)
 +
**Comments regularly pruned by moderator (hidden, like buried reddit posts) and by number of votes
 +
**There should be a separate "Installable Scripts" section for popular scripts that don't fit the simple/advanced "paradigm" (e.g. phpbb, wordpress/drupal, mediawiki, etc.)
 +
 
 +
===allow optional old APIs===
 +
*Choose default API and version in php.ini, can set separately for each script or a folder
 +
 
 +
===Built in user-management===
 +
*For HTTP version of PHP
 +
*link user account to PHP account
 +
**let you choose items to install later (after approval when you log back into CP) from PEAR website
 +
*Specify subfolders, domains, and who can access them
 +
*Also ties in with FTP server
 +
*Users can password-protect individual folders or scripts
 +
*Execution permissions
 +
**Execute local server only, execute local network, execute internet only (no elevation to different process)
 +
*allow/deny access to file for HTTP daemon (by process ID) or fTP daemon (by process ID)
 +
*Option to create users at OS level
 +
**Can choose a user for each group in general (e.g. one for customers, one for the server, one for the FTP, one for the uploading function, etc.) or a user for each user
 +
*Easily or automatically add users to the FTP, HTTP, PHP, and MySQL user list when creating
 +
*When the user logs in to the CP, record their IP address, and put any log entries for their IP's out of the regular log and into the admin log (to make stats more accurate and admin activities more private)
 +
 
 +
 
 +
===User Interface===
 +
*User can browse PEAR repository from web interface, have full scripts installed on server at specified location
 +
*Users can install extensions (if allowed in security) that are only for their instance of PHP and can only be installed straight from PECL
 +
 
 +
====Monitor MySQL, PHP, FTP, and HTTP resource usage per user?====
 +
*RAM, network bandwidth (percent of total and ongoing, upload and download), CPU, sockets, file handles, storage space, database size (MB and number of entries), database connections, connection time length (how long the average connection stays open), number of connections per second/minute/session, number of error messages generated by code (or HTTP errors), php script execution time, number of user uploads, average upload size
 +
*[http://www.php.net/manual/en/book.win32ps.php win32ps] (process interaction in Win32, will help ger individual process stats)
 +
 
 +
====Security====
 +
*Specify functions that are enabled or disabled per user and in general, and allow each function to be overridden or none at all
 +
**disable_functions
 +
*By default disallow execution of scripts or access outside of user's folder or web directory
 +
**Add option to enable folders on a case by case basis
 +
*show OS permissions on each file as well as effective PHP permissions, FTP permissions, HTTP permissions
 +
 
 +
Virtual folders
 +
 
 +
Default option in server to report the existance and version of PHP installed, with optional include your email for new release announcements and reminders to update (if too out of date), as well as report all hosted TLD's (subdomains would be a bit much); another option to have TLD listed on PHP website
 +
 
 +
GUI interface for installation and configuration (I can do that!)
 +
*[http://pear.php.net/package/PEAR_Frontend_Web/redirected PEAR/PECL Web GUI] (for installing extensions and libraries)
 +
**Also does package upgrades
 +
**Does 3rd Party repositories
 +
***[http://pear.chiaraquartet.net/index.php?categories pear.chiaraquartet.net Channel Server]
 +
***[http://pear.php.net/manual/en/installation.php Install your own]
 +
****Chance to do that redesign
 +
 
 +
===PHP installation framework (for windows, others later)===
 +
*Installing PHP:
 +
**Find any current PHP install
 +
***dir *php*.exe /S
 +
***dir *php*.ini* /S
 +
**Check for port availablility
 +
**Start server
 +
**Show installation page
 +
**At some point, choose where to save extensions and PHP files (suggested: c:\windows\system32\php - it follows standard windows practices)
 +
**At some point, ask the user if they want additional software (e.g. MySQL, python, perl, ruby, etc.)
 +
 
 +
**Check c:\windows\system32 for libeay32.dll and ssleay32.dll (they shouldn't be there, install OpenSSL)
 +
**Check for any other PHP files or required files in any PATH folder
 +
**[http://www.softpanorama.org/Scripting/Phprama/command_line_php.shtml#25944 Make .php files executable from command line] (even without extension) while leaving regular file associations (for your editor) intact
 +
**Allow the user the option to browse the PECL and PEAR interface and choose items to install
 +
**At some point, import all settings from the old php.ini and show a configuration page
 +
***Send unknown ini entries to author
 +
**Identify all extensions downloaded or enabled for PHP and match them to the database
 +
***if a file doesn't match, throw an error and send a message to the author
 +
***If a file does match, upgrade with PHP (by match, means i've tracked down this file and have a homepage and update URL as well as a description, and preferably an RSS news feed and a way to show any bugs from their bugtracker)
 +
**Warn you are going to stop any PHP instances
 +
**kill all instances of PHP
 +
**Move old PHP to the new folder
 +
**Install new PHP (if needed)
 +
***Archive old PHP installation
 +
**Register services with WINSW wrapper
 +
***[http://pecl.php.net/package/win32service win32service] allows scripts to run as services!
 +
*[http://www.phpbuilder.com/board/archive/index.php/t-10305653.html Some useful tips] for IIS configuration
 +
**Should also give users the option of installing IIS (if their version can run it) or other HTTP servers (though not recommended, this is about pure PHP!)
 +
*Give the option of auto-compiling everything
 +
**Autodownload the proper build tools and do everything
 +
**Might help with PECL extensions that don't have a current windows version
 +
**http://www.php.net/manual/en/install.windows.building.php
 +
**https://wiki.php.net/internals/windows/stepbystepbuild
 +
 
 +
Get PHP-FPM working in NGINX on Windows, as well as threads in NGINX
 +
 
 +
==Replace ReactOS Registry with MySQL==
 +
*Convert any system registry calls or API registry functions to go through an abstraction layer or wrapper
 +
*Abstraction layer will connect to Windows Registry (service), or to other database specially configured
 +
**e.g. MySQL, MSSQL, PostgreSQL, etc,
 +
*Will require changes to ReactOS and database server
 +
*Will not be usable for first stages of boot (until database is started)

Latest revision as of 08:16, 1 July 2012

Contents

Important Links

Need to write rapps scripts for

Amaya W3C browser (supposed to be light fast stable and standards compliant)


Updates

  • 5/16* Sorry about the lack of updates, I lost internet access for a few months due to my phone's USB port breaking (I was also limited to a netbook for a while). I have high speed and a decent laptop, so I'll try to get some more done.
  • 3/25* I've spent the earlier part of the week creating ~220 RAPPS entry files. Spent the latter half doing some research on GIT and Subversion, specifically using svn:externals (link all the folders you aren't modifying in your branch to the trunk version so you benefit constantly from trunk updates)

Plan

  • Right now I'm starting by going through every changelog and adding the information to each file page (as best I can) to establish a brief official history. I am also adding a link to the revision log for every file.
  • Next, once I've worked my way up to the 0.3.14 changelog, I will go filepage by filepage, determining exactly what that file does, including a detailed explanation, what components it fits into, any external references,a rostests list, and any current bugs (see Explorer.exe for an example bug list).
  • This should have wide-ranging benefits not just to ReactOS but to the Windows community as a whole. If you google for most Windows Files, you find a lot of junk out there that's not helpful. By including quality information, the ReactOS google rank should go up, then links to the wiki should go up, and the project will get more attention and visitors.
  • This is a little more forward thinking, but if it works as well as I hope, I've been thinking of ways to make the Wiki more useful for developers - perhaps a link in the source code folder for components which have a page in the wiki (e.g. a "explorer.roswiki" file in /trunk/reactos/base/shell/explorer/ with the contents "http://www.reactos.org/wiki/Explorer.exe", the user could have their browser open it by default); Some ways the Wiki could be more useful:
    • Developers could post reminders and notes on the Wiki
    • Links to good references
    • Status of that component
    • TODO lists
    • Plus each page would include any bugs it could find and quick links to the history
    • Think of the Wiki as the one-stop shop for everyone
  • Also, the Wiki is pretty light on material and cross-links (internal and external). It's not always easy to navigate to the ViewVC page, or the SVN HTMl interface, or other important pages (but hopefully that will change with the website overhaul).

My heavy editing will only last for a few weeks (hopefully), and then I'll just make regular changes. Unfortunately the Wiki has been somewhat neglected. Here are some changes I've made:

  • Put almost every page (except ones I'm working on right now) into a category of some sort (would love to see This page in the sidebar)
  • Incorporated content from various sources into the wiki (various FAQ's, about pages, info pages, some forum posts)
  • Cleaned up and combined/separated the ReactOS_ports page and category
  • Cleaned up and combined/optimised the File Systems page and category
  • Added cross-links to the outdated Version_Status page (without changing any of the statuses)
  • Added some anchors to People of ReactOS and redirects for people who had been linked to elsewhere in the wiki but had no page (broken links)
  • Recovered and recreated ChangeLog-0.2.2 and ChangeLog-0.2.3
  • Cleaned up the ReactOS subsystems page and category
  • Created the Frameworks page, which has important frameworks you might need to install to run some programs
  • Recreated the FAQ

And here's what I plan to do:

  • Go through every newsletter and add/link to any useful information
  • Go through the entire forum and incorporate any useful information into the wiki
  • Add lots more helpful tutorials
    • A completely new user to ReactOS should have a guide available that will walk them through anything they want to do - download the latest release, which one to download (the differences between dbg and dbgwin are not explained), installing it, installing a virtual machine if needed, exactly how to report a bug, exactly how to get a backtrace and anything else needed to file a proper report (I still don't know how to get raddr2line, seems like you may have to compile it yourself, and a fresh user will be turned away almost immediately by having to compile something)
  • Provide as much cross-linking as possible to lead users to new content
  • Update every page at least once initially and periodically thereafter
    • Even if I have to sit in the IRC channel and ask the same question over and over and over
    • Unless it was a one-off thing or is only there for historical purposes
  • Everything possible to make this Wiki as awesome as possible with as much relevant and up to date information as possible
  • Document every aspect of ReactOS, its components, its status, its GUI, missing features, the API, and all the suggestions and ideas I can find (excluding ridiculous ones)

And in the further future:

  • Create a new installer for ReactOS - using PHP (wrapped in a PHP wrapper or directly using php-gtk or similar)
    • I know it can be done - and not that difficultly
    • I think it has benefits - such as being easier for Distributions, allowing you to change settings while the install is in progress and saving your place when it has to reboot, allowing you to pick apps and download and install them with the OS, and more
    • I want to
    • I never expect that to be part of the official distribution
    • You don't have to use it if you don't want to
  • Create a replacement Control Panel for ReactOS using PHP
  • Create a ReactOS updater and appmarket using PHP
  • Create an external web interface a-la Windows Home Server using PHP
  • Get Active Desktop working
    • Simple GUI program that has no borders or title bar or menus, all it does is fill 100% with an HTML page (embedded using mshtml?, or webkit or gecko)
    • Use SetWindow to make the parent of this program 0, which makes it replace the wallpaper/desktop, but not the taskbar (from what I understand)
    • Have it auto-launch on startup and autorestart if it crashes
  • then get Active Desktop Portal program (made with PHP) updated and expanded


Misc Links

how to take screenshots

  • upload directly to web
  • only one program

donate reactos with phone

  • smscoin seems only good option, others require $200-$400 paid per month (by the project)
    • But ReactOS could receive as little as 25% of the donation


Misc Thoughts

These are just notes I'm keeping as I explore different avenues.

Things a new programmer can do

  • Pick a ReactOS source code file, insert detailed comments into it, create a patch, submit it on BugZilla
    • This lets (some) new developers learn the code a bit before making changes that have serious impact
    • Also notate any items not implemented
    • Recording ROSTESTS failures when recording documentation might be useful (put a date on those)
      • Will notify people working with that file that something failed the test
      • Can go through ROSTESTS every XX days and update the results

Things ReactOS might be able to do to help new programmers

  • Mark more bugs in Bugzilla as "Enhancements" (or trivial or minor) and direct new programmers to take a look at the list and submit a patch

Guides

Guide: Compiling your Windows program with WineLib (to run on a different OS)


No bitmap resources in ReactOS

  • All vector Graphics
  • important for scaling to different resolutions and DPI's (quality is always consistent)
  • Should be designed at very high resolutions (going high>low resolution for vector should look better than low>high)
  • includes icons
  • includes items like "X" to close screen
  • of course, ReactOS should support bitmap resources for other programs, but itself shouldn't use any
  • Essentially Windows Presentation Foundation for ReactOS explorer?

Freetype Fonts (an OpenType implementation, cross platform) and Pango

  • essentially vector graphic fonts
  • ReactOS already supports TTF

Cairo graphics library

  • 2D vector graphics library with hardware acceleration
  • Could be used to apply shading, gradients, and color blending (which vector graphics normally can't do) to Ui elements
  • GPL, C, win32 GDI (or Direct2D) compatible
  • Used by GTK+ project
    • Crazy to think of using GTK+ for explorer?

ReactOS Fonts

  • Fonts
    • DejaVuSans-Bold.ttf
    • DejaVuSans-BoldOblique.ttf
    • DejaVuSans-Oblique.ttf
    • DejaVuSans.ttf
    • DejaVuSansMono-Bold.ttf
    • DejaVuSansMono-BoldOblique.ttf
    • DejaVuSansMono-Oblique.ttf
    • DejaVuSansMono.ttf
    • DejaVuSerif-Bold.ttf
    • DejaVuSerif-BoldItalic.ttf
    • DejaVuSerif-Italic.ttf
    • DejaVuSerif.ttf
  • Gnu FreeFont
    • FreeMono.ttf
    • FreeMonoBold.ttf
    • FreeMonoBoldOblique.ttf
    • FreeMonoOblique.ttf
    • Does not include FreeSans or FreeSerif
  • http://en.wikipedia.org/wiki/Liberation_fonts Liberation Fonts]
    • based on modified Bitstream Vera font
    • LiberationMono-Bold.ttf
    • LiberationMono-BoldItalic.ttf
    • LiberationMono-Italic.ttf
    • LiberationMono-Regular.ttf
    • LiberationSans-Bold.ttf
    • LiberationSans-BoldItalic.ttf
    • LiberationSans-Italic.ttf
    • LiberationSans-Regular.ttf
    • LiberationSerif-Bold.ttf
    • LiberationSerif-BoldItalic.ttf
    • LiberationSerif-Italic.ttf
    • LiberationSerif-Regular.ttf
  • Marlett.ttf
  • symbol.ttf
  • tahoma.ttf
  • tahomabd.ttf

Suggested for ReactOS

ROSCMS

I've been thinking about checking out a branch of ROSCMS and doing some upgrades for it.

Mediawiki Latest

**Make phpBB markup allow [[ ]] for linking
***topics t15432
***posts p999321
***bugzilla bugs b3416
***wine bugs wb22917
***commits r56137
***Wine commits wr99728
***Wine Wiki wwAbout_Wine
      • otherwise it goes to the wiki
  • Use phpBB's text editor
  • Show categories for search results

Infobox for Wiki and extensions

phpBB latest

phpbb+reddit (votes, hiding comments, threading)

phpbb styles


ViewVC?

  • Support wikibbcode in viewvc
  • Give it a lot more features (right click?)
  • Show commits by developer and in general in calendar style
    • either web.archive.org style or something showing number of commits

PHP

ViewVc is written in Python, something PHP would be nice

Testman

  • Would be nice to include the latest failed tests on a component's wiki page
  • Would also be nice to have historical charts, and separate components in general
  • Integration into API documentation (and/or doxygen) to show current status of API and areas where new tests could be written

Subversion


BugZilla

BugZilla: Subcomponents based off Wiki subcomponents (since the wiki should have an extensive list at that point)

  • Would have to go through old and current bugs and recategorize
  • Would make it easier and more accurate to include bugs on Wiki
    • which would result in more bugs getting attention
  • link on page directing user to the Wiki
  • Option to include more than one category (some components do span multiple categories)

ROSCMS

Win32 API items: would be nice to include on doxygen which individual entries in a source code file failed the ROSTest

Search

MailMan

  • Mailman PHP interface
  • Would like to view MailMan online archives in threaded view and flat view, and would like (optionally) to display them as if they were a forum


Misc Notes

raddr2line http://svn.reactos.org/downloads/raddr2line.exe

Side Projects

I've been planning on these for some time now, but given the different projects I'm working on it makes sense to make them now. I've made several of these in the past.

Universal Database Abstraction/Access Layer

Need to make universal Db access layer

  • based on phpBB's
  • all major databases
  • basically a wrapper
  • Initially PHP, get people to port later
    • perhaps make parts more portable
  • http://crystal.martinrusev.net/

PHP3/4/5/6 API compatibility wrapper

  • Allow a PHP script written for version X to support older and newer versions
  • Maybe allow older scripts to work on newer PHP

Open PHP web installer

  • to make installing your scripts easy
  • A supplement to the PHP binary installer (which will allow you to install binary software on your computer with a PHP driven installer)

Open Authentication Framework

  • Something that can detect many installed programs (phpbb, vbb, ubb, mediawiki, wordpress, drupal, etc) and abstract their user databases
  • easy GUI converting or combining of different user databases
  • Simple and easy to use system for including auth on web pages
  • For external authentication: http://hybridauth.sourceforge.net/

Storage Abstraction Framework

  • Recognise how items like topics, forums, blog posts, etc. are stored
  • provide an API for a program to use that structure for its posts
  • not only good for new developers looking for compatibility, good for major projects and migration

phpbb4

  • Separate layout and style templates?
    • Widget templates?
      • Skinning a widget that can work with many mods is better than having to write many templates for one mod
  • Perhaps something like a php implementation similar to win32 (in function, not features or scope)
  • Open Source, may be useful for benchmarking all this stuff http://httparchive.org/

Create a full PHP interface for Win32

With as little binary reliance as possible (only native php, should work on any PHP platform)

ReactLive? InteractOS?

I've been considering beginning with a web based desktop (that looks ReactOS-like, since ReactOS looks like windows). This would be useful as an alternate version of ROSCMS. It would serve a good basis for a larger-scale implementation.

Virtual Machine

Makes sense to be able to access your virtual machines through the interface for expedited testing.

VirtualBox

VMWare Player

NO! Only paid versions include either VNC/RDP access or the WSX feature (which embeds it in the browser)

Server Side

Java Remote Desktop Client to access VM

Client Side

Install a small server with PHP http://stackoverflow.com/questions/627965/serial-comm-with-php-on-windows

Quick access buttons for debugging

Apps

A Breed Apart

Servers

SMTP/POP/IMAP

Mail Server http://dd32.id.au/2011/10/14/php-based-mail-server-release-day/

  • Handling bounced mail and other great PHP mail resources
  • IMAP has secure version (IMAPS) ssl
  • POP3 has a secure version (POP3S) ssl

TFTP

Socket Servers and Daemons

Socket Server

  • NanoWeb
    • HTTP/1.1
    • FastCGI, CGI and Server side includes support
    • Name and port based virtual hosts
    • htpasswd, MySQL, PostgreSQL and LDAP authentication support
    • Apache compatible log format, MySQL logging
    • Directory browsing
    • Proxy Server extension
  • Nanoserv is a server daemon framework for PHP 5.1+
    • 100% object oriented, asynchronous event-based framework
    • designed for high performance and robustness
    • native support for IPv6, TCP with SSL/TLS, UDP and Unix sockets
    • multiplexing and forking listeners
    • base handlers for raw connections, line input, Telnet, HTTP, SMTP, XML-RPC, Syslog, SOAP, DHCP and JSON-RPC
    • transparent inter process communication with forked handlers
    • high precision timers
    • and a lot more ...

FTP

  • FTP has secure version (FTPS) - ssl instead of ssh

HTTP

  • Upon new request: Check if requested directory has a php.ini
    • if so, start a new PHP HTTP instance
    • Load extensions for that instance from their php.ini
    • Whitelist extensions only by admin
    • If user already has a PHP HTTP instance running for that INI file, and it's idle, use it
    • Should be safe to load extensions because they'll only be able to load whitelisted extensions from the server's PHP directory, and the HTTP server loads the extension, user is incapable of doing so
    • Disable enable_dl() in php.ini, when launching the HTTP server instance (which is completely separate f
  • [www.askapache.com/php/custom-phpini-tips-and-tricks.html Load php.ini separate apache]
  • "-c" command line option can load a specific INI file, maybe could do dynamically generated one
  • "-z" load a specific PHP extension
  • Enable PHP extensions per PHTTP server based on user settings (e.g. admin or user logs into their control panel, they can browse their code and have the xdebug extension enabled for their session as well as additional debug tools)
  • Spawn a new instance for a folder and hang onto it until it times out, link to user when user logged in, otherwise link to folder
  • Primary script to act as a router/proxy
    • Must check status of sub-processes (test communications and check for process ID regularly)
      • If process not responding, wait XX seconds, try again, if still nothing, kill it
    • Multi-threaded so it can handle the socket communications
      • multiple processes can't access the same socket in Windows, so one process needs to do the job
  • Primary script launches with psexec a new HTTP server process, depending on needs, or reuses an existing one if needed
    • Primary script made the socket to connect to the PHTTP server, and tells it what socket to communicate on
    • Primary script is essentially a router-proxy
  • secondary scripts each have a custom php.ini file (a temp one, based on socket for simplicity)
    • Modules loaded can even be configured via a mysql DB (e.g. admin gets xdebug extension loaded)
  • This all should ensure that different sites/configurations get the proper extensions, that they don't interfere with each other, and that they can't access each other's session data or files (and helps security, each PHTTP server can run under its own user name and permissions)

SOCKS

SOCKS support (needed to do proxies via your client browser control panel)

TCP

ECHO

DayTime

Quote of the Day

TIME

NTP

WebDAV

DHCP

DNS

IRC

SSH/SFTP

SSH Server

  • not the same as FTPS (tls/ssl) or FTP over SSH, or simple FTP

Finger

  • Finger (don't think it's exactly portable or done entirely in PHP)

BitTorrent

  • BitTorrent server (torrential or tbdev)

SNMP


Nothing comparable yet

LDAP

LDAP (samba, active directory, ldap, wins, netbios, smb (netbios over tcp))

Misc

PHP

Error Control, Benchmarking, Debugging

Benchmark

Automated Build Systems/Continuous Integration Systems for PHP

Multithreading

Multiple threads can be established through The Gearman project. Requires some code changes,
but it has allowed me to scale a lot of projects.

Everyone always recommends gearman, and while it is certainly functional, I don't really like
how it works. It could just be lack of familiarity with it though. I prefer using rabbit-mq
and PhpAmqpLib although the documentation isn't
amazing, you can figure everything out from reading documentation on rabbit-mq. You can/should
always checkout stackparts if you're looking for a technology you think
probably exists.
Don't reinvent the wheel. Use something like http://www.danga.com/gearman/
Another option I've seen sent around is: https://github.com/chrisboulton/php-resque
Gearman is a platform framework for processing jobs. I don't know why stackparts lists it
alongside "message passing". It's substantially more than a message queue (and frankly, as a
message queue, it sucks compared to ActiveMQ, RabbitMQ, MSMQ or the protocol ZeroMQ).
PHP-AMQPLIB is just a PHP client for MQs which implmenent AMQP. Not really the same thing.
Yes having a message-queue interface is important for distributed tasks there's still a whole
lot more work he needs to do that just install a amqp library.
I think what I didn't like about gearman initially is that it seems to guide you towards waiting
for a job to complete. That isn't a concept I want when putting stuff in a work queue, I want to
add it to the queue and quit running. I think you can do this in gearman too, but I also enjoy
the increased routing abilities in rabbit-mq.

Additional Resources

PIP: Program for Interpreting PHP

  • If I need to fork PHP
  • Benefits from being one letter away from PHP (and PGP is already taken)

Personal Home Page Tools or Personal Home Page Construction Kit PHP/Form Interpreter (PHP/FI)

  • Original PHP name

PHPI (PHP Interpreter)

Need different license since it's not GPL compatible (don't really care about the name)

  • PHP 3 was GPL, could use that as a starting point (but may not be much use)
    • Wouldn't allow you to compile programs (even though the PHP code would be untouched, it would be considered a derivitive work, and all compiled PHP programs must have their scripts GPL)
  • Modified or Simple BSD would be best
    • Would not be able to use GPL code in it
  • Apache 2.0 license is compatible with GPLv3
  • I'm really liking the Academic Free License 3.0. It's still not GPL compatible (according to GNU? according to author it is) but it has some extra copyright/patent protection for the end user.


If a complete rewrite is needed (perhaps from scratch)

  • D Programming Language
    • No 16-bit Support
    • Just like I want PHP to be - simpler and more functional (mirrors my philosophy)
    • "D is not for: Language purists. D is a practical language, and each feature of it is evaluated in that light, rather than by an ideal."
    • Automatic Memory Management (garbage collection)
    • "It's a practical language for practical programmers who need to get the job done quickly, reliably, and leave behind maintainable, easy to understand code."
    • "Make doing things the right way easier than the wrong way."
    • "Have a short learning curve for programmers comfortable with programming in C, C++ or Java."

lol, by moving the API's into separate modules, you can not only choose a specific API (for a page, or a section of code, or a directory, or for the server) but you can add new ones

  • e.g. "British variant of PHP"
  • Or Perl, Python, Ruby, etc.
  • Perhaps someone doesn't like stuff like "Function myfunc($1,$a,$pin) { }" and "IF($apples == $oranges){ elseif($apples == $frogs) {} else {} }" and they want to do "<fun name="myfunc" parameters=[$1][$a][$pin]> </fun>" and "<if[$apples == $oranges]> <elseif[$apples == frogs]> </elseif> <else> </else> </if>"

CodeIgniter PHP4 compatibility brought PHP5 features to PHP4, didn't make PHP4 programs work in PHP5

MariaDB a MySQL fork

Compiling PHP

Instructions

Extensions

Tips/Tricks

finally got PHP to fork

Scripts

Asterix

http://marcelog.github.com/articles/php_asterisk_agi_protocol_tutorial.html http://marcelog.github.com/PAGI/ http://marcelog.github.com/articles/pagi_tutorial_create_voip_telephony_application_for_asterisk_with_agi_and_php.html http://phpagi.sourceforge.net/

PHP Rewrite

simple and advanced PHP

  • Split the documentation (like simple and regular wikipedia, or regular ROS Wiki and TechWiki)

Official revamp of PEAR - simple and advanced

    • Simple is more samples of code and basic scripts that are well written but easy for a new user to understand (light use of functions, no OOP, lots of comments, less complicated loops, etc)
    • Advanced PEAR is all OOP and uses lots of advanced API, and must meet a certain coding standard
    • all users can suggest changes
    • Discussion on every page
    • Allow certain framework based code to be published in certain sectoins?
      • e.g. CodeIgniter in Simple and Savant in Advanced
    • Code that is duplicated between projects/scripts should be combined into a separate script and linked by both
    • Specify script dependencies
    • If duplicate scripts are uploaded, add additional scripts to the page of the original and, if possible, combine scripts (for more features or w/e) or embed later script's sections in first script and show the later ones differently (e.g. different color and italics)(as an alternate implementation)
    • Remove scripts by community vote - if PHP wants to delete a script, or if too many users report it, put it in a queue that shows on the front page and give people XX days to vote on keeping it or not
    • Add scripts by community vote - must post new scripts and get a minimum # and % of positive votes
    • Up/down for scripts
      • Show votes for either all ever, or since the last (or specified) version, or within the last X versions, or within the last X days, or only the last XXX votes (or a combination of the above)
      • All scripts should integrate with the PHP Control Panel and remind users to vote and comment on scripts they've been using (after XX days or XXX views)
        • Should also ask when you install it if you want to report that you are using the script and what version you have installed (although version is only displayed on PEAR as the % of everyone using a script, and never as your specific version)
        • Should check for updates and notify the user
          • If installed via the CP should be easy, if installed manually... will take some figuring out with the CP
        • should give users the option of publishing a link to the install, waiting XX days to ask again, or not publishing the link (and can set default in script control panel)
    • Comments regularly pruned by moderator (hidden, like buried reddit posts) and by number of votes
    • There should be a separate "Installable Scripts" section for popular scripts that don't fit the simple/advanced "paradigm" (e.g. phpbb, wordpress/drupal, mediawiki, etc.)

allow optional old APIs

  • Choose default API and version in php.ini, can set separately for each script or a folder

Built in user-management

  • For HTTP version of PHP
  • link user account to PHP account
    • let you choose items to install later (after approval when you log back into CP) from PEAR website
  • Specify subfolders, domains, and who can access them
  • Also ties in with FTP server
  • Users can password-protect individual folders or scripts
  • Execution permissions
    • Execute local server only, execute local network, execute internet only (no elevation to different process)
  • allow/deny access to file for HTTP daemon (by process ID) or fTP daemon (by process ID)
  • Option to create users at OS level
    • Can choose a user for each group in general (e.g. one for customers, one for the server, one for the FTP, one for the uploading function, etc.) or a user for each user
  • Easily or automatically add users to the FTP, HTTP, PHP, and MySQL user list when creating
  • When the user logs in to the CP, record their IP address, and put any log entries for their IP's out of the regular log and into the admin log (to make stats more accurate and admin activities more private)


User Interface

  • User can browse PEAR repository from web interface, have full scripts installed on server at specified location
  • Users can install extensions (if allowed in security) that are only for their instance of PHP and can only be installed straight from PECL

Monitor MySQL, PHP, FTP, and HTTP resource usage per user?

  • RAM, network bandwidth (percent of total and ongoing, upload and download), CPU, sockets, file handles, storage space, database size (MB and number of entries), database connections, connection time length (how long the average connection stays open), number of connections per second/minute/session, number of error messages generated by code (or HTTP errors), php script execution time, number of user uploads, average upload size
  • win32ps (process interaction in Win32, will help ger individual process stats)

Security

  • Specify functions that are enabled or disabled per user and in general, and allow each function to be overridden or none at all
    • disable_functions
  • By default disallow execution of scripts or access outside of user's folder or web directory
    • Add option to enable folders on a case by case basis
  • show OS permissions on each file as well as effective PHP permissions, FTP permissions, HTTP permissions

Virtual folders

Default option in server to report the existance and version of PHP installed, with optional include your email for new release announcements and reminders to update (if too out of date), as well as report all hosted TLD's (subdomains would be a bit much); another option to have TLD listed on PHP website

GUI interface for installation and configuration (I can do that!)

PHP installation framework (for windows, others later)

  • Installing PHP:
    • Find any current PHP install
      • dir *php*.exe /S
      • dir *php*.ini* /S
    • Check for port availablility
    • Start server
    • Show installation page
    • At some point, choose where to save extensions and PHP files (suggested: c:\windows\system32\php - it follows standard windows practices)
    • At some point, ask the user if they want additional software (e.g. MySQL, python, perl, ruby, etc.)
    • Check c:\windows\system32 for libeay32.dll and ssleay32.dll (they shouldn't be there, install OpenSSL)
    • Check for any other PHP files or required files in any PATH folder
    • Make .php files executable from command line (even without extension) while leaving regular file associations (for your editor) intact
    • Allow the user the option to browse the PECL and PEAR interface and choose items to install
    • At some point, import all settings from the old php.ini and show a configuration page
      • Send unknown ini entries to author
    • Identify all extensions downloaded or enabled for PHP and match them to the database
      • if a file doesn't match, throw an error and send a message to the author
      • If a file does match, upgrade with PHP (by match, means i've tracked down this file and have a homepage and update URL as well as a description, and preferably an RSS news feed and a way to show any bugs from their bugtracker)
    • Warn you are going to stop any PHP instances
    • kill all instances of PHP
    • Move old PHP to the new folder
    • Install new PHP (if needed)
      • Archive old PHP installation
    • Register services with WINSW wrapper
  • Some useful tips for IIS configuration
    • Should also give users the option of installing IIS (if their version can run it) or other HTTP servers (though not recommended, this is about pure PHP!)
  • Give the option of auto-compiling everything

Get PHP-FPM working in NGINX on Windows, as well as threads in NGINX

Replace ReactOS Registry with MySQL

  • Convert any system registry calls or API registry functions to go through an abstraction layer or wrapper
  • Abstraction layer will connect to Windows Registry (service), or to other database specially configured
    • e.g. MySQL, MSSQL, PostgreSQL, etc,
  • Will require changes to ReactOS and database server
  • Will not be usable for first stages of boot (until database is started)