<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.soylentnews.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michealpwalls</id>
	<title>SoylentNews - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.soylentnews.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Michealpwalls"/>
	<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/wiki/Special:Contributions/Michealpwalls"/>
	<updated>2026-06-02T18:31:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.4</generator>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7546</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7546"/>
		<updated>2014-05-12T17:56:25Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: /* Integrated Development Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or mrcoolbp.  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| The real head of Dev, but due to time constrains of being the head of SN, only a member.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| audioguy&amp;lt;ref name=&amp;quot;audioguy_notes&amp;quot;&amp;gt;See [[AudioGuyWorkNotes]] for current todo and working notes - documentation of system and cleanup of css to get things into a ste that new templates and Themes can be made.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| right hand man to paulej72 and second in command for Dev.&lt;br /&gt;
| UTC-8 (PST) &lt;br /&gt;
|-&lt;br /&gt;
| FatPhil &lt;br /&gt;
| perl/mysql odd-jobber, some ubuntu/sys knowledge too&lt;br /&gt;
| UTC+2&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| secondary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
Please see [[DevelopmentVMHowto]] for the full How To.&lt;br /&gt;
&lt;br /&gt;
User crutchy has some additional notes on git here: [[User:Crutchy#Git.2FGitHub]] and some notes on the slashdev vm here: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sub&amp;gt;'''Note''' This is a work in progress. Currently the Windows development environment seems mostly useless except for Syntax Highlighting and basic Code Navigation.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and optionally the PadWalker module, for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
:Eclipse with the ''EPIC'' Plug-In provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime.&lt;br /&gt;
&lt;br /&gt;
:'''Before you Begin:''' It's important to note that if you are running 64-bit Windows, you should choose the 64-bit JRE and pair it with a 64-bit Eclipse. They cannot be mis-matched (A 32-bit JRE with a 64-bit Eclipse or vice versa).&lt;br /&gt;
&lt;br /&gt;
:'''Step 1)''':&lt;br /&gt;
:: Download Oracle's runtime for free below. You can choose the JRE (Runtime Environment) if you only want to do Perl/Slashcode development or the JDK (Development Kit) if you want to do Perl/Slashcode development and Java development in the future. Choosing the JRE will save you disk space:&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html Java Runtime Environment 7u55]&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Java Developer Kit 7u55]&lt;br /&gt;
&lt;br /&gt;
:'''Step 1.1)''':&lt;br /&gt;
:: After you have installed the JRE and restarted Windows, follow this guide from Oracle to setup the environment variables for Windows, including the PATH and CLASSPATH variables:&lt;br /&gt;
:: [http://docs.oracle.com/javase/tutorial/essential/environment/paths.html Environment Paths]&lt;br /&gt;
&lt;br /&gt;
:'''Step 2)''':&lt;br /&gt;
:: Install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
:: [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
:'''Step 3)''':&lt;br /&gt;
::Install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. From within Eclipse, click the &amp;quot;Help&amp;quot; top strip-menu and choose the &amp;quot;Install New Software&amp;quot; option. You can also find detailed instructions below, however they may become out of date:&lt;br /&gt;
:: [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
::: [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7456</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7456"/>
		<updated>2014-05-05T15:13:04Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: /* Integrated Development Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or mrcoolbp.  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| The real head of Dev, but due to time constrains of being the head of SN, only a member.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| audioguy&amp;lt;ref name=&amp;quot;audioguy_notes&amp;quot;&amp;gt;See [[AudioGuyWorkNotes]] for current todo and working notes - documentation of system and cleanup of css to get things into a ste that new templates and Themes can be made.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| right hand man to paulej72 and second in command for Dev.&lt;br /&gt;
| UTC-8 (PST) &lt;br /&gt;
|-&lt;br /&gt;
| FatPhil &lt;br /&gt;
| perl/mysql odd-jobber, some ubuntu/sys knowledge too&lt;br /&gt;
| UTC+2&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| secondary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
(audiogy note - will leave this here for the moment, it belongs on its own page as referenced above)&lt;br /&gt;
&lt;br /&gt;
The Dev VM can be downloaded from http://torrents.soylentnews.org/.  This is a vim that is designed to run on VirtualBox. Information and downloads of VirtualBox are available here: http://torrents.soylentnews.org/.&lt;br /&gt;
&lt;br /&gt;
Once you get the VM downloaded and the VirtualBox up and ruining, you will want to do a '''File:Import Appliance''' in VirtualBox.  This will unpack the VM into you environment. Start up the VM and log in with the username and password of slash.&lt;br /&gt;
&lt;br /&gt;
The VM has port forwarding setup to you local system for ssh and http.  &lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh: 8022&amp;lt;br/&amp;gt;&lt;br /&gt;
	http; 1337&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For ssh your connection string should be:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh slash@127.0.0.1 -p 8022&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For websites, apache will use the name localhost instead of 127.0.0.1 so you will need to use:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;http://localhost:1337	&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache is turned off in the VM.  You will need to turn it on using the command:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;apachectl start&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The slash user home directory is in /srv/slashdev/.  The slashcode GitHub repository is located in slashcode. This is where you will make changes to the code you want to test.  The actual slashcode install is located in slash.&lt;br /&gt;
&lt;br /&gt;
The first thing you should probably do is update the repo to the latest version.  cd to slashcode and run git pull.&lt;br /&gt;
&lt;br /&gt;
Now we need to install the new code to slash.  Here is a script that will help with that.  Create a new file called deployslash.sh in the slash home directory and give chmod it to 755.&lt;br /&gt;
&lt;br /&gt;
deployslash.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;#! /bin/sh&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Install from git repo ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
cd /srv/slashdev/slashcode&amp;lt;br/&amp;gt;&lt;br /&gt;
make USER=slash GROUP=slash SLASH_PREFIX=/srv/slashdev/slash install&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Clean up CSS and install Templates ==&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
rm -rf /srv/slashdev/slash/site/slashdev/htdocs/*css&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/symlink-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/template-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Restart Apache ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/apache/bin/apachectl restart&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script will be part of the next version of the Dev VM.&lt;br /&gt;
&lt;br /&gt;
To do simple updates, you would make changes to the files in slashcode and redeploy using the deployslash.sh script.&lt;br /&gt;
&lt;br /&gt;
What if you want to develop code and have it merged into the main repo?  In this case you will need to setup your own copy of the repo do do your development work.  First if you do not have your own account on GitHub please set one up. Next go to the slashcode site https://github.com/SoylentNews/slashcode and click on Fork in the upper right.  Fork the repo to your user account.&lt;br /&gt;
&lt;br /&gt;
Now on the VM go to slashcode.  We will setup your copy of the repo as a remote.  Run the commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;	git remote add {name} {url-to-your-GitHub-repo}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git fetch {name}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git checkout {name}/master&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redeploy slash and you are working from your own repo.  As you may have noticed the primary work is being done on the master branch.  You will not need to worry about the other branches of the code for now.&lt;br /&gt;
&lt;br /&gt;
Once you get code you like, and have it committed to your personal fork, you can do a Pull Request, https://help.github.com/articles/using-pull-requests, that will create a ticket for the SoylentNews/slashcode repo to merge your commits to the master branch.  After proper testing by the Dev team and other sanity checks, you code will be merged and eventually put on to the production servers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Just a note: I am new to git, so the above directions are what I have been using.  If people have a better method for doing this please feel free to update this page with the new information --pauulej72.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
crutchy has some additional notes on git here: [[User:Crutchy#Git.2FGitHub]] and some notes on the slashdev vm here: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and optionally the PadWalker module, for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
:Eclipse with the ''EPIC'' Plug-In provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime.&lt;br /&gt;
&lt;br /&gt;
:'''Before you Begin:''' It's important to note that if you are running 64-bit Windows, you should choose the 64-bit JRE and pair it with a 64-bit Eclipse. They cannot be mis-matched (A 32-bit JRE with a 64-bit Eclipse or vice versa).&lt;br /&gt;
&lt;br /&gt;
:'''Step 1)''':&lt;br /&gt;
:: Download Oracle's runtime for free below. You can choose the JRE (Runtime Environment) if you only want to do Perl/Slashcode development or the JDK (Development Kit) if you want to do Perl/Slashcode development and Java development in the future. Choosing the JRE will save you disk space:&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html Java Runtime Environment 7u55]&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Java Developer Kit 7u55]&lt;br /&gt;
&lt;br /&gt;
:'''Step 1.1)''':&lt;br /&gt;
:: After you have installed the JRE and restarted Windows, follow this guide from Oracle to setup the environment variables for Windows, including the PATH and CLASSPATH variables:&lt;br /&gt;
:: [http://docs.oracle.com/javase/tutorial/essential/environment/paths.html Environment Paths]&lt;br /&gt;
&lt;br /&gt;
:'''Step 2)''':&lt;br /&gt;
:: Install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
:: [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
:'''Step 3)''':&lt;br /&gt;
::Install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. From within Eclipse, click the &amp;quot;Help&amp;quot; top strip-menu and choose the &amp;quot;Install New Software&amp;quot; option. You can also find detailed instructions below, however they may become out of date:&lt;br /&gt;
:: [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
::: [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7455</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7455"/>
		<updated>2014-05-05T15:11:48Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: /* Integrated Development Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or mrcoolbp.  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| The real head of Dev, but due to time constrains of being the head of SN, only a member.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| audioguy&amp;lt;ref name=&amp;quot;audioguy_notes&amp;quot;&amp;gt;See [[AudioGuyWorkNotes]] for current todo and working notes - documentation of system and cleanup of css to get things into a ste that new templates and Themes can be made.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| right hand man to paulej72 and second in command for Dev.&lt;br /&gt;
| UTC-8 (PST) &lt;br /&gt;
|-&lt;br /&gt;
| FatPhil &lt;br /&gt;
| perl/mysql odd-jobber, some ubuntu/sys knowledge too&lt;br /&gt;
| UTC+2&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| secondary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
(audiogy note - will leave this here for the moment, it belongs on its own page as referenced above)&lt;br /&gt;
&lt;br /&gt;
The Dev VM can be downloaded from http://torrents.soylentnews.org/.  This is a vim that is designed to run on VirtualBox. Information and downloads of VirtualBox are available here: http://torrents.soylentnews.org/.&lt;br /&gt;
&lt;br /&gt;
Once you get the VM downloaded and the VirtualBox up and ruining, you will want to do a '''File:Import Appliance''' in VirtualBox.  This will unpack the VM into you environment. Start up the VM and log in with the username and password of slash.&lt;br /&gt;
&lt;br /&gt;
The VM has port forwarding setup to you local system for ssh and http.  &lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh: 8022&amp;lt;br/&amp;gt;&lt;br /&gt;
	http; 1337&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For ssh your connection string should be:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh slash@127.0.0.1 -p 8022&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For websites, apache will use the name localhost instead of 127.0.0.1 so you will need to use:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;http://localhost:1337	&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache is turned off in the VM.  You will need to turn it on using the command:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;apachectl start&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The slash user home directory is in /srv/slashdev/.  The slashcode GitHub repository is located in slashcode. This is where you will make changes to the code you want to test.  The actual slashcode install is located in slash.&lt;br /&gt;
&lt;br /&gt;
The first thing you should probably do is update the repo to the latest version.  cd to slashcode and run git pull.&lt;br /&gt;
&lt;br /&gt;
Now we need to install the new code to slash.  Here is a script that will help with that.  Create a new file called deployslash.sh in the slash home directory and give chmod it to 755.&lt;br /&gt;
&lt;br /&gt;
deployslash.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;#! /bin/sh&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Install from git repo ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
cd /srv/slashdev/slashcode&amp;lt;br/&amp;gt;&lt;br /&gt;
make USER=slash GROUP=slash SLASH_PREFIX=/srv/slashdev/slash install&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Clean up CSS and install Templates ==&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
rm -rf /srv/slashdev/slash/site/slashdev/htdocs/*css&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/symlink-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/template-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Restart Apache ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/apache/bin/apachectl restart&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script will be part of the next version of the Dev VM.&lt;br /&gt;
&lt;br /&gt;
To do simple updates, you would make changes to the files in slashcode and redeploy using the deployslash.sh script.&lt;br /&gt;
&lt;br /&gt;
What if you want to develop code and have it merged into the main repo?  In this case you will need to setup your own copy of the repo do do your development work.  First if you do not have your own account on GitHub please set one up. Next go to the slashcode site https://github.com/SoylentNews/slashcode and click on Fork in the upper right.  Fork the repo to your user account.&lt;br /&gt;
&lt;br /&gt;
Now on the VM go to slashcode.  We will setup your copy of the repo as a remote.  Run the commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;	git remote add {name} {url-to-your-GitHub-repo}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git fetch {name}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git checkout {name}/master&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redeploy slash and you are working from your own repo.  As you may have noticed the primary work is being done on the master branch.  You will not need to worry about the other branches of the code for now.&lt;br /&gt;
&lt;br /&gt;
Once you get code you like, and have it committed to your personal fork, you can do a Pull Request, https://help.github.com/articles/using-pull-requests, that will create a ticket for the SoylentNews/slashcode repo to merge your commits to the master branch.  After proper testing by the Dev team and other sanity checks, you code will be merged and eventually put on to the production servers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Just a note: I am new to git, so the above directions are what I have been using.  If people have a better method for doing this please feel free to update this page with the new information --pauulej72.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
crutchy has some additional notes on git here: [[User:Crutchy#Git.2FGitHub]] and some notes on the slashdev vm here: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and optionally the PadWalker module, for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
:Eclipse with the ''EPIC'' Plug-In provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime.&lt;br /&gt;
&lt;br /&gt;
:'''Before you Begin:''' It's important to note that if you are running 64-bit Windows, you should choose the 64-bit JRE and pair it with a 64-bit Eclipse. They cannot be mis-matched (A 32-bit JRE with a 64-bit Eclipse or vice versa).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''Step 1)''':&lt;br /&gt;
:: Download Oracle's runtime for free below. You can choose the JRE (Runtime Environment) if you only want to do Perl/Slashcode development or the JDK (Development Kit) if you want to do Perl/Slashcode development and Java development in the future. Choosing the JRE will save you disk space:&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html Java Runtime Environment 7u55]&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Java Developer Kit 7u55]&lt;br /&gt;
&lt;br /&gt;
:'''Step 1.1)''':&lt;br /&gt;
:: After you have installed the JRE and restarted Windows, follow this guide from Oracle to setup the environment variables for Windows, including the PATH and CLASSPATH variables:&lt;br /&gt;
:: [http://docs.oracle.com/javase/tutorial/essential/environment/paths.html Environment Paths]&lt;br /&gt;
&lt;br /&gt;
:'''Step 2)''':&lt;br /&gt;
:: Install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
:: [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
:'''Step 3)''':&lt;br /&gt;
::Install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. From within Eclipse, click the &amp;quot;Help&amp;quot; top strip-menu and choose the &amp;quot;Install New Software&amp;quot; option. You can also find detailed instructions below, however they may become out of date:&lt;br /&gt;
:: [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
::: [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7454</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7454"/>
		<updated>2014-05-05T15:07:39Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: /* Integrated Development Environment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or mrcoolbp.  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| The real head of Dev, but due to time constrains of being the head of SN, only a member.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| audioguy&amp;lt;ref name=&amp;quot;audioguy_notes&amp;quot;&amp;gt;See [[AudioGuyWorkNotes]] for current todo and working notes - documentation of system and cleanup of css to get things into a ste that new templates and Themes can be made.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| right hand man to paulej72 and second in command for Dev.&lt;br /&gt;
| UTC-8 (PST) &lt;br /&gt;
|-&lt;br /&gt;
| FatPhil &lt;br /&gt;
| perl/mysql odd-jobber, some ubuntu/sys knowledge too&lt;br /&gt;
| UTC+2&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| secondary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
(audiogy note - will leave this here for the moment, it belongs on its own page as referenced above)&lt;br /&gt;
&lt;br /&gt;
The Dev VM can be downloaded from http://torrents.soylentnews.org/.  This is a vim that is designed to run on VirtualBox. Information and downloads of VirtualBox are available here: http://torrents.soylentnews.org/.&lt;br /&gt;
&lt;br /&gt;
Once you get the VM downloaded and the VirtualBox up and ruining, you will want to do a '''File:Import Appliance''' in VirtualBox.  This will unpack the VM into you environment. Start up the VM and log in with the username and password of slash.&lt;br /&gt;
&lt;br /&gt;
The VM has port forwarding setup to you local system for ssh and http.  &lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh: 8022&amp;lt;br/&amp;gt;&lt;br /&gt;
	http; 1337&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For ssh your connection string should be:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh slash@127.0.0.1 -p 8022&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For websites, apache will use the name localhost instead of 127.0.0.1 so you will need to use:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;http://localhost:1337	&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache is turned off in the VM.  You will need to turn it on using the command:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;apachectl start&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The slash user home directory is in /srv/slashdev/.  The slashcode GitHub repository is located in slashcode. This is where you will make changes to the code you want to test.  The actual slashcode install is located in slash.&lt;br /&gt;
&lt;br /&gt;
The first thing you should probably do is update the repo to the latest version.  cd to slashcode and run git pull.&lt;br /&gt;
&lt;br /&gt;
Now we need to install the new code to slash.  Here is a script that will help with that.  Create a new file called deployslash.sh in the slash home directory and give chmod it to 755.&lt;br /&gt;
&lt;br /&gt;
deployslash.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;#! /bin/sh&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Install from git repo ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
cd /srv/slashdev/slashcode&amp;lt;br/&amp;gt;&lt;br /&gt;
make USER=slash GROUP=slash SLASH_PREFIX=/srv/slashdev/slash install&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Clean up CSS and install Templates ==&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
rm -rf /srv/slashdev/slash/site/slashdev/htdocs/*css&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/symlink-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/template-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Restart Apache ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/apache/bin/apachectl restart&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script will be part of the next version of the Dev VM.&lt;br /&gt;
&lt;br /&gt;
To do simple updates, you would make changes to the files in slashcode and redeploy using the deployslash.sh script.&lt;br /&gt;
&lt;br /&gt;
What if you want to develop code and have it merged into the main repo?  In this case you will need to setup your own copy of the repo do do your development work.  First if you do not have your own account on GitHub please set one up. Next go to the slashcode site https://github.com/SoylentNews/slashcode and click on Fork in the upper right.  Fork the repo to your user account.&lt;br /&gt;
&lt;br /&gt;
Now on the VM go to slashcode.  We will setup your copy of the repo as a remote.  Run the commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;	git remote add {name} {url-to-your-GitHub-repo}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git fetch {name}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git checkout {name}/master&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redeploy slash and you are working from your own repo.  As you may have noticed the primary work is being done on the master branch.  You will not need to worry about the other branches of the code for now.&lt;br /&gt;
&lt;br /&gt;
Once you get code you like, and have it committed to your personal fork, you can do a Pull Request, https://help.github.com/articles/using-pull-requests, that will create a ticket for the SoylentNews/slashcode repo to merge your commits to the master branch.  After proper testing by the Dev team and other sanity checks, you code will be merged and eventually put on to the production servers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Just a note: I am new to git, so the above directions are what I have been using.  If people have a better method for doing this please feel free to update this page with the new information --pauulej72.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
crutchy has some additional notes on git here: [[User:Crutchy#Git.2FGitHub]] and some notes on the slashdev vm here: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and :optionally the PadWalker module, for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for :Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
:Eclipse with the ''EPIC'' Plug-In provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime.&lt;br /&gt;
&lt;br /&gt;
:'''Before you Begin:''' It's important to note that if you are running 64-bit Windows, you should choose the 64-bit JRE and pair it with a 64-bit Eclipse. They cannot be mis-matched (A 32-bit JRE with a 64-bit Eclipse or vice versa).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''Step 1)''':&lt;br /&gt;
:: Download Oracle's runtime for free below. You can choose the JRE (Runtime Environment) if you only want to do Perl/Slashcode development or the JDK (Development Kit) if you want to do Perl/Slashcode development and Java development in the future. Choosing the JRE will save you disk space:&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html Java Runtime Environment 7u55]&lt;br /&gt;
:: [http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html Java Developer Kit 7u55]&lt;br /&gt;
&lt;br /&gt;
:'''Step 1.1)''':&lt;br /&gt;
:: After you have installed the JRE and restarted Windows, follow this guide from Oracle to setup the environment variables for Windows, including the PATH and CLASSPATH variables:&lt;br /&gt;
:: [http://docs.oracle.com/javase/tutorial/essential/environment/paths.html Environment Paths]&lt;br /&gt;
&lt;br /&gt;
:'''Step 2)''':&lt;br /&gt;
:: Install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
:: [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
:'''Step 3)''':&lt;br /&gt;
::Install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. From within Eclipse, click the &amp;quot;Help&amp;quot; top strip-menu and choose the &amp;quot;Install New Software&amp;quot; option. You can also find detailed instructions below, however they may become out of date:&lt;br /&gt;
:: [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
::: [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Historic:CssWork&amp;diff=7453</id>
		<title>Historic:CssWork</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Historic:CssWork&amp;diff=7453"/>
		<updated>2014-05-05T14:15:31Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: /* Use an IDE as an alternative */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
== AudioGuy ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]] What I am actually working on will be found here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Note - paulj ==&lt;br /&gt;
&lt;br /&gt;
With javascript on, when I submit a story using the submit story link, and use the preview function, the background of the preview is solid red.  Not just the header, the body as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
This is getting too big, and much of it has nothing to do directly with css, so I have moved this index to:&lt;br /&gt;
* [[SlashDocumentationIndex]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unanswered Questions ==&lt;br /&gt;
* The templates are individually output by routine slashDisplay(), but how is the order of delivery determined, and how does one insure a new template goes to the right place on the page?&lt;br /&gt;
* The users home page link goes to /my/homepage. I can find no apache redirect for this nor is there a 'my' folder anywhere. I am guessing this is done in the apache perl module, through some redirects that hook into Apache innards. It is hard to be sure what script is actually being called first. I am assuming it is users. Once an edit is made, you are in /users.pl without /my/&lt;br /&gt;
* Two users scripts, users,users2 Am guesssing users2 is for the d2 interface we are not using, since the forms on the page call users.pl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* There are actually four mysterious redirects:&lt;br /&gt;
** /my/&lt;br /&gt;
** soyenltnews.org/~audioguy/ redirects to my user pageg overriding the apache userdir.&lt;br /&gt;
** The index page is either .pl or shtml, other pages too in some cases ?&lt;br /&gt;
** The page authors.pl ALWAYS redirects to authors.shtml and there MAY be others like this. Most .pl pages do not however.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Partially Solved!!!!! 2 out of 4 !!!&lt;br /&gt;
&lt;br /&gt;
From the install script:&lt;br /&gt;
&lt;br /&gt;
# this directive will redirect non-logged-in users to&lt;br /&gt;
    # index.shtml if they request the home page; turn it&lt;br /&gt;
    # on to help increase performance or if you are using something&lt;br /&gt;
    # other than index.pl for the index&lt;br /&gt;
    PerlTransHandler Slash::Apache::IndexHandler&lt;br /&gt;
&lt;br /&gt;
    # this directive will display a user's pages at /~username&lt;br /&gt;
    PerlTransHandler Slash::Apache::User::userdir_handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The redirect of authors.pl SOLVED!!!&lt;br /&gt;
&lt;br /&gt;
And other pages. It is HARD CODED. !!!&lt;br /&gt;
&lt;br /&gt;
Location: file in final install: /usr/local/lib64/perl5/Slash/Apache.pm       subroutine: IndexHandler()&lt;br /&gt;
&lt;br /&gt;
        if ($uri eq '/authors.pl') {&lt;br /&gt;
                my $filename = $r-&amp;gt;filename;&lt;br /&gt;
                my $basedir  = $constants-&amp;gt;{basedir};&lt;br /&gt;
&lt;br /&gt;
                if (!$dbon || !$is_user) {&lt;br /&gt;
                        $r-&amp;gt;uri('/authors.shtml');&lt;br /&gt;
                        $r-&amp;gt;filename(&amp;quot;$basedir/authors.shtml&amp;quot;);&lt;br /&gt;
                        writeLog('shtml');&lt;br /&gt;
                        return OK;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Along with a number of others.&lt;br /&gt;
&lt;br /&gt;
                                # For any directory which can be accessed by a&lt;br /&gt;
                                # logged-in user in the URI form /foo or /foo/,&lt;br /&gt;
                                # but which is not a skin's directory, there&lt;br /&gt;
                                # is a problem;  we cannot simply bounce the uri&lt;br /&gt;
                                # back to /index.pl or whatever, since the&lt;br /&gt;
                                # index handler will not recognize the section&lt;br /&gt;
                                # key argument above and will just present the&lt;br /&gt;
                                # ordinary homepage.  I don't know the best way&lt;br /&gt;
                                # to handle this situation at the moment, so&lt;br /&gt;
                                # instead I'm hardcoding in the solution for the&lt;br /&gt;
                                # most common problem. - Jamie 2004/07/17&lt;br /&gt;
&lt;br /&gt;
Apparently /foo/ is used as a skin directory by default, anything else, problem...&lt;br /&gt;
&lt;br /&gt;
Others:&lt;br /&gt;
      &lt;br /&gt;
        if ($uri eq '/hof.pl') {&lt;br /&gt;
                my $basedir  = $constants-&amp;gt;{basedir};&lt;br /&gt;
&lt;br /&gt;
        if ($uri eq '/code.shtml') {&lt;br /&gt;
                redirect('/faq/code.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
       } elsif ($uri eq '/slashdottit.shtml') {&lt;br /&gt;
                redirect('/faq/badges.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
        } elsif ($uri eq '/book.review.guidelines.shtml') {&lt;br /&gt;
                redirect('/faq/bookreviews.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
        # redirect to static if&lt;br /&gt;
        # * not a user, nor a daypass holder,&lt;br /&gt;
        # and&lt;br /&gt;
        # * var is on&lt;br /&gt;
        # * is article.pl&lt;br /&gt;
        # * no page number &amp;gt; 1 specified&lt;br /&gt;
        # * sid specified&lt;br /&gt;
        # * referrer exists AND is external to our site&lt;br /&gt;
        if (!$dbon &amp;amp;&amp;amp; $uri !~ /\.(?:shtml|html|jpg|gif|png|rss|rdf|xml|txt|css)$/) {&lt;br /&gt;
                # if db is off we don't necessarily have access to constants&lt;br /&gt;
                # this means we change the URI and return DECLINED which lets&lt;br /&gt;
                # Apache do the URI to filename translation&lt;br /&gt;
                $r-&amp;gt;uri('/index.shtml');&lt;br /&gt;
                writeLog('shtml');&lt;br /&gt;
                $r-&amp;gt;notes('SLASH_FAILURE' =&amp;gt; &amp;quot;db&amp;quot;); # You should be able to find this in other processes&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return DECLINED;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STILL UNCERTAIN - the /my/ redirection. However, it -may- be done in the same code section, if it is assumed to represent a 'page' or 'skin' by the slash code. Which would appear likely.&lt;br /&gt;
&lt;br /&gt;
I believe this may be where that redirection lies, bu my perl syntax knowledge is too limited to be certain:&lt;br /&gt;
&lt;br /&gt;
        # match /section/ or /section&lt;br /&gt;
        if ($uri =~ m|^/(\w+)/?$|) {&lt;br /&gt;
                my $key = $1;&lt;br /&gt;
&lt;br /&gt;
                if (!$dbon) {&lt;br /&gt;
                        $r-&amp;gt;uri('/index.shtml');&lt;br /&gt;
                        return DECLINED;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##### This code is the best likely place to put a handler to force all unlogged in users to the login page I have yet found. The user/reader/anonymous user determination seems to be here.&lt;br /&gt;
&lt;br /&gt;
SEE ALSO  /usr/local/lib64/perl5/Slash/Apache/User.pm which handles the /my/ targets.&lt;br /&gt;
&lt;br /&gt;
The my redirect is specifically in /usr/local/lib64/perl5/Slash/Apache/User.pm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Got tired of scrolling through pages of perl code just to see what subs were in a module==&lt;br /&gt;
&lt;br /&gt;
So wrote this, now in /usr/local/sbin/listsubs.sh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@slashcode Slash]# listsubs.sh Admin.pm&lt;br /&gt;
Admin.pm:&lt;br /&gt;
    addSpriteForSid, ajax_authorbox, ajax_learnword, ajax_neverdisplay, &lt;br /&gt;
    ajax_perfbox, ajax_signoff, ajax_signoffbox, ajax_slashdbox, &lt;br /&gt;
    ajax_storyadminbox, ajax_sub_memory, DESTROY, extractRelatedStoriesFromForm, &lt;br /&gt;
    findTheTime, getAccesslogAbusersByID, getAccesslogMaxID, get_ispell_comments, &lt;br /&gt;
    getRecentSubs, getRecentWebheads, getRelated, getSignoffData, &lt;br /&gt;
    getStorySignoffs, getStoryThumbLargeLink, grantStoryPostingAchievements, otherLinks, &lt;br /&gt;
    relatedLinks, showAdminTodo, showAuthorActivityBox, showPerformanceBox, &lt;br /&gt;
    showSignoffBox, showSlashdBox, showStoryAdminBox, write_to_temp_file, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also will work from a list, as in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls *.pm &amp;gt; list.tst&lt;br /&gt;
listsubs.sh &amp;lt; list.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maybe someone else will find it useful as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use an IDE as an alternative ===&lt;br /&gt;
The &amp;lt;sub&amp;gt;listsubs&amp;lt;/sub&amp;gt; shell script is useful and very interesting, however if you are on a platform that cannot run Shell scripts or if you simply want a more integrated solution there are powerful tools that you can use.&lt;br /&gt;
&lt;br /&gt;
An IDE (''Integrated Development Environment'') makes working with large code bases much easy. According to many developers, it is the ''only'' way to work with large and complex code bases.&lt;br /&gt;
&lt;br /&gt;
One of the many ways an IDE makes things so much easier is that they help you ''Navigate'' the project as well as integrating the different tools you need to use. In addition to navigating the Project, the IDEs automatically scan the code you have open to collect lists of very useful information for you including Procedures and Sub Procedures.&lt;br /&gt;
&lt;br /&gt;
Here's a small gallery of Screen-Shots from both Eclipse and Geany showing off this capability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Windows-Eclipse-Navigator.png|Eclipse on Windows, showing off the Code|Project Navigators&lt;br /&gt;
File:Windows-Geany-Sidebar.png|Geany on Windows, showing off the SideBar&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you think either Eclipse or Geany might be useful for you, a simple guide exists on the SoylentNews Wiki's Developer page:&lt;br /&gt;
&lt;br /&gt;
: [[Development#Integrated_Development_Environment|Development - Integrated Development Environment]]&lt;br /&gt;
&lt;br /&gt;
==Order css files are loaded when simple switch on user prefs page is selected viewing main page main page==&lt;br /&gt;
&lt;br /&gt;
* base.css?T_2_5_0_272 The numbers are the slash verion number (from one of the docs).&lt;br /&gt;
* slashcode.css?T_2_5__0_272&lt;br /&gt;
* slashcode_lite.css?T_2_5__0_272&lt;br /&gt;
* slashcode_lite.css?T_2_5__0_272 (appears to be loading this twice,why?)&lt;br /&gt;
* print.cssT_2_5__0_272&lt;br /&gt;
&lt;br /&gt;
==Follow a page link from the main page to an individual article page ==&lt;br /&gt;
&lt;br /&gt;
* Link: http://soylentnews.org/article.pl?sid=14/02/18/0336229&lt;br /&gt;
* article.pl is foind in slash/themes/slashcode/htdocs/article.pl So 'slashcode' is treated as a theme.&lt;br /&gt;
&lt;br /&gt;
==article.pl==&lt;br /&gt;
The stuff of interest to us&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use Slash;  -------- located in /local/lib64/perl5/slash.pm&lt;br /&gt;
use Slash::Display;     &lt;br /&gt;
use Slash::Utility;&lt;br /&gt;
&lt;br /&gt;
sub main {&lt;br /&gt;
        my $slashdb   = getCurrentDB();&lt;br /&gt;
        my $constants = getCurrentStatic();&lt;br /&gt;
        my $user      = getCurrentUser();&lt;br /&gt;
        my $form      = getCurrentForm();&lt;br /&gt;
        my $gSkin     = getCurrentSkin();&lt;br /&gt;
         &lt;br /&gt;
        my $story;&lt;br /&gt;
        my $reader = getObject('Slash::DB', { db_type =&amp;gt; 'reader' });&lt;br /&gt;
&lt;br /&gt;
                # Make sure the reader is viewing this story in the&lt;br /&gt;
                # proper skin.&lt;br /&gt;
                my $cur_skid = determineCurrentSkin();&lt;br /&gt;
                if ($story-&amp;gt;{primaryskid} != $cur_skid) {&lt;br /&gt;
                        my $cur_skin = $reader-&amp;gt;getSkin($cur_skid);&lt;br /&gt;
                        my $story_skin = $reader-&amp;gt;getSkin($story-&amp;gt;{primaryskid});&lt;br /&gt;
                        if ($story_skin &amp;amp;&amp;amp; $story_skin-&amp;gt;{rootdir}&lt;br /&gt;
                                &amp;amp;&amp;amp; $story_skin-&amp;gt;{rootdir} ne $cur_skin-&amp;gt;{rootdir})$&lt;br /&gt;
                                redirect(&amp;quot;$story_skin-&amp;gt;{rootdir}$ENV{REQUEST_URI}&amp;quot;$&lt;br /&gt;
                                return;&lt;br /&gt;
&lt;br /&gt;
               # XXXSECTIONTOPICS this needs to be updated&lt;br /&gt;
                my $SECT = $reader-&amp;gt;getSection($story-&amp;gt;{section});&lt;br /&gt;
                # This should be a getData call for title&lt;br /&gt;
                my $title = &amp;quot;$constants-&amp;gt;{sitename} | $story-&amp;gt;{title}&amp;quot;;&lt;br /&gt;
                if ($gSkin-&amp;gt;{name} &amp;amp;&amp;amp; $gSkin-&amp;gt;{name} eq &amp;quot;idle&amp;quot;) {&lt;br /&gt;
                        $title = &amp;quot;$gSkin-&amp;gt;{hostname} | $story-&amp;gt;{title}&amp;quot;;&lt;br /&gt;
                &lt;br /&gt;
if (my $pollbooth_db = getObject('Slash::PollBooth')) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
slashDisplay('display', {&lt;br /&gt;
                        poll                    =&amp;gt; $pollbooth,&lt;br /&gt;
                        section                 =&amp;gt; $SECT,&lt;br /&gt;
                        section_block           =&amp;gt; $reader-&amp;gt;getBlock($SECT-&amp;gt;{secti$&lt;br /&gt;
                        show_poll               =&amp;gt; $pollbooth ? 1 : 0,&lt;br /&gt;
                        story                   =&amp;gt; $story,&lt;br /&gt;
                        stories                 =&amp;gt; \%stories,&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               my $called_pc = 0;&lt;br /&gt;
                if ($story-&amp;gt;{discussion}) {&lt;br /&gt;
                        # Still not happy with this logic -Brian&lt;br /&gt;
                        my $discussion = $reader-&amp;gt;getDiscussion($story-&amp;gt;{discussio$&lt;br /&gt;
&lt;br /&gt;
                        }&lt;br /&gt;
                        # If no comments ever have existed and commentstatus is di$&lt;br /&gt;
                        # just skip the display of the comment header bar -Brian&lt;br /&gt;
&lt;br /&gt;
                               &amp;amp;&amp;amp;  $discussion-&amp;gt;{commentstatus} eq 'disabled'&lt;br /&gt;
                        )) {&lt;br /&gt;
                                printComments($discussion);&lt;br /&gt;
                                $called_pc = 1;&lt;br /&gt;
                        }&lt;br /&gt;
                 if (!$called_pc &amp;amp;&amp;amp; $form-&amp;gt;{ssi} &amp;amp;&amp;amp; $form-&amp;gt;{ssi} eq 'yes' &amp;amp;&amp;amp; $form-$&lt;br /&gt;
                        # This is a real hack, we're kind of skipping down&lt;br /&gt;
                        # two levels of code.  But the cchp printing is an&lt;br /&gt;
                        # important optimization;  we avoid having to do&lt;br /&gt;
                        # multiple expensive comment selects.  One problem&lt;br /&gt;
                        # is that if there's no discussion with a story,&lt;br /&gt;
                        # printComments() doesn't get called, which means&lt;br /&gt;
                        # selectComments() doesn't get called, which means&lt;br /&gt;
                        # the cchp file won't be written.  If article.pl&lt;br /&gt;
                       # is being called by slashd, and we need to write&lt;br /&gt;
                        # that file, then here's where we print an empty&lt;br /&gt;
                        # file that will satisfy slashd. - Jamie&lt;br /&gt;
&lt;br /&gt;
                        Slash::Utility::Comments::_print_cchp({ stoid =&amp;gt; &amp;quot;dummy&amp;quot; }$&lt;br /&gt;
                }&lt;br /&gt;
        } else {&lt;br /&gt;
                header('Error', $form-&amp;gt;{section}) or return;&lt;br /&gt;
       &lt;br /&gt;
       my $plugins = $slashdb-&amp;gt;getDescriptions('plugins');&lt;br /&gt;
        if (!$user-&amp;gt;{is_anon} &amp;amp;&amp;amp; $plugins-&amp;gt;{Tags} &amp;amp;&amp;amp; $story) {&lt;br /&gt;
                my $tagsdb = getObject('Slash::Tags');&lt;br /&gt;
                $tagsdb-&amp;gt;markViewed($user-&amp;gt;{uid},&lt;br /&gt;
                        $reader-&amp;gt;getGlobjidCreate('stories', $story-&amp;gt;{stoid}));&lt;br /&gt;
        }&lt;br /&gt;
                        &lt;br /&gt;
        footer();&lt;br /&gt;
        if ($story) {&lt;br /&gt;
                writeLog($story-&amp;gt;{sid} || $sid);&lt;br /&gt;
        } else { &lt;br /&gt;
                writeLog($sid);&lt;br /&gt;
&lt;br /&gt;
               &lt;br /&gt;
createEnvironment();&lt;br /&gt;
main();  &lt;br /&gt;
1; &lt;br /&gt;
&lt;br /&gt;
(EOF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Slash/DB/MySQL/MySQL.pm==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line start=&amp;quot;479&amp;quot;&amp;gt;&lt;br /&gt;
sub getCSS {&lt;br /&gt;
        my($self, $layout) = @_;&lt;br /&gt;
        my $user = getCurrentUser();&lt;br /&gt;
        my $page = $user-&amp;gt;{currentPage};&lt;br /&gt;
        my $skin = getCurrentSkin('name');&lt;br /&gt;
        my $admin = $user-&amp;gt;{is_admin};&lt;br /&gt;
        my $theme = ($user-&amp;gt;{simpledesign} || $user-&amp;gt;{pda}) ? &amp;quot;light&amp;quot; : $user-&amp;gt;{css_theme};&lt;br /&gt;
        my $secure = apacheConnectionSSL();&lt;br /&gt;
        $layout ||= '';&lt;br /&gt;
        my $constants = getCurrentStatic();&lt;br /&gt;
&lt;br /&gt;
        my $expire_time = $constants-&amp;gt;{css_expire} || 3600;&lt;br /&gt;
        $expire_time += int(rand(60)) if $expire_time;&lt;br /&gt;
        _genericCacheRefresh($self, 'css', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_pages', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_skins', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_themes', $expire_time);&lt;br /&gt;
&lt;br /&gt;
        my $css_ref             = $self-&amp;gt;{_css_cache} ||= {};&lt;br /&gt;
        my $css_pages_ref       = $self-&amp;gt;{_css_pages_cache};&lt;br /&gt;
        my $css_skins_ref       = $self-&amp;gt;{_css_skins_cache};&lt;br /&gt;
        my $css_themes_ref      = $self-&amp;gt;{_css_themes_cache};&lt;br /&gt;
        my $css_layouts_ref     = $self-&amp;gt;{_css_layouts_cache};&lt;br /&gt;
&lt;br /&gt;
        $css_pages_ref = $self-&amp;gt;getCSSValuesHashForCol('page') if !$css_pages_ref;&lt;br /&gt;
        $css_skins_ref = $self-&amp;gt;getCSSValuesHashForCol('skin') if !$css_skins_ref;&lt;br /&gt;
        $css_themes_ref = $self-&amp;gt;getCSSValuesHashForCol('theme') if !$css_themes_ref;&lt;br /&gt;
        $css_layouts_ref = $self-&amp;gt;getCSSValuesHashForCol('layout') if !$css_layouts_ref;&lt;br /&gt;
&lt;br /&gt;
        my $lowbandwidth = ($user-&amp;gt;{lowbandwidth} || $user-&amp;gt;{pda}) ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $page   = '' if !$css_pages_ref-&amp;gt;{$page};&lt;br /&gt;
        $skin   = '' if !$css_skins_ref-&amp;gt;{$skin};&lt;br /&gt;
        $theme  = '' if !$css_themes_ref-&amp;gt;{$theme};&lt;br /&gt;
        $layout = '' if !$css_layouts_ref-&amp;gt;{$layout};&lt;br /&gt;
&lt;br /&gt;
        return $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure}&lt;br /&gt;
                if exists $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure};&lt;br /&gt;
&lt;br /&gt;
        my @clauses;&lt;br /&gt;
&lt;br /&gt;
        my $page_q = $self-&amp;gt;sqlQuote($page);&lt;br /&gt;
        my $page_in = $page ? &amp;quot;(page = '' or page = $page_q)&amp;quot; : &amp;quot;page = ''&amp;quot;;&lt;br /&gt;
        push @clauses, $page_in;&lt;br /&gt;
&lt;br /&gt;
        my $skin_in = $skin ? &amp;quot;(skin = '' or skin = '$skin')&amp;quot; : &amp;quot;skin = ''&amp;quot;;&lt;br /&gt;
        push @clauses, $skin_in;&lt;br /&gt;
&lt;br /&gt;
        push @clauses, &amp;quot;admin='no'&amp;quot; if !$admin;&lt;br /&gt;
&lt;br /&gt;
        my $theme_q  = $self-&amp;gt;sqlQuote($theme);&lt;br /&gt;
        my $theme_in = $theme ? &amp;quot;(theme='' or theme=$theme_q)&amp;quot; : &amp;quot;theme=''&amp;quot;;&lt;br /&gt;
        push @clauses, $theme_in;&lt;br /&gt;
&lt;br /&gt;
        push @clauses, &amp;quot;lowbandwidth='$lowbandwidth'&amp;quot; if $lowbandwidth eq &amp;quot;no&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        my $layout_q = $self-&amp;gt;sqlQuote($layout);&lt;br /&gt;
        push @clauses, &amp;quot;layout=$layout_q&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        my $where = &amp;quot;css.ctid=css_type.ctid AND &amp;quot;;&lt;br /&gt;
        $where .= join ' AND ', @clauses;&lt;br /&gt;
&lt;br /&gt;
        my $css = $self-&amp;gt;sqlSelectAllHashrefArray(&amp;quot;rel,type,media,file,title,ie_cond,skin&amp;quot;,&lt;br /&gt;
                &amp;quot;css, css_type&amp;quot;, $where, &amp;quot;ORDER BY css_type.ordernum, css.ordernum&amp;quot;);&lt;br /&gt;
        if ($secure) {&lt;br /&gt;
                for my $hr (@$css) { $hr-&amp;gt;{file} =~ s/\.css/.ssl.css/ }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure} = $css;&lt;br /&gt;
        return $css;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Slash/Apache/User/User.pm==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line start=&amp;quot;548&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
my %ops_my = (&lt;br /&gt;
        inbox           =&amp;gt; { args =&amp;gt; 'op=list', uri =&amp;gt; 'messages.pl' },&lt;br /&gt;
        # XXX change messages to be same as /inbox, move this to /my/preferences/messages&lt;br /&gt;
        messages        =&amp;gt; { args =&amp;gt; 'op=display_prefs', uri =&amp;gt; 'messages.pl' },&lt;br /&gt;
        comments        =&amp;gt; { args =&amp;gt; 'op=editcomm' },&lt;br /&gt;
        homepage        =&amp;gt; { args =&amp;gt; 'op=edithome' },&lt;br /&gt;
        password        =&amp;gt; { args =&amp;gt; 'op=changeprefs', uri =&amp;gt; 'login.pl' },&lt;br /&gt;
        logout          =&amp;gt; { args =&amp;gt; 'op=userclose', uri =&amp;gt; 'login.pl' },&lt;br /&gt;
        misc            =&amp;gt; { args =&amp;gt; 'op=editmiscopts' },&lt;br /&gt;
        amigos          =&amp;gt; { args =&amp;gt; 'op=friendview', uri =&amp;gt; 'journal.pl' },&lt;br /&gt;
        bookmarks       =&amp;gt; { args =&amp;gt; 'op=showbookmarks' },&lt;br /&gt;
        firehose        =&amp;gt; { args =&amp;gt; 'op=userfirehose' },&lt;br /&gt;
        preferences     =&amp;gt; { args =&amp;gt; 'op=displayprefs', uri =&amp;gt; 'preferences.pl' },&lt;br /&gt;
        tags            =&amp;gt; { args =&amp;gt; 'op=showtags' },&lt;br /&gt;
        journal         =&amp;gt; { args =&amp;gt; 'op=list', uri =&amp;gt; 'journal.pl' },&lt;br /&gt;
&lt;br /&gt;
        friends         =&amp;gt; { args =&amp;gt; 'op=friends', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        fans            =&amp;gt; { args =&amp;gt; 'op=fans', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        freaks          =&amp;gt; { args =&amp;gt; 'op=freaks', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        foes            =&amp;gt; { args =&amp;gt; 'op=foes', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        zoo             =&amp;gt; { args =&amp;gt; 'op=all', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
&lt;br /&gt;
        default         =&amp;gt; { args =&amp;gt; 'op=edituser' }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==sql/mysql/defaults.sql==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line start=&amp;quot;134&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','base.css','','','','no','',1,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','comments','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','article','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','print','print.css','','','','no','',5,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','admin.css','','','','yes','',1,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','pollBooth','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_lite.css','','','','no','light',4,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','journal','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_lite.css','','','','no','light',4,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','journal','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode.css','','','','no','',3,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','metamod','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_low_bw.css','','','','no','',4,99, &amp;quot;&amp;quot;,&amp;quot;yes&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Dumping data for table 'css_type'&lt;br /&gt;
#&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (1,'base',1);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (2,'page',2);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (3,'theme',3);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (4,'user_theme',5);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (5,'print',6);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (6,'skin',4);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (7,'handheld',7);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==plugins/FireHose/mysql_dump.sql ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','users','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','calendar.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','users','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','index2','no','',2,0, ''); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;I believe that we are not using FireHose but it was needed to make the site work.  As can be seen in the db dump above, it adds the firehose.css file to any of the user pages. Need to verify and then see if we can get the db purged of these values.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Good work. The question in my mind is why the heck css for one module has any effect *at all* on any other module. Talk about lack of localization...-AG&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;I think there was some firehose slashboxes that showed up in the users pages.  They needed to be wider than the default, so they patched those pages with the firehose.css. Next step is to get a current dump of the two css tables. The important part is I know what files are for what parts of the code.  Slashcode.css is the theme css file slashcode-lite.css is the style file that is called by a user pref.  This means I need to fix comments.css to remove the theme elements I inserted and put them in the theme file.  I still need to make sure that the changes that benefited the Simplified theme stay intact. -EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==fonts==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is what I usually start with:&lt;br /&gt;
   font-family: Helvetica,Geneva,Arial,Verdana,sans-serif;&lt;br /&gt;
&lt;br /&gt;
Too many can lead to a LOT of testing being required. As can the wrong order. ;-)&lt;br /&gt;
&lt;br /&gt;
Others I have used in the past:&lt;br /&gt;
font-family: Geneva,Arial,Verdana,Helvetica,Chicago,sans-serif;&lt;br /&gt;
font-family: Helvetica,Arial,Geneva,Chicago,Verdana,sans-serif;&lt;br /&gt;
font-family: Helvetica,Geneva,Arial,Verdana,sans-serif;&lt;br /&gt;
-AG&lt;br /&gt;
&lt;br /&gt;
I have used:&lt;br /&gt;
font-family: Verdana, Geneva, &amp;quot;Bitstream Vera Sans&amp;quot;, &amp;quot;DejaVu Sans&amp;quot;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
Note this has Linux fonts as well to help with these users.&lt;br /&gt;
-EP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User Menu==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line start=&amp;quot;123&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Logout','logout','/my/logout',1,0,10);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Preferences','preferences','/users.pl?op=edituser',1,0,20);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Password','password','[% constants.real_rootdir %]/my/password',1,0,40);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','~[% user.nickname | strip_literal %] ([% user.uid %])','me','/~[% user.nickname | fixparam %]',1,0,50);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; This code sets up the upper menu on http://slashcott.org/users.pl which is linked from your userid on the home page.  The Preferences is wrong, as it needs to be all three links: Info, Homepage, Comments.  This will allow users with low-bandwidth option set to easily get to the setting to unset low-bandwidth. -EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Refernces to css in the man pages in /usr/local/share/man/man3==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i css *&lt;br /&gt;
&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;enable_css&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;enable_css&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:Set some handy \s-1CSS\s0 class attributes on elements, enabled by default.&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;semantic_css&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;semantic_css&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:Sets some additional \s-1CSS\s0 class attributes on elements, disabled by&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;\fIdefault_css()\fR&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;default_css()&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:document in conjunction with the classes assigned to elements when css&lt;br /&gt;
HTML::ElementSuper.3pm:might be when you'd like to assign multiple \s-1CSS\s0 classes to a single&lt;br /&gt;
HTML::PopupTreeSelect.3pm:.IP &amp;quot;include_css (optional)&amp;quot; 4&lt;br /&gt;
HTML::PopupTreeSelect.3pm:.IX Item &amp;quot;include_css (optional)&amp;quot;&lt;br /&gt;
HTML::PopupTreeSelect.3pm:Set this to 0 and the default \s-1CSS\s0 will not be included in the widget&lt;br /&gt;
HTML::PopupTreeSelect.3pm:output.  This allows you to include your own \s-1CSS\s0 which will be used by&lt;br /&gt;
HTML::PopupTreeSelect.3pm:your widget.  Modifying the \s-1CSS\s0 will allow you to control the fonts,&lt;br /&gt;
HTML::PopupTreeSelect.3pm:If you run the widget with include_css set to 1 then you can use that&lt;br /&gt;
HTML::Tree::Scanning.3pm:tagging, such is as useful in \s-1CSS\s0 \*(-- note the&lt;br /&gt;
Module::Build::API.3pm:.IP &amp;quot;\fIhtml_css()\fR&amp;quot; 4&lt;br /&gt;
Module::Build::API.3pm:.IX Item &amp;quot;html_css()&amp;quot;&lt;br /&gt;
TAP::Parser::YAMLish::Reader.3pm:YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny,&lt;br /&gt;
TAP::Parser::YAMLish::Writer.3pm:YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny,&lt;br /&gt;
Template::Iterator.3pm:You can then style the \f(CW\*(C`tr.odd\*(C'\fR and \f(CW\*(C`tr.even\*(C'\fR elements using \s-1CSS:\s0&lt;br /&gt;
Template::Toolkit.3pm:kind of text documents: \s-1HTML\s0, \s-1XML\s0, \s-1CSS\s0, Javascript, Perl code, plain text,&lt;br /&gt;
Template::Tutorial::Web.3pm:kind of content they contain.  So you can use \s-1TT\s0 to generate \s-1HTML\s0, \s-1XML\s0, \s-1CSS\s0,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CSS commit for Feb 23==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Changes to most of the css files to set all sizes to em (some were in px and broke flow). Changed the font-family to a more friendly chain for all platforms, and remove all other font-faimily calls from the code. Changed font sizes from % to ems and adjusted size for some of the main elements. Fix a issue with the middle column size caused by firehose.css. Many small fixes to spacing over many places.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moved all of the slashcode theme items into the slashcode.cssraw file. Some were in comments.cssraw due to some previous work I did.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On article body and comment body, made the font size a bit smaller. Also on comments body set the margins to be smaller.&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;-EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:User experience]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Historic:CssWork&amp;diff=7452</id>
		<title>Historic:CssWork</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Historic:CssWork&amp;diff=7452"/>
		<updated>2014-05-05T14:13:19Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: /* IDE as an Alternative */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
== AudioGuy ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]] What I am actually working on will be found here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Note - paulj ==&lt;br /&gt;
&lt;br /&gt;
With javascript on, when I submit a story using the submit story link, and use the preview function, the background of the preview is solid red.  Not just the header, the body as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
This is getting too big, and much of it has nothing to do directly with css, so I have moved this index to:&lt;br /&gt;
* [[SlashDocumentationIndex]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unanswered Questions ==&lt;br /&gt;
* The templates are individually output by routine slashDisplay(), but how is the order of delivery determined, and how does one insure a new template goes to the right place on the page?&lt;br /&gt;
* The users home page link goes to /my/homepage. I can find no apache redirect for this nor is there a 'my' folder anywhere. I am guessing this is done in the apache perl module, through some redirects that hook into Apache innards. It is hard to be sure what script is actually being called first. I am assuming it is users. Once an edit is made, you are in /users.pl without /my/&lt;br /&gt;
* Two users scripts, users,users2 Am guesssing users2 is for the d2 interface we are not using, since the forms on the page call users.pl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* There are actually four mysterious redirects:&lt;br /&gt;
** /my/&lt;br /&gt;
** soyenltnews.org/~audioguy/ redirects to my user pageg overriding the apache userdir.&lt;br /&gt;
** The index page is either .pl or shtml, other pages too in some cases ?&lt;br /&gt;
** The page authors.pl ALWAYS redirects to authors.shtml and there MAY be others like this. Most .pl pages do not however.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Partially Solved!!!!! 2 out of 4 !!!&lt;br /&gt;
&lt;br /&gt;
From the install script:&lt;br /&gt;
&lt;br /&gt;
# this directive will redirect non-logged-in users to&lt;br /&gt;
    # index.shtml if they request the home page; turn it&lt;br /&gt;
    # on to help increase performance or if you are using something&lt;br /&gt;
    # other than index.pl for the index&lt;br /&gt;
    PerlTransHandler Slash::Apache::IndexHandler&lt;br /&gt;
&lt;br /&gt;
    # this directive will display a user's pages at /~username&lt;br /&gt;
    PerlTransHandler Slash::Apache::User::userdir_handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The redirect of authors.pl SOLVED!!!&lt;br /&gt;
&lt;br /&gt;
And other pages. It is HARD CODED. !!!&lt;br /&gt;
&lt;br /&gt;
Location: file in final install: /usr/local/lib64/perl5/Slash/Apache.pm       subroutine: IndexHandler()&lt;br /&gt;
&lt;br /&gt;
        if ($uri eq '/authors.pl') {&lt;br /&gt;
                my $filename = $r-&amp;gt;filename;&lt;br /&gt;
                my $basedir  = $constants-&amp;gt;{basedir};&lt;br /&gt;
&lt;br /&gt;
                if (!$dbon || !$is_user) {&lt;br /&gt;
                        $r-&amp;gt;uri('/authors.shtml');&lt;br /&gt;
                        $r-&amp;gt;filename(&amp;quot;$basedir/authors.shtml&amp;quot;);&lt;br /&gt;
                        writeLog('shtml');&lt;br /&gt;
                        return OK;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Along with a number of others.&lt;br /&gt;
&lt;br /&gt;
                                # For any directory which can be accessed by a&lt;br /&gt;
                                # logged-in user in the URI form /foo or /foo/,&lt;br /&gt;
                                # but which is not a skin's directory, there&lt;br /&gt;
                                # is a problem;  we cannot simply bounce the uri&lt;br /&gt;
                                # back to /index.pl or whatever, since the&lt;br /&gt;
                                # index handler will not recognize the section&lt;br /&gt;
                                # key argument above and will just present the&lt;br /&gt;
                                # ordinary homepage.  I don't know the best way&lt;br /&gt;
                                # to handle this situation at the moment, so&lt;br /&gt;
                                # instead I'm hardcoding in the solution for the&lt;br /&gt;
                                # most common problem. - Jamie 2004/07/17&lt;br /&gt;
&lt;br /&gt;
Apparently /foo/ is used as a skin directory by default, anything else, problem...&lt;br /&gt;
&lt;br /&gt;
Others:&lt;br /&gt;
      &lt;br /&gt;
        if ($uri eq '/hof.pl') {&lt;br /&gt;
                my $basedir  = $constants-&amp;gt;{basedir};&lt;br /&gt;
&lt;br /&gt;
        if ($uri eq '/code.shtml') {&lt;br /&gt;
                redirect('/faq/code.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
       } elsif ($uri eq '/slashdottit.shtml') {&lt;br /&gt;
                redirect('/faq/badges.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
        } elsif ($uri eq '/book.review.guidelines.shtml') {&lt;br /&gt;
                redirect('/faq/bookreviews.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
        # redirect to static if&lt;br /&gt;
        # * not a user, nor a daypass holder,&lt;br /&gt;
        # and&lt;br /&gt;
        # * var is on&lt;br /&gt;
        # * is article.pl&lt;br /&gt;
        # * no page number &amp;gt; 1 specified&lt;br /&gt;
        # * sid specified&lt;br /&gt;
        # * referrer exists AND is external to our site&lt;br /&gt;
        if (!$dbon &amp;amp;&amp;amp; $uri !~ /\.(?:shtml|html|jpg|gif|png|rss|rdf|xml|txt|css)$/) {&lt;br /&gt;
                # if db is off we don't necessarily have access to constants&lt;br /&gt;
                # this means we change the URI and return DECLINED which lets&lt;br /&gt;
                # Apache do the URI to filename translation&lt;br /&gt;
                $r-&amp;gt;uri('/index.shtml');&lt;br /&gt;
                writeLog('shtml');&lt;br /&gt;
                $r-&amp;gt;notes('SLASH_FAILURE' =&amp;gt; &amp;quot;db&amp;quot;); # You should be able to find this in other processes&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return DECLINED;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STILL UNCERTAIN - the /my/ redirection. However, it -may- be done in the same code section, if it is assumed to represent a 'page' or 'skin' by the slash code. Which would appear likely.&lt;br /&gt;
&lt;br /&gt;
I believe this may be where that redirection lies, bu my perl syntax knowledge is too limited to be certain:&lt;br /&gt;
&lt;br /&gt;
        # match /section/ or /section&lt;br /&gt;
        if ($uri =~ m|^/(\w+)/?$|) {&lt;br /&gt;
                my $key = $1;&lt;br /&gt;
&lt;br /&gt;
                if (!$dbon) {&lt;br /&gt;
                        $r-&amp;gt;uri('/index.shtml');&lt;br /&gt;
                        return DECLINED;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##### This code is the best likely place to put a handler to force all unlogged in users to the login page I have yet found. The user/reader/anonymous user determination seems to be here.&lt;br /&gt;
&lt;br /&gt;
SEE ALSO  /usr/local/lib64/perl5/Slash/Apache/User.pm which handles the /my/ targets.&lt;br /&gt;
&lt;br /&gt;
The my redirect is specifically in /usr/local/lib64/perl5/Slash/Apache/User.pm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Got tired of scrolling through pages of perl code just to see what subs were in a module==&lt;br /&gt;
&lt;br /&gt;
So wrote this, now in /usr/local/sbin/listsubs.sh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@slashcode Slash]# listsubs.sh Admin.pm&lt;br /&gt;
Admin.pm:&lt;br /&gt;
    addSpriteForSid, ajax_authorbox, ajax_learnword, ajax_neverdisplay, &lt;br /&gt;
    ajax_perfbox, ajax_signoff, ajax_signoffbox, ajax_slashdbox, &lt;br /&gt;
    ajax_storyadminbox, ajax_sub_memory, DESTROY, extractRelatedStoriesFromForm, &lt;br /&gt;
    findTheTime, getAccesslogAbusersByID, getAccesslogMaxID, get_ispell_comments, &lt;br /&gt;
    getRecentSubs, getRecentWebheads, getRelated, getSignoffData, &lt;br /&gt;
    getStorySignoffs, getStoryThumbLargeLink, grantStoryPostingAchievements, otherLinks, &lt;br /&gt;
    relatedLinks, showAdminTodo, showAuthorActivityBox, showPerformanceBox, &lt;br /&gt;
    showSignoffBox, showSlashdBox, showStoryAdminBox, write_to_temp_file, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also will work from a list, as in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls *.pm &amp;gt; list.tst&lt;br /&gt;
listsubs.sh &amp;lt; list.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maybe someone else will find it useful as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Use an IDE as an alternative ===&lt;br /&gt;
The &amp;lt;sub&amp;gt;listsubs&amp;lt;/sub&amp;gt; shell script is useful and very interesting, however if you are on a platform that cannot run Shell scripts or if you simply want a more integrated solution there are powerful tools that you can use.&lt;br /&gt;
&lt;br /&gt;
An IDE (''Integrated Development Environment'') makes working with large code bases much easy. In my opinion, it is the ''only'' way to work with large and complex code bases.&lt;br /&gt;
&lt;br /&gt;
One of the many ways an IDE makes things so much easier is that they help you ''Navigate'' the project as well as integrating the different tools you need to use. In addition to navigating the Project, the IDEs automatically scan the code you have open to collect lists of very useful information for you including Procedures and Sub Procedures.&lt;br /&gt;
&lt;br /&gt;
Here's a small gallery of Screen-Shots from both Eclipse and Geany showing off this capability:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Windows-Eclipse-Navigator.png|Eclipse on Windows, showing off the Code|Project Navigators&lt;br /&gt;
File:Windows-Geany-Sidebar.png|Geany on Windows, showing off the SideBar&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you think either Eclipse or Geany might be useful for you, a simple guide exists on the SoylentNews Wiki's Developer page:&lt;br /&gt;
&lt;br /&gt;
: [[Development#Integrated_Development_Environment|Development - Integrated Development Environment]]&lt;br /&gt;
&lt;br /&gt;
==Order css files are loaded when simple switch on user prefs page is selected viewing main page main page==&lt;br /&gt;
&lt;br /&gt;
* base.css?T_2_5_0_272 The numbers are the slash verion number (from one of the docs).&lt;br /&gt;
* slashcode.css?T_2_5__0_272&lt;br /&gt;
* slashcode_lite.css?T_2_5__0_272&lt;br /&gt;
* slashcode_lite.css?T_2_5__0_272 (appears to be loading this twice,why?)&lt;br /&gt;
* print.cssT_2_5__0_272&lt;br /&gt;
&lt;br /&gt;
==Follow a page link from the main page to an individual article page ==&lt;br /&gt;
&lt;br /&gt;
* Link: http://soylentnews.org/article.pl?sid=14/02/18/0336229&lt;br /&gt;
* article.pl is foind in slash/themes/slashcode/htdocs/article.pl So 'slashcode' is treated as a theme.&lt;br /&gt;
&lt;br /&gt;
==article.pl==&lt;br /&gt;
The stuff of interest to us&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use Slash;  -------- located in /local/lib64/perl5/slash.pm&lt;br /&gt;
use Slash::Display;     &lt;br /&gt;
use Slash::Utility;&lt;br /&gt;
&lt;br /&gt;
sub main {&lt;br /&gt;
        my $slashdb   = getCurrentDB();&lt;br /&gt;
        my $constants = getCurrentStatic();&lt;br /&gt;
        my $user      = getCurrentUser();&lt;br /&gt;
        my $form      = getCurrentForm();&lt;br /&gt;
        my $gSkin     = getCurrentSkin();&lt;br /&gt;
         &lt;br /&gt;
        my $story;&lt;br /&gt;
        my $reader = getObject('Slash::DB', { db_type =&amp;gt; 'reader' });&lt;br /&gt;
&lt;br /&gt;
                # Make sure the reader is viewing this story in the&lt;br /&gt;
                # proper skin.&lt;br /&gt;
                my $cur_skid = determineCurrentSkin();&lt;br /&gt;
                if ($story-&amp;gt;{primaryskid} != $cur_skid) {&lt;br /&gt;
                        my $cur_skin = $reader-&amp;gt;getSkin($cur_skid);&lt;br /&gt;
                        my $story_skin = $reader-&amp;gt;getSkin($story-&amp;gt;{primaryskid});&lt;br /&gt;
                        if ($story_skin &amp;amp;&amp;amp; $story_skin-&amp;gt;{rootdir}&lt;br /&gt;
                                &amp;amp;&amp;amp; $story_skin-&amp;gt;{rootdir} ne $cur_skin-&amp;gt;{rootdir})$&lt;br /&gt;
                                redirect(&amp;quot;$story_skin-&amp;gt;{rootdir}$ENV{REQUEST_URI}&amp;quot;$&lt;br /&gt;
                                return;&lt;br /&gt;
&lt;br /&gt;
               # XXXSECTIONTOPICS this needs to be updated&lt;br /&gt;
                my $SECT = $reader-&amp;gt;getSection($story-&amp;gt;{section});&lt;br /&gt;
                # This should be a getData call for title&lt;br /&gt;
                my $title = &amp;quot;$constants-&amp;gt;{sitename} | $story-&amp;gt;{title}&amp;quot;;&lt;br /&gt;
                if ($gSkin-&amp;gt;{name} &amp;amp;&amp;amp; $gSkin-&amp;gt;{name} eq &amp;quot;idle&amp;quot;) {&lt;br /&gt;
                        $title = &amp;quot;$gSkin-&amp;gt;{hostname} | $story-&amp;gt;{title}&amp;quot;;&lt;br /&gt;
                &lt;br /&gt;
if (my $pollbooth_db = getObject('Slash::PollBooth')) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
slashDisplay('display', {&lt;br /&gt;
                        poll                    =&amp;gt; $pollbooth,&lt;br /&gt;
                        section                 =&amp;gt; $SECT,&lt;br /&gt;
                        section_block           =&amp;gt; $reader-&amp;gt;getBlock($SECT-&amp;gt;{secti$&lt;br /&gt;
                        show_poll               =&amp;gt; $pollbooth ? 1 : 0,&lt;br /&gt;
                        story                   =&amp;gt; $story,&lt;br /&gt;
                        stories                 =&amp;gt; \%stories,&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               my $called_pc = 0;&lt;br /&gt;
                if ($story-&amp;gt;{discussion}) {&lt;br /&gt;
                        # Still not happy with this logic -Brian&lt;br /&gt;
                        my $discussion = $reader-&amp;gt;getDiscussion($story-&amp;gt;{discussio$&lt;br /&gt;
&lt;br /&gt;
                        }&lt;br /&gt;
                        # If no comments ever have existed and commentstatus is di$&lt;br /&gt;
                        # just skip the display of the comment header bar -Brian&lt;br /&gt;
&lt;br /&gt;
                               &amp;amp;&amp;amp;  $discussion-&amp;gt;{commentstatus} eq 'disabled'&lt;br /&gt;
                        )) {&lt;br /&gt;
                                printComments($discussion);&lt;br /&gt;
                                $called_pc = 1;&lt;br /&gt;
                        }&lt;br /&gt;
                 if (!$called_pc &amp;amp;&amp;amp; $form-&amp;gt;{ssi} &amp;amp;&amp;amp; $form-&amp;gt;{ssi} eq 'yes' &amp;amp;&amp;amp; $form-$&lt;br /&gt;
                        # This is a real hack, we're kind of skipping down&lt;br /&gt;
                        # two levels of code.  But the cchp printing is an&lt;br /&gt;
                        # important optimization;  we avoid having to do&lt;br /&gt;
                        # multiple expensive comment selects.  One problem&lt;br /&gt;
                        # is that if there's no discussion with a story,&lt;br /&gt;
                        # printComments() doesn't get called, which means&lt;br /&gt;
                        # selectComments() doesn't get called, which means&lt;br /&gt;
                        # the cchp file won't be written.  If article.pl&lt;br /&gt;
                       # is being called by slashd, and we need to write&lt;br /&gt;
                        # that file, then here's where we print an empty&lt;br /&gt;
                        # file that will satisfy slashd. - Jamie&lt;br /&gt;
&lt;br /&gt;
                        Slash::Utility::Comments::_print_cchp({ stoid =&amp;gt; &amp;quot;dummy&amp;quot; }$&lt;br /&gt;
                }&lt;br /&gt;
        } else {&lt;br /&gt;
                header('Error', $form-&amp;gt;{section}) or return;&lt;br /&gt;
       &lt;br /&gt;
       my $plugins = $slashdb-&amp;gt;getDescriptions('plugins');&lt;br /&gt;
        if (!$user-&amp;gt;{is_anon} &amp;amp;&amp;amp; $plugins-&amp;gt;{Tags} &amp;amp;&amp;amp; $story) {&lt;br /&gt;
                my $tagsdb = getObject('Slash::Tags');&lt;br /&gt;
                $tagsdb-&amp;gt;markViewed($user-&amp;gt;{uid},&lt;br /&gt;
                        $reader-&amp;gt;getGlobjidCreate('stories', $story-&amp;gt;{stoid}));&lt;br /&gt;
        }&lt;br /&gt;
                        &lt;br /&gt;
        footer();&lt;br /&gt;
        if ($story) {&lt;br /&gt;
                writeLog($story-&amp;gt;{sid} || $sid);&lt;br /&gt;
        } else { &lt;br /&gt;
                writeLog($sid);&lt;br /&gt;
&lt;br /&gt;
               &lt;br /&gt;
createEnvironment();&lt;br /&gt;
main();  &lt;br /&gt;
1; &lt;br /&gt;
&lt;br /&gt;
(EOF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Slash/DB/MySQL/MySQL.pm==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line start=&amp;quot;479&amp;quot;&amp;gt;&lt;br /&gt;
sub getCSS {&lt;br /&gt;
        my($self, $layout) = @_;&lt;br /&gt;
        my $user = getCurrentUser();&lt;br /&gt;
        my $page = $user-&amp;gt;{currentPage};&lt;br /&gt;
        my $skin = getCurrentSkin('name');&lt;br /&gt;
        my $admin = $user-&amp;gt;{is_admin};&lt;br /&gt;
        my $theme = ($user-&amp;gt;{simpledesign} || $user-&amp;gt;{pda}) ? &amp;quot;light&amp;quot; : $user-&amp;gt;{css_theme};&lt;br /&gt;
        my $secure = apacheConnectionSSL();&lt;br /&gt;
        $layout ||= '';&lt;br /&gt;
        my $constants = getCurrentStatic();&lt;br /&gt;
&lt;br /&gt;
        my $expire_time = $constants-&amp;gt;{css_expire} || 3600;&lt;br /&gt;
        $expire_time += int(rand(60)) if $expire_time;&lt;br /&gt;
        _genericCacheRefresh($self, 'css', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_pages', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_skins', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_themes', $expire_time);&lt;br /&gt;
&lt;br /&gt;
        my $css_ref             = $self-&amp;gt;{_css_cache} ||= {};&lt;br /&gt;
        my $css_pages_ref       = $self-&amp;gt;{_css_pages_cache};&lt;br /&gt;
        my $css_skins_ref       = $self-&amp;gt;{_css_skins_cache};&lt;br /&gt;
        my $css_themes_ref      = $self-&amp;gt;{_css_themes_cache};&lt;br /&gt;
        my $css_layouts_ref     = $self-&amp;gt;{_css_layouts_cache};&lt;br /&gt;
&lt;br /&gt;
        $css_pages_ref = $self-&amp;gt;getCSSValuesHashForCol('page') if !$css_pages_ref;&lt;br /&gt;
        $css_skins_ref = $self-&amp;gt;getCSSValuesHashForCol('skin') if !$css_skins_ref;&lt;br /&gt;
        $css_themes_ref = $self-&amp;gt;getCSSValuesHashForCol('theme') if !$css_themes_ref;&lt;br /&gt;
        $css_layouts_ref = $self-&amp;gt;getCSSValuesHashForCol('layout') if !$css_layouts_ref;&lt;br /&gt;
&lt;br /&gt;
        my $lowbandwidth = ($user-&amp;gt;{lowbandwidth} || $user-&amp;gt;{pda}) ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $page   = '' if !$css_pages_ref-&amp;gt;{$page};&lt;br /&gt;
        $skin   = '' if !$css_skins_ref-&amp;gt;{$skin};&lt;br /&gt;
        $theme  = '' if !$css_themes_ref-&amp;gt;{$theme};&lt;br /&gt;
        $layout = '' if !$css_layouts_ref-&amp;gt;{$layout};&lt;br /&gt;
&lt;br /&gt;
        return $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure}&lt;br /&gt;
                if exists $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure};&lt;br /&gt;
&lt;br /&gt;
        my @clauses;&lt;br /&gt;
&lt;br /&gt;
        my $page_q = $self-&amp;gt;sqlQuote($page);&lt;br /&gt;
        my $page_in = $page ? &amp;quot;(page = '' or page = $page_q)&amp;quot; : &amp;quot;page = ''&amp;quot;;&lt;br /&gt;
        push @clauses, $page_in;&lt;br /&gt;
&lt;br /&gt;
        my $skin_in = $skin ? &amp;quot;(skin = '' or skin = '$skin')&amp;quot; : &amp;quot;skin = ''&amp;quot;;&lt;br /&gt;
        push @clauses, $skin_in;&lt;br /&gt;
&lt;br /&gt;
        push @clauses, &amp;quot;admin='no'&amp;quot; if !$admin;&lt;br /&gt;
&lt;br /&gt;
        my $theme_q  = $self-&amp;gt;sqlQuote($theme);&lt;br /&gt;
        my $theme_in = $theme ? &amp;quot;(theme='' or theme=$theme_q)&amp;quot; : &amp;quot;theme=''&amp;quot;;&lt;br /&gt;
        push @clauses, $theme_in;&lt;br /&gt;
&lt;br /&gt;
        push @clauses, &amp;quot;lowbandwidth='$lowbandwidth'&amp;quot; if $lowbandwidth eq &amp;quot;no&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        my $layout_q = $self-&amp;gt;sqlQuote($layout);&lt;br /&gt;
        push @clauses, &amp;quot;layout=$layout_q&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        my $where = &amp;quot;css.ctid=css_type.ctid AND &amp;quot;;&lt;br /&gt;
        $where .= join ' AND ', @clauses;&lt;br /&gt;
&lt;br /&gt;
        my $css = $self-&amp;gt;sqlSelectAllHashrefArray(&amp;quot;rel,type,media,file,title,ie_cond,skin&amp;quot;,&lt;br /&gt;
                &amp;quot;css, css_type&amp;quot;, $where, &amp;quot;ORDER BY css_type.ordernum, css.ordernum&amp;quot;);&lt;br /&gt;
        if ($secure) {&lt;br /&gt;
                for my $hr (@$css) { $hr-&amp;gt;{file} =~ s/\.css/.ssl.css/ }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure} = $css;&lt;br /&gt;
        return $css;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Slash/Apache/User/User.pm==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line start=&amp;quot;548&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
my %ops_my = (&lt;br /&gt;
        inbox           =&amp;gt; { args =&amp;gt; 'op=list', uri =&amp;gt; 'messages.pl' },&lt;br /&gt;
        # XXX change messages to be same as /inbox, move this to /my/preferences/messages&lt;br /&gt;
        messages        =&amp;gt; { args =&amp;gt; 'op=display_prefs', uri =&amp;gt; 'messages.pl' },&lt;br /&gt;
        comments        =&amp;gt; { args =&amp;gt; 'op=editcomm' },&lt;br /&gt;
        homepage        =&amp;gt; { args =&amp;gt; 'op=edithome' },&lt;br /&gt;
        password        =&amp;gt; { args =&amp;gt; 'op=changeprefs', uri =&amp;gt; 'login.pl' },&lt;br /&gt;
        logout          =&amp;gt; { args =&amp;gt; 'op=userclose', uri =&amp;gt; 'login.pl' },&lt;br /&gt;
        misc            =&amp;gt; { args =&amp;gt; 'op=editmiscopts' },&lt;br /&gt;
        amigos          =&amp;gt; { args =&amp;gt; 'op=friendview', uri =&amp;gt; 'journal.pl' },&lt;br /&gt;
        bookmarks       =&amp;gt; { args =&amp;gt; 'op=showbookmarks' },&lt;br /&gt;
        firehose        =&amp;gt; { args =&amp;gt; 'op=userfirehose' },&lt;br /&gt;
        preferences     =&amp;gt; { args =&amp;gt; 'op=displayprefs', uri =&amp;gt; 'preferences.pl' },&lt;br /&gt;
        tags            =&amp;gt; { args =&amp;gt; 'op=showtags' },&lt;br /&gt;
        journal         =&amp;gt; { args =&amp;gt; 'op=list', uri =&amp;gt; 'journal.pl' },&lt;br /&gt;
&lt;br /&gt;
        friends         =&amp;gt; { args =&amp;gt; 'op=friends', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        fans            =&amp;gt; { args =&amp;gt; 'op=fans', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        freaks          =&amp;gt; { args =&amp;gt; 'op=freaks', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        foes            =&amp;gt; { args =&amp;gt; 'op=foes', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        zoo             =&amp;gt; { args =&amp;gt; 'op=all', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
&lt;br /&gt;
        default         =&amp;gt; { args =&amp;gt; 'op=edituser' }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==sql/mysql/defaults.sql==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line start=&amp;quot;134&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','base.css','','','','no','',1,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','comments','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','article','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','print','print.css','','','','no','',5,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','admin.css','','','','yes','',1,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','pollBooth','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_lite.css','','','','no','light',4,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','journal','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_lite.css','','','','no','light',4,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','journal','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode.css','','','','no','',3,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','metamod','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_low_bw.css','','','','no','',4,99, &amp;quot;&amp;quot;,&amp;quot;yes&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Dumping data for table 'css_type'&lt;br /&gt;
#&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (1,'base',1);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (2,'page',2);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (3,'theme',3);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (4,'user_theme',5);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (5,'print',6);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (6,'skin',4);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (7,'handheld',7);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==plugins/FireHose/mysql_dump.sql ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','users','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','calendar.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','users','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','index2','no','',2,0, ''); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;I believe that we are not using FireHose but it was needed to make the site work.  As can be seen in the db dump above, it adds the firehose.css file to any of the user pages. Need to verify and then see if we can get the db purged of these values.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Good work. The question in my mind is why the heck css for one module has any effect *at all* on any other module. Talk about lack of localization...-AG&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;I think there was some firehose slashboxes that showed up in the users pages.  They needed to be wider than the default, so they patched those pages with the firehose.css. Next step is to get a current dump of the two css tables. The important part is I know what files are for what parts of the code.  Slashcode.css is the theme css file slashcode-lite.css is the style file that is called by a user pref.  This means I need to fix comments.css to remove the theme elements I inserted and put them in the theme file.  I still need to make sure that the changes that benefited the Simplified theme stay intact. -EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==fonts==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is what I usually start with:&lt;br /&gt;
   font-family: Helvetica,Geneva,Arial,Verdana,sans-serif;&lt;br /&gt;
&lt;br /&gt;
Too many can lead to a LOT of testing being required. As can the wrong order. ;-)&lt;br /&gt;
&lt;br /&gt;
Others I have used in the past:&lt;br /&gt;
font-family: Geneva,Arial,Verdana,Helvetica,Chicago,sans-serif;&lt;br /&gt;
font-family: Helvetica,Arial,Geneva,Chicago,Verdana,sans-serif;&lt;br /&gt;
font-family: Helvetica,Geneva,Arial,Verdana,sans-serif;&lt;br /&gt;
-AG&lt;br /&gt;
&lt;br /&gt;
I have used:&lt;br /&gt;
font-family: Verdana, Geneva, &amp;quot;Bitstream Vera Sans&amp;quot;, &amp;quot;DejaVu Sans&amp;quot;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
Note this has Linux fonts as well to help with these users.&lt;br /&gt;
-EP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User Menu==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line start=&amp;quot;123&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Logout','logout','/my/logout',1,0,10);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Preferences','preferences','/users.pl?op=edituser',1,0,20);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Password','password','[% constants.real_rootdir %]/my/password',1,0,40);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','~[% user.nickname | strip_literal %] ([% user.uid %])','me','/~[% user.nickname | fixparam %]',1,0,50);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; This code sets up the upper menu on http://slashcott.org/users.pl which is linked from your userid on the home page.  The Preferences is wrong, as it needs to be all three links: Info, Homepage, Comments.  This will allow users with low-bandwidth option set to easily get to the setting to unset low-bandwidth. -EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Refernces to css in the man pages in /usr/local/share/man/man3==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i css *&lt;br /&gt;
&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;enable_css&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;enable_css&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:Set some handy \s-1CSS\s0 class attributes on elements, enabled by default.&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;semantic_css&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;semantic_css&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:Sets some additional \s-1CSS\s0 class attributes on elements, disabled by&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;\fIdefault_css()\fR&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;default_css()&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:document in conjunction with the classes assigned to elements when css&lt;br /&gt;
HTML::ElementSuper.3pm:might be when you'd like to assign multiple \s-1CSS\s0 classes to a single&lt;br /&gt;
HTML::PopupTreeSelect.3pm:.IP &amp;quot;include_css (optional)&amp;quot; 4&lt;br /&gt;
HTML::PopupTreeSelect.3pm:.IX Item &amp;quot;include_css (optional)&amp;quot;&lt;br /&gt;
HTML::PopupTreeSelect.3pm:Set this to 0 and the default \s-1CSS\s0 will not be included in the widget&lt;br /&gt;
HTML::PopupTreeSelect.3pm:output.  This allows you to include your own \s-1CSS\s0 which will be used by&lt;br /&gt;
HTML::PopupTreeSelect.3pm:your widget.  Modifying the \s-1CSS\s0 will allow you to control the fonts,&lt;br /&gt;
HTML::PopupTreeSelect.3pm:If you run the widget with include_css set to 1 then you can use that&lt;br /&gt;
HTML::Tree::Scanning.3pm:tagging, such is as useful in \s-1CSS\s0 \*(-- note the&lt;br /&gt;
Module::Build::API.3pm:.IP &amp;quot;\fIhtml_css()\fR&amp;quot; 4&lt;br /&gt;
Module::Build::API.3pm:.IX Item &amp;quot;html_css()&amp;quot;&lt;br /&gt;
TAP::Parser::YAMLish::Reader.3pm:YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny,&lt;br /&gt;
TAP::Parser::YAMLish::Writer.3pm:YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny,&lt;br /&gt;
Template::Iterator.3pm:You can then style the \f(CW\*(C`tr.odd\*(C'\fR and \f(CW\*(C`tr.even\*(C'\fR elements using \s-1CSS:\s0&lt;br /&gt;
Template::Toolkit.3pm:kind of text documents: \s-1HTML\s0, \s-1XML\s0, \s-1CSS\s0, Javascript, Perl code, plain text,&lt;br /&gt;
Template::Tutorial::Web.3pm:kind of content they contain.  So you can use \s-1TT\s0 to generate \s-1HTML\s0, \s-1XML\s0, \s-1CSS\s0,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CSS commit for Feb 23==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Changes to most of the css files to set all sizes to em (some were in px and broke flow). Changed the font-family to a more friendly chain for all platforms, and remove all other font-faimily calls from the code. Changed font sizes from % to ems and adjusted size for some of the main elements. Fix a issue with the middle column size caused by firehose.css. Many small fixes to spacing over many places.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moved all of the slashcode theme items into the slashcode.cssraw file. Some were in comments.cssraw due to some previous work I did.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On article body and comment body, made the font size a bit smaller. Also on comments body set the margins to be smaller.&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;-EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:User experience]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Historic:CssWork&amp;diff=7451</id>
		<title>Historic:CssWork</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Historic:CssWork&amp;diff=7451"/>
		<updated>2014-05-05T14:04:52Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: /* Got tired of scrolling through pages of perl code just to see what subs were in a module */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Development]] - parent&lt;br /&gt;
&lt;br /&gt;
== AudioGuy ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]] What I am actually working on will be found here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Note - paulj ==&lt;br /&gt;
&lt;br /&gt;
With javascript on, when I submit a story using the submit story link, and use the preview function, the background of the preview is solid red.  Not just the header, the body as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
This is getting too big, and much of it has nothing to do directly with css, so I have moved this index to:&lt;br /&gt;
* [[SlashDocumentationIndex]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unanswered Questions ==&lt;br /&gt;
* The templates are individually output by routine slashDisplay(), but how is the order of delivery determined, and how does one insure a new template goes to the right place on the page?&lt;br /&gt;
* The users home page link goes to /my/homepage. I can find no apache redirect for this nor is there a 'my' folder anywhere. I am guessing this is done in the apache perl module, through some redirects that hook into Apache innards. It is hard to be sure what script is actually being called first. I am assuming it is users. Once an edit is made, you are in /users.pl without /my/&lt;br /&gt;
* Two users scripts, users,users2 Am guesssing users2 is for the d2 interface we are not using, since the forms on the page call users.pl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* There are actually four mysterious redirects:&lt;br /&gt;
** /my/&lt;br /&gt;
** soyenltnews.org/~audioguy/ redirects to my user pageg overriding the apache userdir.&lt;br /&gt;
** The index page is either .pl or shtml, other pages too in some cases ?&lt;br /&gt;
** The page authors.pl ALWAYS redirects to authors.shtml and there MAY be others like this. Most .pl pages do not however.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Partially Solved!!!!! 2 out of 4 !!!&lt;br /&gt;
&lt;br /&gt;
From the install script:&lt;br /&gt;
&lt;br /&gt;
# this directive will redirect non-logged-in users to&lt;br /&gt;
    # index.shtml if they request the home page; turn it&lt;br /&gt;
    # on to help increase performance or if you are using something&lt;br /&gt;
    # other than index.pl for the index&lt;br /&gt;
    PerlTransHandler Slash::Apache::IndexHandler&lt;br /&gt;
&lt;br /&gt;
    # this directive will display a user's pages at /~username&lt;br /&gt;
    PerlTransHandler Slash::Apache::User::userdir_handler&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The redirect of authors.pl SOLVED!!!&lt;br /&gt;
&lt;br /&gt;
And other pages. It is HARD CODED. !!!&lt;br /&gt;
&lt;br /&gt;
Location: file in final install: /usr/local/lib64/perl5/Slash/Apache.pm       subroutine: IndexHandler()&lt;br /&gt;
&lt;br /&gt;
        if ($uri eq '/authors.pl') {&lt;br /&gt;
                my $filename = $r-&amp;gt;filename;&lt;br /&gt;
                my $basedir  = $constants-&amp;gt;{basedir};&lt;br /&gt;
&lt;br /&gt;
                if (!$dbon || !$is_user) {&lt;br /&gt;
                        $r-&amp;gt;uri('/authors.shtml');&lt;br /&gt;
                        $r-&amp;gt;filename(&amp;quot;$basedir/authors.shtml&amp;quot;);&lt;br /&gt;
                        writeLog('shtml');&lt;br /&gt;
                        return OK;&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Along with a number of others.&lt;br /&gt;
&lt;br /&gt;
                                # For any directory which can be accessed by a&lt;br /&gt;
                                # logged-in user in the URI form /foo or /foo/,&lt;br /&gt;
                                # but which is not a skin's directory, there&lt;br /&gt;
                                # is a problem;  we cannot simply bounce the uri&lt;br /&gt;
                                # back to /index.pl or whatever, since the&lt;br /&gt;
                                # index handler will not recognize the section&lt;br /&gt;
                                # key argument above and will just present the&lt;br /&gt;
                                # ordinary homepage.  I don't know the best way&lt;br /&gt;
                                # to handle this situation at the moment, so&lt;br /&gt;
                                # instead I'm hardcoding in the solution for the&lt;br /&gt;
                                # most common problem. - Jamie 2004/07/17&lt;br /&gt;
&lt;br /&gt;
Apparently /foo/ is used as a skin directory by default, anything else, problem...&lt;br /&gt;
&lt;br /&gt;
Others:&lt;br /&gt;
      &lt;br /&gt;
        if ($uri eq '/hof.pl') {&lt;br /&gt;
                my $basedir  = $constants-&amp;gt;{basedir};&lt;br /&gt;
&lt;br /&gt;
        if ($uri eq '/code.shtml') {&lt;br /&gt;
                redirect('/faq/code.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
       } elsif ($uri eq '/slashdottit.shtml') {&lt;br /&gt;
                redirect('/faq/badges.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
        } elsif ($uri eq '/book.review.guidelines.shtml') {&lt;br /&gt;
                redirect('/faq/bookreviews.shtml', 301);&lt;br /&gt;
&lt;br /&gt;
        # redirect to static if&lt;br /&gt;
        # * not a user, nor a daypass holder,&lt;br /&gt;
        # and&lt;br /&gt;
        # * var is on&lt;br /&gt;
        # * is article.pl&lt;br /&gt;
        # * no page number &amp;gt; 1 specified&lt;br /&gt;
        # * sid specified&lt;br /&gt;
        # * referrer exists AND is external to our site&lt;br /&gt;
        if (!$dbon &amp;amp;&amp;amp; $uri !~ /\.(?:shtml|html|jpg|gif|png|rss|rdf|xml|txt|css)$/) {&lt;br /&gt;
                # if db is off we don't necessarily have access to constants&lt;br /&gt;
                # this means we change the URI and return DECLINED which lets&lt;br /&gt;
                # Apache do the URI to filename translation&lt;br /&gt;
                $r-&amp;gt;uri('/index.shtml');&lt;br /&gt;
                writeLog('shtml');&lt;br /&gt;
                $r-&amp;gt;notes('SLASH_FAILURE' =&amp;gt; &amp;quot;db&amp;quot;); # You should be able to find this in other processes&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        return DECLINED;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STILL UNCERTAIN - the /my/ redirection. However, it -may- be done in the same code section, if it is assumed to represent a 'page' or 'skin' by the slash code. Which would appear likely.&lt;br /&gt;
&lt;br /&gt;
I believe this may be where that redirection lies, bu my perl syntax knowledge is too limited to be certain:&lt;br /&gt;
&lt;br /&gt;
        # match /section/ or /section&lt;br /&gt;
        if ($uri =~ m|^/(\w+)/?$|) {&lt;br /&gt;
                my $key = $1;&lt;br /&gt;
&lt;br /&gt;
                if (!$dbon) {&lt;br /&gt;
                        $r-&amp;gt;uri('/index.shtml');&lt;br /&gt;
                        return DECLINED;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
##### This code is the best likely place to put a handler to force all unlogged in users to the login page I have yet found. The user/reader/anonymous user determination seems to be here.&lt;br /&gt;
&lt;br /&gt;
SEE ALSO  /usr/local/lib64/perl5/Slash/Apache/User.pm which handles the /my/ targets.&lt;br /&gt;
&lt;br /&gt;
The my redirect is specifically in /usr/local/lib64/perl5/Slash/Apache/User.pm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Got tired of scrolling through pages of perl code just to see what subs were in a module==&lt;br /&gt;
&lt;br /&gt;
So wrote this, now in /usr/local/sbin/listsubs.sh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@slashcode Slash]# listsubs.sh Admin.pm&lt;br /&gt;
Admin.pm:&lt;br /&gt;
    addSpriteForSid, ajax_authorbox, ajax_learnword, ajax_neverdisplay, &lt;br /&gt;
    ajax_perfbox, ajax_signoff, ajax_signoffbox, ajax_slashdbox, &lt;br /&gt;
    ajax_storyadminbox, ajax_sub_memory, DESTROY, extractRelatedStoriesFromForm, &lt;br /&gt;
    findTheTime, getAccesslogAbusersByID, getAccesslogMaxID, get_ispell_comments, &lt;br /&gt;
    getRecentSubs, getRecentWebheads, getRelated, getSignoffData, &lt;br /&gt;
    getStorySignoffs, getStoryThumbLargeLink, grantStoryPostingAchievements, otherLinks, &lt;br /&gt;
    relatedLinks, showAdminTodo, showAuthorActivityBox, showPerformanceBox, &lt;br /&gt;
    showSignoffBox, showSlashdBox, showStoryAdminBox, write_to_temp_file, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also will work from a list, as in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ls *.pm &amp;gt; list.tst&lt;br /&gt;
listsubs.sh &amp;lt; list.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Maybe someone else will find it useful as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== IDE as an Alternative ===&lt;br /&gt;
[[File:Windows-Eclipse-Navigator.png|200px|thumb|right|Eclipse on Windows, showing off the Code|Project Navigators]]&lt;br /&gt;
[[File:Windows-Geany-Sidebar.png|200px|thumb|right|Geany on Windows, showing off the SideBar]]&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;sub&amp;gt;listsubs&amp;lt;/sub&amp;gt; shell script is useful and very interesting, however if you are on a platform that cannot run Shell scripts or if you simply want a more integrated solution there are powerful tools that you can use.&lt;br /&gt;
&lt;br /&gt;
An IDE (''Integrated Development Environment'') makes working with large code bases much easy. In my opinion, it is the ''only'' way to work with large and complex code bases.&lt;br /&gt;
&lt;br /&gt;
One of the many ways an IDE makes things so much easier is that they help you ''Navigate'' the project as well as integrating the different tools you need to use. In addition to navigating the Project, the IDEs automatically scan the code you have open to collect lists of very useful information for you including Procedures and Sub Procedures.&lt;br /&gt;
&lt;br /&gt;
Screen Shots from both Eclipse and Geany showing this capability is attached for more information.&lt;br /&gt;
&lt;br /&gt;
If you think either Eclipse or Geany might be useful for you, you can checkout a simple guide that has been started on the Developer page:&lt;br /&gt;
&lt;br /&gt;
: [[Development#Integrated_Development_Environment|Development - Integrated Development Environment]]&lt;br /&gt;
&lt;br /&gt;
==Order css files are loaded when simple switch on user prefs page is selected viewing main page main page==&lt;br /&gt;
&lt;br /&gt;
* base.css?T_2_5_0_272 The numbers are the slash verion number (from one of the docs).&lt;br /&gt;
* slashcode.css?T_2_5__0_272&lt;br /&gt;
* slashcode_lite.css?T_2_5__0_272&lt;br /&gt;
* slashcode_lite.css?T_2_5__0_272 (appears to be loading this twice,why?)&lt;br /&gt;
* print.cssT_2_5__0_272&lt;br /&gt;
&lt;br /&gt;
==Follow a page link from the main page to an individual article page ==&lt;br /&gt;
&lt;br /&gt;
* Link: http://soylentnews.org/article.pl?sid=14/02/18/0336229&lt;br /&gt;
* article.pl is foind in slash/themes/slashcode/htdocs/article.pl So 'slashcode' is treated as a theme.&lt;br /&gt;
&lt;br /&gt;
==article.pl==&lt;br /&gt;
The stuff of interest to us&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
use Slash;  -------- located in /local/lib64/perl5/slash.pm&lt;br /&gt;
use Slash::Display;     &lt;br /&gt;
use Slash::Utility;&lt;br /&gt;
&lt;br /&gt;
sub main {&lt;br /&gt;
        my $slashdb   = getCurrentDB();&lt;br /&gt;
        my $constants = getCurrentStatic();&lt;br /&gt;
        my $user      = getCurrentUser();&lt;br /&gt;
        my $form      = getCurrentForm();&lt;br /&gt;
        my $gSkin     = getCurrentSkin();&lt;br /&gt;
         &lt;br /&gt;
        my $story;&lt;br /&gt;
        my $reader = getObject('Slash::DB', { db_type =&amp;gt; 'reader' });&lt;br /&gt;
&lt;br /&gt;
                # Make sure the reader is viewing this story in the&lt;br /&gt;
                # proper skin.&lt;br /&gt;
                my $cur_skid = determineCurrentSkin();&lt;br /&gt;
                if ($story-&amp;gt;{primaryskid} != $cur_skid) {&lt;br /&gt;
                        my $cur_skin = $reader-&amp;gt;getSkin($cur_skid);&lt;br /&gt;
                        my $story_skin = $reader-&amp;gt;getSkin($story-&amp;gt;{primaryskid});&lt;br /&gt;
                        if ($story_skin &amp;amp;&amp;amp; $story_skin-&amp;gt;{rootdir}&lt;br /&gt;
                                &amp;amp;&amp;amp; $story_skin-&amp;gt;{rootdir} ne $cur_skin-&amp;gt;{rootdir})$&lt;br /&gt;
                                redirect(&amp;quot;$story_skin-&amp;gt;{rootdir}$ENV{REQUEST_URI}&amp;quot;$&lt;br /&gt;
                                return;&lt;br /&gt;
&lt;br /&gt;
               # XXXSECTIONTOPICS this needs to be updated&lt;br /&gt;
                my $SECT = $reader-&amp;gt;getSection($story-&amp;gt;{section});&lt;br /&gt;
                # This should be a getData call for title&lt;br /&gt;
                my $title = &amp;quot;$constants-&amp;gt;{sitename} | $story-&amp;gt;{title}&amp;quot;;&lt;br /&gt;
                if ($gSkin-&amp;gt;{name} &amp;amp;&amp;amp; $gSkin-&amp;gt;{name} eq &amp;quot;idle&amp;quot;) {&lt;br /&gt;
                        $title = &amp;quot;$gSkin-&amp;gt;{hostname} | $story-&amp;gt;{title}&amp;quot;;&lt;br /&gt;
                &lt;br /&gt;
if (my $pollbooth_db = getObject('Slash::PollBooth')) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
slashDisplay('display', {&lt;br /&gt;
                        poll                    =&amp;gt; $pollbooth,&lt;br /&gt;
                        section                 =&amp;gt; $SECT,&lt;br /&gt;
                        section_block           =&amp;gt; $reader-&amp;gt;getBlock($SECT-&amp;gt;{secti$&lt;br /&gt;
                        show_poll               =&amp;gt; $pollbooth ? 1 : 0,&lt;br /&gt;
                        story                   =&amp;gt; $story,&lt;br /&gt;
                        stories                 =&amp;gt; \%stories,&lt;br /&gt;
                });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
               my $called_pc = 0;&lt;br /&gt;
                if ($story-&amp;gt;{discussion}) {&lt;br /&gt;
                        # Still not happy with this logic -Brian&lt;br /&gt;
                        my $discussion = $reader-&amp;gt;getDiscussion($story-&amp;gt;{discussio$&lt;br /&gt;
&lt;br /&gt;
                        }&lt;br /&gt;
                        # If no comments ever have existed and commentstatus is di$&lt;br /&gt;
                        # just skip the display of the comment header bar -Brian&lt;br /&gt;
&lt;br /&gt;
                               &amp;amp;&amp;amp;  $discussion-&amp;gt;{commentstatus} eq 'disabled'&lt;br /&gt;
                        )) {&lt;br /&gt;
                                printComments($discussion);&lt;br /&gt;
                                $called_pc = 1;&lt;br /&gt;
                        }&lt;br /&gt;
                 if (!$called_pc &amp;amp;&amp;amp; $form-&amp;gt;{ssi} &amp;amp;&amp;amp; $form-&amp;gt;{ssi} eq 'yes' &amp;amp;&amp;amp; $form-$&lt;br /&gt;
                        # This is a real hack, we're kind of skipping down&lt;br /&gt;
                        # two levels of code.  But the cchp printing is an&lt;br /&gt;
                        # important optimization;  we avoid having to do&lt;br /&gt;
                        # multiple expensive comment selects.  One problem&lt;br /&gt;
                        # is that if there's no discussion with a story,&lt;br /&gt;
                        # printComments() doesn't get called, which means&lt;br /&gt;
                        # selectComments() doesn't get called, which means&lt;br /&gt;
                        # the cchp file won't be written.  If article.pl&lt;br /&gt;
                       # is being called by slashd, and we need to write&lt;br /&gt;
                        # that file, then here's where we print an empty&lt;br /&gt;
                        # file that will satisfy slashd. - Jamie&lt;br /&gt;
&lt;br /&gt;
                        Slash::Utility::Comments::_print_cchp({ stoid =&amp;gt; &amp;quot;dummy&amp;quot; }$&lt;br /&gt;
                }&lt;br /&gt;
        } else {&lt;br /&gt;
                header('Error', $form-&amp;gt;{section}) or return;&lt;br /&gt;
       &lt;br /&gt;
       my $plugins = $slashdb-&amp;gt;getDescriptions('plugins');&lt;br /&gt;
        if (!$user-&amp;gt;{is_anon} &amp;amp;&amp;amp; $plugins-&amp;gt;{Tags} &amp;amp;&amp;amp; $story) {&lt;br /&gt;
                my $tagsdb = getObject('Slash::Tags');&lt;br /&gt;
                $tagsdb-&amp;gt;markViewed($user-&amp;gt;{uid},&lt;br /&gt;
                        $reader-&amp;gt;getGlobjidCreate('stories', $story-&amp;gt;{stoid}));&lt;br /&gt;
        }&lt;br /&gt;
                        &lt;br /&gt;
        footer();&lt;br /&gt;
        if ($story) {&lt;br /&gt;
                writeLog($story-&amp;gt;{sid} || $sid);&lt;br /&gt;
        } else { &lt;br /&gt;
                writeLog($sid);&lt;br /&gt;
&lt;br /&gt;
               &lt;br /&gt;
createEnvironment();&lt;br /&gt;
main();  &lt;br /&gt;
1; &lt;br /&gt;
&lt;br /&gt;
(EOF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Slash/DB/MySQL/MySQL.pm==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line start=&amp;quot;479&amp;quot;&amp;gt;&lt;br /&gt;
sub getCSS {&lt;br /&gt;
        my($self, $layout) = @_;&lt;br /&gt;
        my $user = getCurrentUser();&lt;br /&gt;
        my $page = $user-&amp;gt;{currentPage};&lt;br /&gt;
        my $skin = getCurrentSkin('name');&lt;br /&gt;
        my $admin = $user-&amp;gt;{is_admin};&lt;br /&gt;
        my $theme = ($user-&amp;gt;{simpledesign} || $user-&amp;gt;{pda}) ? &amp;quot;light&amp;quot; : $user-&amp;gt;{css_theme};&lt;br /&gt;
        my $secure = apacheConnectionSSL();&lt;br /&gt;
        $layout ||= '';&lt;br /&gt;
        my $constants = getCurrentStatic();&lt;br /&gt;
&lt;br /&gt;
        my $expire_time = $constants-&amp;gt;{css_expire} || 3600;&lt;br /&gt;
        $expire_time += int(rand(60)) if $expire_time;&lt;br /&gt;
        _genericCacheRefresh($self, 'css', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_pages', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_skins', $expire_time);&lt;br /&gt;
        _genericCacheRefresh($self, 'css_themes', $expire_time);&lt;br /&gt;
&lt;br /&gt;
        my $css_ref             = $self-&amp;gt;{_css_cache} ||= {};&lt;br /&gt;
        my $css_pages_ref       = $self-&amp;gt;{_css_pages_cache};&lt;br /&gt;
        my $css_skins_ref       = $self-&amp;gt;{_css_skins_cache};&lt;br /&gt;
        my $css_themes_ref      = $self-&amp;gt;{_css_themes_cache};&lt;br /&gt;
        my $css_layouts_ref     = $self-&amp;gt;{_css_layouts_cache};&lt;br /&gt;
&lt;br /&gt;
        $css_pages_ref = $self-&amp;gt;getCSSValuesHashForCol('page') if !$css_pages_ref;&lt;br /&gt;
        $css_skins_ref = $self-&amp;gt;getCSSValuesHashForCol('skin') if !$css_skins_ref;&lt;br /&gt;
        $css_themes_ref = $self-&amp;gt;getCSSValuesHashForCol('theme') if !$css_themes_ref;&lt;br /&gt;
        $css_layouts_ref = $self-&amp;gt;getCSSValuesHashForCol('layout') if !$css_layouts_ref;&lt;br /&gt;
&lt;br /&gt;
        my $lowbandwidth = ($user-&amp;gt;{lowbandwidth} || $user-&amp;gt;{pda}) ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        $page   = '' if !$css_pages_ref-&amp;gt;{$page};&lt;br /&gt;
        $skin   = '' if !$css_skins_ref-&amp;gt;{$skin};&lt;br /&gt;
        $theme  = '' if !$css_themes_ref-&amp;gt;{$theme};&lt;br /&gt;
        $layout = '' if !$css_layouts_ref-&amp;gt;{$layout};&lt;br /&gt;
&lt;br /&gt;
        return $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure}&lt;br /&gt;
                if exists $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure};&lt;br /&gt;
&lt;br /&gt;
        my @clauses;&lt;br /&gt;
&lt;br /&gt;
        my $page_q = $self-&amp;gt;sqlQuote($page);&lt;br /&gt;
        my $page_in = $page ? &amp;quot;(page = '' or page = $page_q)&amp;quot; : &amp;quot;page = ''&amp;quot;;&lt;br /&gt;
        push @clauses, $page_in;&lt;br /&gt;
&lt;br /&gt;
        my $skin_in = $skin ? &amp;quot;(skin = '' or skin = '$skin')&amp;quot; : &amp;quot;skin = ''&amp;quot;;&lt;br /&gt;
        push @clauses, $skin_in;&lt;br /&gt;
&lt;br /&gt;
        push @clauses, &amp;quot;admin='no'&amp;quot; if !$admin;&lt;br /&gt;
&lt;br /&gt;
        my $theme_q  = $self-&amp;gt;sqlQuote($theme);&lt;br /&gt;
        my $theme_in = $theme ? &amp;quot;(theme='' or theme=$theme_q)&amp;quot; : &amp;quot;theme=''&amp;quot;;&lt;br /&gt;
        push @clauses, $theme_in;&lt;br /&gt;
&lt;br /&gt;
        push @clauses, &amp;quot;lowbandwidth='$lowbandwidth'&amp;quot; if $lowbandwidth eq &amp;quot;no&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        my $layout_q = $self-&amp;gt;sqlQuote($layout);&lt;br /&gt;
        push @clauses, &amp;quot;layout=$layout_q&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
        my $where = &amp;quot;css.ctid=css_type.ctid AND &amp;quot;;&lt;br /&gt;
        $where .= join ' AND ', @clauses;&lt;br /&gt;
&lt;br /&gt;
        my $css = $self-&amp;gt;sqlSelectAllHashrefArray(&amp;quot;rel,type,media,file,title,ie_cond,skin&amp;quot;,&lt;br /&gt;
                &amp;quot;css, css_type&amp;quot;, $where, &amp;quot;ORDER BY css_type.ordernum, css.ordernum&amp;quot;);&lt;br /&gt;
        if ($secure) {&lt;br /&gt;
                for my $hr (@$css) { $hr-&amp;gt;{file} =~ s/\.css/.ssl.css/ }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        $css_ref-&amp;gt;{$skin}{$page}{$admin}{$theme}{$lowbandwidth}{$layout}{$secure} = $css;&lt;br /&gt;
        return $css;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Slash/Apache/User/User.pm==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight line start=&amp;quot;548&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
my %ops_my = (&lt;br /&gt;
        inbox           =&amp;gt; { args =&amp;gt; 'op=list', uri =&amp;gt; 'messages.pl' },&lt;br /&gt;
        # XXX change messages to be same as /inbox, move this to /my/preferences/messages&lt;br /&gt;
        messages        =&amp;gt; { args =&amp;gt; 'op=display_prefs', uri =&amp;gt; 'messages.pl' },&lt;br /&gt;
        comments        =&amp;gt; { args =&amp;gt; 'op=editcomm' },&lt;br /&gt;
        homepage        =&amp;gt; { args =&amp;gt; 'op=edithome' },&lt;br /&gt;
        password        =&amp;gt; { args =&amp;gt; 'op=changeprefs', uri =&amp;gt; 'login.pl' },&lt;br /&gt;
        logout          =&amp;gt; { args =&amp;gt; 'op=userclose', uri =&amp;gt; 'login.pl' },&lt;br /&gt;
        misc            =&amp;gt; { args =&amp;gt; 'op=editmiscopts' },&lt;br /&gt;
        amigos          =&amp;gt; { args =&amp;gt; 'op=friendview', uri =&amp;gt; 'journal.pl' },&lt;br /&gt;
        bookmarks       =&amp;gt; { args =&amp;gt; 'op=showbookmarks' },&lt;br /&gt;
        firehose        =&amp;gt; { args =&amp;gt; 'op=userfirehose' },&lt;br /&gt;
        preferences     =&amp;gt; { args =&amp;gt; 'op=displayprefs', uri =&amp;gt; 'preferences.pl' },&lt;br /&gt;
        tags            =&amp;gt; { args =&amp;gt; 'op=showtags' },&lt;br /&gt;
        journal         =&amp;gt; { args =&amp;gt; 'op=list', uri =&amp;gt; 'journal.pl' },&lt;br /&gt;
&lt;br /&gt;
        friends         =&amp;gt; { args =&amp;gt; 'op=friends', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        fans            =&amp;gt; { args =&amp;gt; 'op=fans', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        freaks          =&amp;gt; { args =&amp;gt; 'op=freaks', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        foes            =&amp;gt; { args =&amp;gt; 'op=foes', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
        zoo             =&amp;gt; { args =&amp;gt; 'op=all', uri  =&amp;gt; 'zoo.pl' },&lt;br /&gt;
&lt;br /&gt;
        default         =&amp;gt; { args =&amp;gt; 'op=edituser' }&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==sql/mysql/defaults.sql==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line start=&amp;quot;134&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','base.css','','','','no','',1,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','comments','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','article','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','print','print.css','','','','no','',5,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','admin.css','','','','yes','',1,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','pollBooth','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_lite.css','','','','no','light',4,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','journal','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_lite.css','','','','no','light',4,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','journal','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode.css','','','','no','',3,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','metamod','no','',2,0, &amp;quot;&amp;quot;,&amp;quot;no&amp;quot;);&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond, lowbandwidth) VALUES ('stylesheet','text/css','screen, projection','slashcode_low_bw.css','','','','no','',4,99, &amp;quot;&amp;quot;,&amp;quot;yes&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Dumping data for table 'css_type'&lt;br /&gt;
#&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (1,'base',1);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (2,'page',2);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (3,'theme',3);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (4,'user_theme',5);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (5,'print',6);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (6,'skin',4);&lt;br /&gt;
INSERT INTO css_type (ctid, name, ordernum) VALUES (7,'handheld',7);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==plugins/FireHose/mysql_dump.sql ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','users','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','calendar.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','users','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','comments.css','','','firehose','no','',2,0, '');&lt;br /&gt;
INSERT INTO css (rel, type, media, file, title, skin, page, admin, theme, ctid, ordernum, ie_cond) VALUES ('stylesheet','text/css','screen, projection','firehose.css','','','index2','no','',2,0, ''); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;I believe that we are not using FireHose but it was needed to make the site work.  As can be seen in the db dump above, it adds the firehose.css file to any of the user pages. Need to verify and then see if we can get the db purged of these values.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Good work. The question in my mind is why the heck css for one module has any effect *at all* on any other module. Talk about lack of localization...-AG&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;I think there was some firehose slashboxes that showed up in the users pages.  They needed to be wider than the default, so they patched those pages with the firehose.css. Next step is to get a current dump of the two css tables. The important part is I know what files are for what parts of the code.  Slashcode.css is the theme css file slashcode-lite.css is the style file that is called by a user pref.  This means I need to fix comments.css to remove the theme elements I inserted and put them in the theme file.  I still need to make sure that the changes that benefited the Simplified theme stay intact. -EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==fonts==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is what I usually start with:&lt;br /&gt;
   font-family: Helvetica,Geneva,Arial,Verdana,sans-serif;&lt;br /&gt;
&lt;br /&gt;
Too many can lead to a LOT of testing being required. As can the wrong order. ;-)&lt;br /&gt;
&lt;br /&gt;
Others I have used in the past:&lt;br /&gt;
font-family: Geneva,Arial,Verdana,Helvetica,Chicago,sans-serif;&lt;br /&gt;
font-family: Helvetica,Arial,Geneva,Chicago,Verdana,sans-serif;&lt;br /&gt;
font-family: Helvetica,Geneva,Arial,Verdana,sans-serif;&lt;br /&gt;
-AG&lt;br /&gt;
&lt;br /&gt;
I have used:&lt;br /&gt;
font-family: Verdana, Geneva, &amp;quot;Bitstream Vera Sans&amp;quot;, &amp;quot;DejaVu Sans&amp;quot;, sans-serif;&lt;br /&gt;
&lt;br /&gt;
Note this has Linux fonts as well to help with these users.&lt;br /&gt;
-EP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User Menu==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line start=&amp;quot;123&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Logout','logout','/my/logout',1,0,10);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Preferences','preferences','/users.pl?op=edituser',1,0,20);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','Password','password','[% constants.real_rootdir %]/my/password',1,0,40);&lt;br /&gt;
INSERT INTO menus (menu, label, sel_label, value, seclev, showanon, menuorder) VALUES ('users','~[% user.nickname | strip_literal %] ([% user.uid %])','me','/~[% user.nickname | fixparam %]',1,0,50);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt; This code sets up the upper menu on http://slashcott.org/users.pl which is linked from your userid on the home page.  The Preferences is wrong, as it needs to be all three links: Info, Homepage, Comments.  This will allow users with low-bandwidth option set to easily get to the setting to unset low-bandwidth. -EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Refernces to css in the man pages in /usr/local/share/man/man3==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i css *&lt;br /&gt;
&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;enable_css&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;enable_css&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:Set some handy \s-1CSS\s0 class attributes on elements, enabled by default.&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;semantic_css&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;semantic_css&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:Sets some additional \s-1CSS\s0 class attributes on elements, disabled by&lt;br /&gt;
HTML::CalendarMonth.3pm:.IP &amp;quot;\fIdefault_css()\fR&amp;quot; 4&lt;br /&gt;
HTML::CalendarMonth.3pm:.IX Item &amp;quot;default_css()&amp;quot;&lt;br /&gt;
HTML::CalendarMonth.3pm:document in conjunction with the classes assigned to elements when css&lt;br /&gt;
HTML::ElementSuper.3pm:might be when you'd like to assign multiple \s-1CSS\s0 classes to a single&lt;br /&gt;
HTML::PopupTreeSelect.3pm:.IP &amp;quot;include_css (optional)&amp;quot; 4&lt;br /&gt;
HTML::PopupTreeSelect.3pm:.IX Item &amp;quot;include_css (optional)&amp;quot;&lt;br /&gt;
HTML::PopupTreeSelect.3pm:Set this to 0 and the default \s-1CSS\s0 will not be included in the widget&lt;br /&gt;
HTML::PopupTreeSelect.3pm:output.  This allows you to include your own \s-1CSS\s0 which will be used by&lt;br /&gt;
HTML::PopupTreeSelect.3pm:your widget.  Modifying the \s-1CSS\s0 will allow you to control the fonts,&lt;br /&gt;
HTML::PopupTreeSelect.3pm:If you run the widget with include_css set to 1 then you can use that&lt;br /&gt;
HTML::Tree::Scanning.3pm:tagging, such is as useful in \s-1CSS\s0 \*(-- note the&lt;br /&gt;
Module::Build::API.3pm:.IP &amp;quot;\fIhtml_css()\fR&amp;quot; 4&lt;br /&gt;
Module::Build::API.3pm:.IX Item &amp;quot;html_css()&amp;quot;&lt;br /&gt;
TAP::Parser::YAMLish::Reader.3pm:YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny,&lt;br /&gt;
TAP::Parser::YAMLish::Writer.3pm:YAML::Tiny, \s-1YAML\s0, YAML::Syck, Config::Tiny, CSS::Tiny,&lt;br /&gt;
Template::Iterator.3pm:You can then style the \f(CW\*(C`tr.odd\*(C'\fR and \f(CW\*(C`tr.even\*(C'\fR elements using \s-1CSS:\s0&lt;br /&gt;
Template::Toolkit.3pm:kind of text documents: \s-1HTML\s0, \s-1XML\s0, \s-1CSS\s0, Javascript, Perl code, plain text,&lt;br /&gt;
Template::Tutorial::Web.3pm:kind of content they contain.  So you can use \s-1TT\s0 to generate \s-1HTML\s0, \s-1XML\s0, \s-1CSS\s0,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CSS commit for Feb 23==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Changes to most of the css files to set all sizes to em (some were in px and broke flow). Changed the font-family to a more friendly chain for all platforms, and remove all other font-faimily calls from the code. Changed font sizes from % to ems and adjusted size for some of the main elements. Fix a issue with the middle column size caused by firehose.css. Many small fixes to spacing over many places.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Moved all of the slashcode theme items into the slashcode.cssraw file. Some were in comments.cssraw due to some previous work I did.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On article body and comment body, made the font size a bit smaller. Also on comments body set the margins to be smaller.&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;-EP&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:User experience]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=File:Windows-Geany-Sidebar.png&amp;diff=7448</id>
		<title>File:Windows-Geany-Sidebar.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=File:Windows-Geany-Sidebar.png&amp;diff=7448"/>
		<updated>2014-05-05T13:47:02Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: The lightweight Geany IDE has a very useful &amp;quot;SideBar&amp;quot; to the left of your screen that will show all Packages, Sub-procedures, Variables and etc. for easy navigation of large code.

Geany's SideBar can show Documents (Project files) and Inspect the curr...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The lightweight Geany IDE has a very useful &amp;quot;SideBar&amp;quot; to the left of your screen that will show all Packages, Sub-procedures, Variables and etc. for easy navigation of large code.&lt;br /&gt;
&lt;br /&gt;
Geany's SideBar can show Documents (Project files) and Inspect the currently open file.&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=File:Windows-Eclipse-Navigator.png&amp;diff=7447</id>
		<title>File:Windows-Eclipse-Navigator.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=File:Windows-Eclipse-Navigator.png&amp;diff=7447"/>
		<updated>2014-05-05T13:42:46Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: The Eclipse IDE with the EPIC plug-in installed has a powerful &amp;quot;Navigator&amp;quot; panel to the left of your screen that will show all Packages, Sub-procedures, Variables and etc. for easy navigation of large code-bases.

Aside: Eclipse is also actively checki...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Eclipse IDE with the EPIC plug-in installed has a powerful &amp;quot;Navigator&amp;quot; panel to the left of your screen that will show all Packages, Sub-procedures, Variables and etc. for easy navigation of large code-bases.&lt;br /&gt;
&lt;br /&gt;
Aside: Eclipse is also actively checking dependent files and is indicating that there's is over 100 issues with interdependencies in the Plugins folder.&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
	<entry>
		<id>https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7442</id>
		<title>Development</title>
		<link rel="alternate" type="text/html" href="https://wiki.soylentnews.org/index.php?title=Development&amp;diff=7442"/>
		<updated>2014-05-05T02:33:17Z</updated>

		<summary type="html">&lt;p&gt;Michealpwalls: Added a section for setting up an Integrated Development Environment on Windows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[TeamPages]] - parent, [[SystemAdministration]]&lt;br /&gt;
&lt;br /&gt;
==Welcome==&lt;br /&gt;
We are currently looking for volunteers to help develop SoylentNews slashcode.  Anyone willing is free to help, but '''we really need good perl devs'''.  Slashcode is based heavily on perl and most pages have some type of perl code on them.  We also seek non-perl devs, there is plenty of stuff that you can do without touching the code too much.&lt;br /&gt;
&lt;br /&gt;
Our code is hosted on GitHub at https://github.com/SoylentNews/slashcode. Have a look and see how you can contribute.  Bugs are now on [https://github.com/SoylentNews/slashcode/issues GitHub Bugs].&lt;br /&gt;
&lt;br /&gt;
Volunteers should send an email to [mailto:dev@soylentnews.org dev@soylentnews.org] expressing your areas of interest and what your coding strengths are.  Also you can hop onto [[SoylentNews:IRC]] and join the #dev channel.  Come by and express your interest to paulej72, audioguy, or mrcoolbp.  &lt;br /&gt;
&lt;br /&gt;
Currently we are undergoing a bit of a reorganization and we hope to have more information available here soon about our short term and long term goals for the code.&lt;br /&gt;
&lt;br /&gt;
== Who we are ==&lt;br /&gt;
&amp;lt;section begin=whoarewe /&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!colspan=&amp;quot;3&amp;quot;|'''[[Development|Dev Team Main Page]]'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;width: 20%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''nick'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''position'''&lt;br /&gt;
| style=&amp;quot;width: 40%; background-color: #f2f2f2;&amp;quot;|&lt;br /&gt;
'''timezone'''&lt;br /&gt;
|-&lt;br /&gt;
| paulej72&amp;lt;ref name=&amp;quot;paulej72_notes&amp;quot;&amp;gt;Working on template and css issues on the site, main bug herder. - email:[mailto:paulej72@soylentnews.org paulej72@soylentnews.org] [[Paulej72WorkNotes]]&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Team Leader for Dev&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|-&lt;br /&gt;
| Ncommander&lt;br /&gt;
| The real head of Dev, but due to time constrains of being the head of SN, only a member.&lt;br /&gt;
| UTC-5&lt;br /&gt;
|-&lt;br /&gt;
| audioguy&amp;lt;ref name=&amp;quot;audioguy_notes&amp;quot;&amp;gt;See [[AudioGuyWorkNotes]] for current todo and working notes - documentation of system and cleanup of css to get things into a ste that new templates and Themes can be made.&amp;lt;/ref&amp;gt;&lt;br /&gt;
| right hand man to paulej72 and second in command for Dev.&lt;br /&gt;
| UTC-8 (PST) &lt;br /&gt;
|-&lt;br /&gt;
| FatPhil &lt;br /&gt;
| perl/mysql odd-jobber, some ubuntu/sys knowledge too&lt;br /&gt;
| UTC+2&lt;br /&gt;
|-&lt;br /&gt;
| martyb/bytram&lt;br /&gt;
| secondary bug herder, Database (in training)&lt;br /&gt;
| UTC-4 (EST/EDT)&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;section end=whoarewe /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index of Development Pages and Resources ==&lt;br /&gt;
&lt;br /&gt;
Note: Any sort of code posted onto the wiki can now be syntax highlighted using the &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt; tag. It will default to perl, but can be changed to other languages. For example &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;. More documentation is at [[mediawikiwiki:Extension:SyntaxHighlight_GeSHi]].&lt;br /&gt;
&lt;br /&gt;
* [[ImportantDevelopmentLinks]] - Place to put urls for the repositories, etc. (Use current page for now, this page not needed - YET)&lt;br /&gt;
* [[DevelopmentWorkCurrentlyInProgress]] - what we are working on at this moment &lt;br /&gt;
* [[CodingStyleForOurPerlChanges]] - Suggested style for perl code changes &lt;br /&gt;
* [[DevelopmentVMHowto]] - How to get your own Slash code up in a Virtual Machine using VirtualBox&lt;br /&gt;
* [[CssWork]] - pages for ongoing css work&lt;br /&gt;
* [[SlashDocumentationIndex]] - A single place to find Slash docs, one day it will be organized and accurate&lt;br /&gt;
* [[IncidentLog]] - Documentation of how incidents occurred and how they were mitigated&lt;br /&gt;
* [[GitUse]] - Tutorial/advice on how to use git&lt;br /&gt;
* [[Dev/Sys|To-do]] - A list of items in the pipeline collected from various places&lt;br /&gt;
&lt;br /&gt;
== Work Notes ==&lt;br /&gt;
&lt;br /&gt;
* [[AudioGuyWorkNotes]]&lt;br /&gt;
* [[Paulej72WorkNotes]]&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[SystemAdministration]] - See this section for actual server details and procedures&lt;br /&gt;
* GitHub https://github.com/SoylentNews/slashcode: Slashcode Repository and Issue Tracker&lt;br /&gt;
* Wiki: Documentation and work logs&lt;br /&gt;
**hosted on the svc linode&lt;br /&gt;
* IRC: real time chat for team communications&lt;br /&gt;
* Slashcott.org: temporary testing server in use until we get ones setup on Linode.&lt;br /&gt;
* Mailman Dev Mailing list: for non-real-time discussions that need a good paper trail.&lt;br /&gt;
* http://dev.mysql.com/doc/refman/5.5/en/index.html - Official docs for mysql we use&lt;br /&gt;
* https://perl.apache.org/start/index.html - modperl docs (We use version 1 with Apache 1.3)&lt;br /&gt;
* http://remote.demmers.org/~audioguy/manual/ - Apache 1.3 docs don't seem to be on the Apache site any more, here they are.&lt;br /&gt;
** http://remote.demmers.org/~audioguy/manual/misc/API.html but this is what is important to understand slash workings with mod perl.&lt;br /&gt;
&lt;br /&gt;
== Slashcode Primer ==&lt;br /&gt;
&lt;br /&gt;
Slashcode is a complex beast.  Here is the listing of the repo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;Bundle&lt;br /&gt;
Slash	&lt;br /&gt;
bin&lt;br /&gt;
docs&lt;br /&gt;
httpd&lt;br /&gt;
plugins&lt;br /&gt;
sbin&lt;br /&gt;
sql&lt;br /&gt;
tagboxes&lt;br /&gt;
themes&lt;br /&gt;
utils&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We really are only concerned with three of these directories: Slash, plugins, and themes.  The first directory, Slash, is the home of the slash.pm module and its related code.  The module, slash.pm, does all of the back end work of slashcode.  It provides a set of APIs that are used to generate pages and manipulate the database.  This is where the heavy perl coding is done. We definitely need help with this section in both expanding our knowledge and working with the code. (As I started on this from a css/html slant I do not have a good idea of what is here --pauej72)&lt;br /&gt;
&lt;br /&gt;
The second main part of the system are the themes.  In this case we have only one theme called slashcode.  The theme is broken down into pieces the first is htdocs.  htdocs is all of the static html files, perl files that directly start page generation events, the css files, images, and other static code.  The second part of the theme is the templates.  These templates are loaded into the database an are used by slash to layout the data from different sources and turn them into html files that apache can send to the user.  Templates re a mixture of perl, slash coding, and html.  Templates use slash calls to load other templates and usually each template leaves a breadcrumb in the final html with a start and end comment with the template's name and id.  These breadcrumbs make it easy to find out which template file is generating the particular piece of html that you need to change.&lt;br /&gt;
&lt;br /&gt;
Slashcode also has a plugin architecture that allows certain system to be bolted on to the main system. The main system is basically articles, comments and users.  The pulgins add the admin interface, the messaging system, enhanced login, journals, and other things.  The files for these plugging are in the plugins folder, not in the theme folder.  The issue with plugins is that it contains both front end code such as templates, css and pl files, it also has perl modules that are loaded into the perl engine. &lt;br /&gt;
&lt;br /&gt;
The rest of the directories are used for build and install purposes and probably will not need to be modified regularly.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress so please check back here for more.&lt;br /&gt;
&lt;br /&gt;
== Development VM ==&lt;br /&gt;
&lt;br /&gt;
(audiogy note - will leave this here for the moment, it belongs on its own page as referenced above)&lt;br /&gt;
&lt;br /&gt;
The Dev VM can be downloaded from http://torrents.soylentnews.org/.  This is a vim that is designed to run on VirtualBox. Information and downloads of VirtualBox are available here: http://torrents.soylentnews.org/.&lt;br /&gt;
&lt;br /&gt;
Once you get the VM downloaded and the VirtualBox up and ruining, you will want to do a '''File:Import Appliance''' in VirtualBox.  This will unpack the VM into you environment. Start up the VM and log in with the username and password of slash.&lt;br /&gt;
&lt;br /&gt;
The VM has port forwarding setup to you local system for ssh and http.  &lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh: 8022&amp;lt;br/&amp;gt;&lt;br /&gt;
	http; 1337&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For ssh your connection string should be:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;ssh slash@127.0.0.1 -p 8022&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For websites, apache will use the name localhost instead of 127.0.0.1 so you will need to use:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;http://localhost:1337	&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Apache is turned off in the VM.  You will need to turn it on using the command:&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;apachectl start&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The slash user home directory is in /srv/slashdev/.  The slashcode GitHub repository is located in slashcode. This is where you will make changes to the code you want to test.  The actual slashcode install is located in slash.&lt;br /&gt;
&lt;br /&gt;
The first thing you should probably do is update the repo to the latest version.  cd to slashcode and run git pull.&lt;br /&gt;
&lt;br /&gt;
Now we need to install the new code to slash.  Here is a script that will help with that.  Create a new file called deployslash.sh in the slash home directory and give chmod it to 755.&lt;br /&gt;
&lt;br /&gt;
deployslash.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;#! /bin/sh&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Install from git repo ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
cd /srv/slashdev/slashcode&amp;lt;br/&amp;gt;&lt;br /&gt;
make USER=slash GROUP=slash SLASH_PREFIX=/srv/slashdev/slash install&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Clean up CSS and install Templates ==&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
rm -rf /srv/slashdev/slash/site/slashdev/htdocs/*css&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/symlink-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/slash/bin/template-tool -U&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
echo === Restart Apache ===&amp;lt;br/&amp;gt;&lt;br /&gt;
echo&amp;lt;br/&amp;gt;&lt;br /&gt;
/srv/slashdev/apache/bin/apachectl restart&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script will be part of the next version of the Dev VM.&lt;br /&gt;
&lt;br /&gt;
To do simple updates, you would make changes to the files in slashcode and redeploy using the deployslash.sh script.&lt;br /&gt;
&lt;br /&gt;
What if you want to develop code and have it merged into the main repo?  In this case you will need to setup your own copy of the repo do do your development work.  First if you do not have your own account on GitHub please set one up. Next go to the slashcode site https://github.com/SoylentNews/slashcode and click on Fork in the upper right.  Fork the repo to your user account.&lt;br /&gt;
&lt;br /&gt;
Now on the VM go to slashcode.  We will setup your copy of the repo as a remote.  Run the commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;code&amp;gt;	git remote add {name} {url-to-your-GitHub-repo}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git fetch {name}&amp;lt;br/&amp;gt;&lt;br /&gt;
	git checkout {name}/master&amp;lt;/code&amp;gt;&amp;lt;/blockquote&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redeploy slash and you are working from your own repo.  As you may have noticed the primary work is being done on the master branch.  You will not need to worry about the other branches of the code for now.&lt;br /&gt;
&lt;br /&gt;
Once you get code you like, and have it committed to your personal fork, you can do a Pull Request, https://help.github.com/articles/using-pull-requests, that will create a ticket for the SoylentNews/slashcode repo to merge your commits to the master branch.  After proper testing by the Dev team and other sanity checks, you code will be merged and eventually put on to the production servers. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Just a note: I am new to git, so the above directions are what I have been using.  If people have a better method for doing this please feel free to update this page with the new information --pauulej72.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
crutchy has some additional notes on git here: [[User:Crutchy#Git.2FGitHub]] and some notes on the slashdev vm here: http://soylentnews.org/~crutchy/journal/114&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Integrated Development Environment==&lt;br /&gt;
:Regardless of what IDE (''Integrated Development Environment'') you choose to go with, you're going to require a Perl interpreter (With a built-in Debugger) and :optionally the PadWalker module, for variable inspection (Also used by built-in debugger).&lt;br /&gt;
&lt;br /&gt;
=== Perl (Interpreter) ===&lt;br /&gt;
:Linux users generally already have a full Perl stack installed, so this resource is for Windows users. There's a number of different Perl interpreters available for :Windows users. You can download ActivePerl for free below:&lt;br /&gt;
&lt;br /&gt;
::* [http://www.activestate.com/activeperl/downloads www.activestate.com/activeperl/downloads]&lt;br /&gt;
&lt;br /&gt;
=== PadWalker (Variable Inspection) ===&lt;br /&gt;
:* [http://perlmaven.com/padwalker perlmaven.com/padwalker]&lt;br /&gt;
&lt;br /&gt;
=== IDEs ===&lt;br /&gt;
==== Eclipse ====&lt;br /&gt;
::Eclipse+EPIC provides a great Perl IDE for Windows users. After installing ActivePerl and the PadWalker module you will need to install a Java Runtime. You can download Oracle's runtime for free below:&lt;br /&gt;
&lt;br /&gt;
:::* [http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html JRE 7u55]&lt;br /&gt;
&lt;br /&gt;
::Once installed, you're ready to install the Eclipse IDE. You can download the latest release (Kepler) for free below:&lt;br /&gt;
&lt;br /&gt;
:::* [http://eclipse.org/downloads/packages/eclipse-standard-432/keplersr2 Eclipse Kepler]&lt;br /&gt;
&lt;br /&gt;
::Whew, almost there.. Lastly, to bring it all together in Eclipse you have to install the free ''&amp;quot;EPIC&amp;quot;'' plug-in for Eclipse. This is done from within Eclipse and is fairly straight forward. You can find detailed instructions below:&lt;br /&gt;
&lt;br /&gt;
:::* [http://www.epic-ide.org/download.php www.epic-ide.org/download.php]&lt;br /&gt;
&lt;br /&gt;
==== Geany ====&lt;br /&gt;
::As an alternative to Eclipse, you can try Geany. Geany isn't exactly a full IDE like Eclipse, however you can setup the file locations of Perl and get a pretty good workflow going. You can download Geany for free below:&lt;br /&gt;
&lt;br /&gt;
:::* [http://www.geany.org/Download/Releases www.geany.org/Download/Releases]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Teams]]&lt;/div&gt;</summary>
		<author><name>Michealpwalls</name></author>
	</entry>
</feed>