Difference between revisions of "User:BrentNewland"

From ReactOS Wiki
Jump to: navigation, search
m (Updates)
m (ReactLive? InteractOS?)
Line 513: Line 513:
*[http://codetyper.tk/ Elite Programming]
*[http://codetyper.tk/ Elite Programming]
===Virtual Machine===
Makes sense to be able to access your virtual machines through the interface for expedited testing.
*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
====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
**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.
====Client Side====
Install a small server with PHP
*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

Latest revision as of 08:16, 1 July 2012


Important Links

Need to write rapps scripts for

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


  • 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)


  • 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


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


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


  • 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


ViewVc is written in Python, something PHP would be nice


  • 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



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)


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



  • 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


  • 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.


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


A Breed Apart



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


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 has secure version (FTPS) - ssl instead of ssh


  • 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 support (needed to do proxies via your client browser control panel)




Quote of the Day








SSH Server

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


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


  • BitTorrent server (torrential or tbdev)


Nothing comparable yet


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



Error Control, Benchmarking, Debugging


Automated Build Systems/Continuous Integration Systems for PHP


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




finally got PHP to fork



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)


  • 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)