<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>palante tech blog</title>
	<atom:link href="http://blog.palantetech.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.palantetech.com</link>
	<description></description>
	<pubDate>Thu, 05 Aug 2010 18:05:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>Raw Notes: Blogging for Nonprofit Organizations</title>
		<link>http://blog.palantetech.com/?p=254</link>
		<comments>http://blog.palantetech.com/?p=254#comments</comments>
		<pubDate>Thu, 05 Aug 2010 16:10:32 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[PTP]]></category>

		<category><![CDATA[REVERB]]></category>

		<category><![CDATA[blogging]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=254</guid>
		<description><![CDATA[I participated in this panel at the Progressive Technology Project&#8217;s  REVERB training for community organizers working on issues around immigration. Below are notes I wrote before my presentation and a few jotted down quickly during the panel itself. I encourage Jane and Eric, my co-panelists, and everyone else who was there (or not!) to [...]]]></description>
			<content:encoded><![CDATA[<p><em>I participated in this panel at the <a href="http://progressivetech.org">Progressive Technology Project&#8217;s </a> <a href="http://www.progressivetech.org/training/reverb">REVERB</a> training for community organizers working on issues around immigration. Below are notes I wrote before my presentation and a few jotted down quickly during the panel itself. I encourage Jane and Eric, my co-panelists, and everyone else who was there (or not!) to contribute additional thoughts, tips, and comments.</em></p>
<p><strong>WHY BLOG?</strong>
<ul>
<li>Blogs are about STORYTELLING</li>
<li>Blogs are PERSONAL and PASSIONATE</li>
<li>Blogs are your organization&#8217;s editorial page</li>
<li>Blogs let you cover yourself - your actions, your events, your work - in the way YOU want to</li>
<li>Blogs let you cover/applaud/condemn/call out others without a major campaign or action or huge effort</li>
<li>Blogs are a way to incorporate and highlight the voices of many people in your org/movement - not just staff</li>
</ul>
<p> <strong>QUESTIONS TO CONSIDER</strong>
<ul>
<li>What is the point? Is there a point? &#8220;Everyone&#8217;s doing it&#8221; doesn&#8217;t cut it.</li>
<li>Does blogging fit with your organizational culture? Blogging when done right is more anarchic, less controlled, whether in content or comments.</li>
<li>What will you blog? What&#8217;s considered on topic or off topic?</li>
<li>Who will write on your blog?</li>
<li>What will the editorial process be? How will you regulate what people post without making people feel silenced, reined in or censored?</li>
<li>Who are your audiences - intended? Who do you hope to reach with your blog? Who do you think you&#8217;ll reach with your blog?</li>
<li>Who are your unintended audiences? Who will unfortunately reach your blog? How will you deal with them?</li>
<li>What is your tone? How do you want to engage with people on your blog? Do you want to preach to the choir / rally your allies / screw the people who disagree with you? Do you want to change people&#8217;s minds, speak more gently to people who may disagree with you? Do you want to convince people of your politics, simply put them forth, or shout them from the rooftops&#8230; of your blog?</li>
<li>Comments - will you allow them at all? If you do, how will you moderate? Will people be required to register in order to comment, or will you allow for anonymous comments from unregistered users? Will you put forth a detailed comments policy? What comments will you delete? How will you deal with people who claim you&#8217;re censoring them? Will you feed the trolls (or allow them to be fed) or will you adamantly not do so/ask people not to? When is it time to shut down comments on a thread? Will you set your blog to automatically close comments after a certain amount of time so you don&#8217;t have to deal with stale comments for eternity?</li>
<li>How will comments affect the people writing on your blog? The rest of the people in your organization? Your members, your constituencies?</li>
</ul>
<p> <strong>TIPS</strong>
<ul>
<li>Great resource: <a href="http://havefundogood.blogspot.com/2010/07/nonprofit-blog-carnival-roundup-how-to.html">Nonprofit Blog Carnival Roundup: How to Create a Juicy Nonprofit Blog</a></li>
<li>sharethis/addthis button - make it as easy to share entries as possible</li>
<li>capacity - honestly assess your capacity to keep it fresh</li>
<li>many people = many styles = many more chances that someone might like what you say</li>
<li>identyfing info for bloggers? protecting bloggers</li>
<li>timeliness - keep it current, don&#8217;t blog about things that are stale</li>
<li>guest bloggers - try them out, you don&#8217;t have to commit to bringing them on permanently</li>
<li>Integrate your blog into your main site - blog as part of main site, feeds, featured blog entry, etc.</li>
<li>Free tools if you can&#8217;t blog directly on your site: WordPress.com, DrupalGardens.com (probably overkill), Blogger</li>
<li>READ OTHER BLOGS - other blogs in your field, allied organizations, big blogs, enemy blogs. Get a feel for the &#8220;blogosphere&#8221; and become a part of it.</li>
<li>Keep it short! (Especially at first)</li>
<li>If it&#8217;s long, put it &#8220;behind the cut&#8221; - show a shorter teaser on the main blog page</li>
<li>Use visuals - photos, graphics, maps, videos</li>
<li>Have good bios for your contributors - let people get to know them, care about them, like them, trust them</li>
<li>Link out to get links back</li>
<li>Regular themed features - e.g. book review Tuesdays, great news articles Fridays</li>
<li>Get hooked into blogging carnivals on your topic to reach a much wider, already interested audience. You can even try to host one round of a carnival, thus reaching an even larger audience.</li>
<li>Connect with the &#8220;big&#8221; blogs that are related to your organization&#8217;s work. Make sure they&#8217;re aware of your blog; hopefully they&#8217;ll pick up stories from your blog and expose them to a wider audience. Once you&#8217;ve established your blog and have built a rapport with them you might also ask for a guest blogger spot on their blog (writing posts on their blog that you can also cross-post on yours) or ask them to guest blog at yours.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=254</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 - Estimates BoF</title>
		<link>http://blog.palantetech.com/?p=252</link>
		<comments>http://blog.palantetech.com/?p=252#comments</comments>
		<pubDate>Wed, 28 Jul 2010 12:02:27 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=252</guid>
		<description><![CDATA[
look at other similar projects, how long those took, what problems you ran into on those
hourly estimates, number of days
write out a narrative of the expected timeline
add a lot of padding to initial estimates
your estimate builds your client&#8217;s expectations; don&#8217;t inflate them artificially
if you&#8217;re really honest, some clients might come back and say no; have [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>look at other similar projects, how long those took, what problems you ran into on those</li>
<li>hourly estimates, number of days</li>
<li>write out a narrative of the expected timeline</li>
<li>add a lot of padding to initial estimates</li>
<li>your estimate builds your client&#8217;s expectations; don&#8217;t inflate them artificially</li>
<li>if you&#8217;re really honest, some clients might come back and say no; have to accept that possibility</li>
<li>if you do a high-end hourly estimate, you might come in under budget and the client might get a better deal</li>
<li>keep your old proposals for similar kinds of projects; you can reuse them</li>
<li>trickier with R&amp;D work where there&#8217;s no clear answer of what it&#8217;ll take to do solve a problem before you get deep into it</li>
<li>migration is a very tricky process, difficult to accurately estimate, though you can still use past experience to anticipate how long it will take</li>
<li>get it in the client&#8217;s mind that estimates will have to be revisited after looking at the data</li>
<li>Use formulas like if <em>x</em> is the amount of time you estimate, add 1/3 or 20% project management + 10% quality assurance or some other padding margin</li>
<li>train clients to take responsibility for these things</li>
<li>wireframe or explain exactly how you&#8217;re going to tackle a problem up front for the client</li>
<li>you can give warranties on Drupal sites, though it&#8217;s not mandatory; a warranty can say &#8220;I&#8217;ll fix whatever is wrong for the three week period of this warranty&#8221;</li>
<li>don&#8217;t underbid to make the sale unless you want to get burned</li>
<li>your rate needs to cover your unbillable business costs</li>
<li>specifically say that requesting additional estimates for additional work is paid work</li>
<li>some people charge for change orders on contracts</li>
<li>maintenance contracts - some people offer annual packages for basic maintenance and changes, some monthly packages, but certain requests constitute entirely new projects</li>
<li>you can create those contracts with clauses that deal with if other people get involved in the projects in the interim so you aren&#8217;t expected to fix other people&#8217;s problems</li>
<li>maintenance agreements = an important source of recurring revenue</li>
<li>include requirements around hosting in your contracts, charge more for annoying/atypical/unfamiliar hosting situations</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=252</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 - Rules, the Next Big Thing in Drupal</title>
		<link>http://blog.palantetech.com/?p=250</link>
		<comments>http://blog.palantetech.com/?p=250#comments</comments>
		<pubDate>Sun, 25 Jul 2010 20:17:01 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[DrupalCampNYC8]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=250</guid>
		<description><![CDATA[Presented by Eric Goldhagen

Actions and Triggers - ways of creating automated functions (actions) when a certain condition is met (trigger)
Without writing code to refine what the trigger was, couldn&#8217;t get specific enough
Rules module gives more fine-grained control through the web interface (e.g. when someone creates a node of type x, send an email with this [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by Eric Goldhagen</p>
<ul>
<li>Actions and Triggers - ways of creating automated functions (actions) when a certain condition is met (trigger)</li>
<li>Without writing code to refine what the trigger was, couldn&#8217;t get specific enough</li>
<li>Rules module gives more fine-grained control through the web interface (e.g. when someone creates a node of type <em>x</em>, send an email with this specific text to users of <em>y</em> role.)</li>
<li>As with Views, it looks like Rules will be widely adopted because module developers are hooking into Rules or exposing their modules to Rules</li>
</ul>
<p><strong>Looking at Rules</strong></p>
<ul>
<li>You can import and export rules, put rules into a module or features to store it as code under revision control</li>
<li>&#8220;Content is going to be saved&#8221; event - when content is being added to or updated, happens in that moment in between hitting save/submit and it actually being updated</li>
<li>(watched a demo of a rule being set up)</li>
<li>There is more than just AND logic available for Rules; can configure OR and ELSE as well</li>
<li>Performance issues are present; best way to avoid them is to put your most important condition at the very top, e.g. if a rule only applies to members of a certain role, put role membership check is happening as early as possible so the other steps don&#8217;t have to run</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=250</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 - Git with It: Drupal Development Done Better</title>
		<link>http://blog.palantetech.com/?p=244</link>
		<comments>http://blog.palantetech.com/?p=244#comments</comments>
		<pubDate>Sun, 25 Jul 2010 19:56:32 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[DrupalCampNYC8]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=244</guid>
		<description><![CDATA[Presented by Joshua Jabbour
Centralized Version Control

Requires a central server where the repository lives
In order to interact with the repository, you must have network access and contact the central server
Actions must be communicated to the central repository in order to be recorded and versioned; can&#8217;t commit remotely
Once a change is committed, it cannot be safely edited; [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by Joshua Jabbour</p>
<p><strong>Centralized Version Control</strong></p>
<ul>
<li>Requires a central server where the repository lives</li>
<li>In order to interact with the repository, you must have network access and contact the central server</li>
<li>Actions must be communicated to the central repository in order to be recorded and versioned; can&#8217;t commit remotely</li>
<li>Once a change is committed, it cannot be safely edited; a second commit must be made to undo it</li>
<li>Once you commit, everyone else can download your changes&#8230; even the bad ones</li>
<li>These issues with centralized version control discourages people from using version control, committing frequently, etc</li>
</ul>
<p><strong>Decentralized Version Control</strong></p>
<ul>
<li>No central server is required. Changes can be sent to or received from any repository at any time, or not sent or received at all.</li>
<li>Most actions are local; changes only need to be shared with remote repositories as desired and when convenient</li>
<li>As long as a commit hasn&#8217;t been shared with anyone else, you can edit it or undo it at will</li>
<li>Others have access to your changes only after you share them; your local history is therefore separate from the remote history.</li>
<li>This is more conducive to using version control heavily, making frequent commits</li>
</ul>
<p><strong>Git Basics</strong></p>
<ul>
<li>Getting Started
<ul>
<li>After installation, introduce yourself to git: <strong>git config &#8211;global user.name &#8220;Your Name&#8221;; git config &#8211;global user.email &#8220;youremail@here.com&#8221;</strong></li>
<li>Download some GUI helpers like GitX or SmartGit</li>
<li>Referring to revisions: &#8220;ebc344db0404f0ee3a634d4889c101e869a8b419&#8243; is the full commit number but can be abbreviated to &#8220;ebc344&#8243;; HEAD is most recent commit in current branch, HEAD^ is commit before most recent one, HEAD^^^ or HEAD-3 are three commits back</li>
</ul>
</li>
<li>Working on your copy
<ul>
<li>The <em>working copy</em> is the files and folders in your project. It represents your project at a specific point in time.</li>
<li>But in Git, your working copy is also a full repository; this is where the magic happens, you have every single change that&#8217;s been made right there within the history of your working copy.</li>
<li><strong>git init</strong> - create your repository in the current directory; creates the .git folder within the current directory where your repository lives.</li>
<li><strong>git add .</strong> - add all of the files in your working copy to your git repository</li>
<li><strong>git commit -a -m &#8220;Your message here&#8221;</strong> - Commit all files to your git repository along with an explanatory message describing the commit.</li>
<li><strong>git clone [url]</strong> - clone the entire specified repository</li>
</ul>
</li>
<li>Be committed
<ul>
<li>With Git, it&#8217;s best to work in small bits</li>
<li>Rule of thumb: if you can&#8217;t summarize your changes in a sentence, you&#8217;ve gone too long without committing</li>
<li>Think of your local git repo as YOURS, you can clean it up before sharing, meticulously document your work in small chunks</li>
<li><strong>git status</strong> - what&#8217;s been changed since your last commit</li>
<li><strong>git diff</strong></li>
<li><strong>git commit -a </strong>- commit all updated files (already being tracked in your repository)</li>
</ul>
</li>
<li>Your Repository
<ul>
<li>Your local repo is yours and yours alone</li>
<li>You decide when and what to push to another repo</li>
<li>Commit early and commit often; you can always clean up your commit history before pushing</li>
<li>However, once a commit has been shared (especially with a central repository) it should be considered sacrosanct since someone else might have pulled down that commit already</li>
</ul>
</li>
<li>On Stage
<ul>
<li>The <em>staging area</em> (also referred to as the <em>index</em>) is a temporary holding area for changes</li>
<li>When a file or changeset is added to the staging area, it is not yet committed to the repository</li>
<li>The staging area allows you to build up your commit file by file or even line by line</li>
<li><strong>git add file1 newfile folderA/file3 newfolder8 </strong>- fine-grained specification of what you want to add to the git repo for this commit</li>
<li>Demonstration of staging changes <em>line by line</em> using GitX; look into <strong>git add -p </strong>to do that from the command line</li>
</ul>
</li>
<li>Branching
<ul>
<li>Branching is one of Git&#8217;s killer features, not because it&#8217;s new but because it&#8217;s so easy and cheap</li>
<li>Branching is a database, another path that we&#8217;re working down</li>
<li>When working on features, always create a topical branch for the particular thing you&#8217;re working on</li>
<li>Always working in your trunk/master branch is not a good idea</li>
<li><strong>git branch &lt;branch&gt; </strong>- creates the branch</li>
<li><strong>git checkout &lt;branch&gt; </strong>- switch to that branch</li>
<li><strong>git checkout -b &lt;branch&gt; </strong>- create and switch to that branch</li>
<li>Branches aren&#8217;t directories in Git; the working copy always contains the state of the active branch</li>
<li>Branches are really just pointers to a commit, as are tags</li>
<li>Branches let you separate out your work on a particular issue or feature from the master branch; you can do all of your work there, if it turns out to be worthwhile you merge it back into master, if it&#8217;s not worthwhile you can blow it away (<strong>git branch -d &lt;branch&gt;</strong>) and get rid of all those commits entirely</li>
</ul>
</li>
<li>Out on a Branch (Remote Branching)
<ul>
<li>Remote branches are similar to local branches, except that they can be shared across repositories</li>
<li>Remotes are referred to by [repo]/[branch]</li>
<li>Most collaborative open source software uses forked repos and shared branches</li>
</ul>
</li>
<li>Merging
<ul>
<li>Many merges can be done automagically by Git</li>
<li><strong>git merge &lt;branch&gt;</strong></li>
<li>Some merges will require human intervention with <strong>git mergetool</strong></li>
</ul>
</li>
<li>Rebasing (All Your Rebase Are Belong To Us)
<ul>
<li>Rebasing is a primary function of Git: &#8220;redo my changes using another revision as a new base&#8221;</li>
<li><strong>git rebase</strong></li>
<li>In some ways it&#8217;s similar to merging, but instead of adding your changes at the end of the stream, it puts them in place in the midst of a stream</li>
<li>Rebasing is done automatically every time you pull changes from another repository</li>
<li>Interactive rebasing (<strong>git rebase -i) </strong>allows you to alter your local commits, squash them into one for merging or pushing, etc</li>
</ul>
</li>
<li>Fetch and pull
<ul>
<li>When you want to get changes from another repo you fetch - <strong>git fetch </strong>or <strong>git fetch origin</strong> or <strong>git fetch [repo]</strong></li>
<li>After fetching you merge the new commits into your local tree - <strong>git merge [repo]/branch</strong></li>
<li>Pulling is a shortcut; fetch followed by an automatic merge - <strong>git pull</strong> or <strong>git pull origin</strong> or <strong>git pull [repo]</strong></li>
<li>Pushing sends commits to a remote repo; should only be done with canoncial repos (if you want to share with other users&#8217; repos, usually you&#8217;ll have them pull from yours instead - <strong>git push</strong> or <strong>git push [repo] [branch]</strong></li>
</ul>
</li>
<li>Reset (didn&#8217;t get covered)</li>
<li>Gitify your Subversion
<ul>
<li>Git includes a built-in Subversion client</li>
<li>Use Git to control your local commits, then push them to a central SVN repo</li>
<li>A couple of things work differently, but you still have the full power of Git within your <em>local</em> repository</li>
<li><strong>git svn clone [url] </strong>- check out SVN repo and put it in a new git repo on your machine</li>
<li><strong>git svn dcommit</strong> - effectively a push to the SVN repo</li>
<li><strong>git svn fetch </strong>- works like normal git fetch</li>
<li><strong>git svn rebase </strong>- a fetch and then an apply (like <strong>git pull)</strong></li>
<li><strong>git config &#8211;global alias.spull &#8216;!git-svn rebase&#8217; </strong>(handy alias to make life easier)</li>
</ul>
</li>
<li>Git intermediate
<ul>
<li>Stash away your work for now - <strong>git stash</strong> or <strong>git stash &#8211;save &#8220;short note&#8221; </strong>- not a real commit</li>
<li><strong>git cherry-pick [revision] </strong>- bring one commit from another branch into this one</li>
<li>Hashes everywhere - everything in Git is referenced by a SHA1 hash; tags, branch names, etc are really just shortcuts to them</li>
</ul>
</li>
<li>Git tools and resources displayed very quickly, guessing they&#8217;ll be in slides or notes online!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=244</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8: Building Features and Exportables</title>
		<link>http://blog.palantetech.com/?p=237</link>
		<comments>http://blog.palantetech.com/?p=237#comments</comments>
		<pubDate>Sun, 25 Jul 2010 15:42:51 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[DrupalCampNYC8]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=237</guid>
		<description><![CDATA[Presented by Frank Carey (frankcarey)

In the beginning, Drupal was very code centric
if you wanted to make something you coded a module, relied in hooks API, etc
Content ruled the land (the database), but modules still stored many settings in the database
Content in Drupal - nodes, friends, comments, votes, users, messages
Then came the GUI-la Monsters - Flexinode, [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by Frank Carey (frankcarey)</p>
<ul>
<li>In the beginning, Drupal was very code centric</li>
<li>if you wanted to make something you coded a module, relied in hooks API, etc</li>
<li>Content ruled the land (the database), but modules still stored many settings in the database</li>
<li>Content in Drupal - nodes, friends, comments, votes, users, messages</li>
<li>Then came the GUI-la Monsters - Flexinode, Views, CCK, Contemplate, Rules, Context - things you&#8217;d normally do with code, but now could do through the UI</li>
<li>Config settings include variables, CCK, permissions, views, contexts, panels, blocks, and rules</li>
<li>Why should this stuff be in code and not the DB?
<ul>
<li>How do you track changes within the database?</li>
<li>How do you revert back when you make a mistake?</li>
<li>How do you reuse configurations?</li>
<li>How can you work as a team?</li>
<li>How can you update settings across sites?</li>
</ul>
</li>
<li>If your settings/config are in code, you can use version control to handle those thing
<ul>
<li>take your pick, but pick something! CVS (going out of use though), Subversion, Git, Bazzar, Mercurial</li>
</ul>
</li>
<li>How do we get stuff into code?
<ul>
<li>Some modules provide their own custom export and import functionality - views migrate rules</li>
<li>some are leveraging ctools export api (paenls, context, etc)</li>
<li>some are adding exportables to other modules or tables (Input Formats and Strongarm)</li>
</ul>
</li>
</ul>
<p><strong>Ctools exportables</strong></p>
<ul>
<li>Tool attempts to solve the common problem of handling exportables.
<ul>
<li>Defining exportables structure</li>
<li>Getting the data from the DB and creating the xportable object</li>
<li>importing the data from either db or code</li>
</ul>
</li>
<li>Ctools exportables
<ul>
<li>Need a persistent, unique identifier in the table that contains the object you want to export (the machine name)</li>
<li>Implement a few lines into hook_schema() or hook_schema_alter() to get ctools functionality</li>
</ul>
</li>
<li>So what the heck is Features?
<ul>
<li>Features is basically an exportables manager</li>
<li>It creates &#8220;features&#8221; modules, which are really just normal modules (features is not a hard dependency</li>
<li>allows for a gui interface to choose what things you want to export per feature</li>
<li>it provides drush integration to easily update and revert changes from the CLI</li>
</ul>
</li>
<li>What should a feature consist of?
<ul>
<li>Look for logical sections and atomic functionality</li>
<li>Examples: Blog, Gallery, Users, Content Type X - these are features on the site that are comprised of content types, views, blocks, etc that come together to create one complete feature on your site</li>
<li>Can be traditional code as well: stuff that used to go in helper modules, additional theming, etc. All of Drupal&#8217;s hooks are available to Features.</li>
</ul>
</li>
</ul>
<ul>
<li>In the beginning, Drupal was very code centric</li>
<li>if you wanted to make something you coded a module, relied in hooks  API, etc</li>
<li>Content ruled the land (the database), but modules still stored many  settings in the database</li>
<li>Content in Drupal - nodes, friends, comments, votes, users, messages</li>
<li>Then came the GUI-la Monsters - Flexinode, Views, CCK, Contemplate,  Rules, Context - things you&#8217;d normally do with code, but now could do  through the UI</li>
<li>Config settings include variables, CCK, permissions, views,  contexts, panels, blocks, and rules</li>
<li>Why should this stuff be in code and not the DB?
<ul>
<li>How do you track changes within the database?</li>
<li>How do you revert back when you make a mistake?</li>
<li>How do you reuse configurations?</li>
<li>How can you work as a team?</li>
<li>How can you update settings across sites?</li>
</ul>
</li>
<li>If your settings/config are in code, you can use version control to  handle those thing
<ul>
<li>take your pick, but pick something! CVS (going out of use though),  Subversion, Git, Bazzar, Mercurial</li>
</ul>
</li>
<li>How do we get stuff into code?
<ul>
<li>Some modules provide their own custom export and import  functionality - views migrate rules</li>
<li>some are leveraging ctools export api (paenls, context, etc)</li>
<li>some are adding exportables to other modules or tables (Input  Formats and Strongarm)</li>
</ul>
</li>
</ul>
<p><strong>Ctools exportables</strong></p>
<ul>
<li>Tool attempts to solve the common problem of handling exportables.
<ul>
<li>Defining exportables structure</li>
<li>Getting the data from the DB and creating the xportable object</li>
<li>importing the data from either db or code</li>
</ul>
</li>
<li>Ctools exportables
<ul>
<li>Need a persistent, unique identifier in the table that contains the  object you want to export (the machine name)</li>
<li>Implement a few lines into hook_schema() or hook_schema_alter() to  get ctools functionality</li>
</ul>
</li>
<li>So what the heck is Features?
<ul>
<li>Features is basically an exportables manager</li>
<li>It creates &#8220;features&#8221; modules, which are really just normal modules  (features is not a hard dependency</li>
<li>allows for a gui interface to choose what things you want to export  per feature</li>
<li>it provides drush integration to easily update and revert changes  from the CLI</li>
</ul>
</li>
<li>What should a feature consist of?
<ul>
<li>Look for logical sections and atomic functionality</li>
<li>Examples: Blog, Gallery, Users, Content Type X - these are features  on the site that are comprised of content types, views, blocks, etc that  come together to create one complete feature on your site</li>
<li>Can be traditional code as well: stuff that used to go in helper  modules, additional theming, etc. All of Drupal&#8217;s hooks are available to  Features.</li>
</ul>
</li>
</ul>
<p><strong>Notes from Features Demo</strong></p>
<ul>
<li>When you look at your list of features with diff module enabled, you can see how a feature has been overridden within the current configuration</li>
<li>Turning on Strongarm allows you to export variables (from the variables table) into a feature</li>
</ul>
<p><strong>Command-line features</strong></p>
<ul>
<li>Features exposes many commands to Drush that can then be used from the command line</li>
<li><strong>features revert</strong> - revert a feature from the command line; this reverts changes made within the UI to settings that you&#8217;ve configured within a feature</li>
</ul>
<p><strong>Features/Exportable Gotchas</strong></p>
<ul>
<li>Some exportables can&#8217;t be exported more than once (e.g. can&#8217;t re-export a default view)</li>
<li>Features-revert-all can be dangerous, blow away work</li>
<li>Not everything is exportable yet</li>
<li>Revert-all doesn&#8217;t work if there&#8217;s no diff (fixed recently in dev)</li>
<li>Dependencies can be tricky.</li>
</ul>
<p><strong>Developments to watch out for</strong></p>
<ul>
<li>Better core exportability in Drupal 8</li>
<li>Use of UUIDs as unique IDs</li>
<li>More end-product modules that implement a fully featured user experience</li>
<li>hook_features_alter() - allow partial overrides that are exportable as well</li>
<li>Easy Features = Better Install Profiles</li>
</ul>
<p>Additional Things to See</p>
<ul>
<li>http://drupal.org/project/features</li>
<li><a href="http://drupal.org/taxonomy/term/11479">All features enabled modules</a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=237</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 - HTML5 in Drupal BoF</title>
		<link>http://blog.palantetech.com/?p=233</link>
		<comments>http://blog.palantetech.com/?p=233#comments</comments>
		<pubDate>Sun, 25 Jul 2010 15:05:18 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[DrupalCampNYC8]]></category>

		<category><![CDATA[theming]]></category>

		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=233</guid>
		<description><![CDATA[Random/Framing Notes

Introduction to HTML 5 book is a primary reference during this conversation
Is it a good ideal to add a bunch more options, fields, and decisions for what to HTML5ize or not throughout Drupal? This might create some big UI/UX problems.
Might be better to have all Semantic HTML5 settings on one big page, rather than [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Random/Framing Notes</strong></p>
<ul>
<li><a href="http://books.google.com/books?vid=isbn9780321687296">Introduction to HTML 5</a> book is a primary reference during this conversation</li>
<li>Is it a good ideal to add a bunch more options, fields, and decisions for what to HTML5ize or not throughout Drupal? This might create some big UI/UX problems.</li>
<li>Might be better to have all Semantic HTML5 settings on one big page, rather than have the configuration distributed throughout Drupal</li>
<li>Doing all the config in one place will also give us a really easy way to set all the defaults more manageable.</li>
<li>However, having all the config in one place AWAY from the creation/edit pages for these entities could be cumbersome</li>
<li>Can we have the same settings in two places? The Semantic HTML5 module settings page AND the individual settings pages for menus, blocks, etc?</li>
<li>We&#8217;re going to start out in Drupal 6, it&#8217;ll be difficult and messy, but we&#8217;ll learn as we go and then know how to tackle this in Drupal 7</li>
<li>If we build an API for this and collaborate with creators of Semantic Views, Semantic CCK, Mothership, etc, might be a great way to go for Drupal 7</li>
<li>Might never be an API because in Drupal 7 this is going to be done by <a href="http://api.drupal.org/api/function/drupal_render/">drupal_render</a></li>
<li>We&#8217;ll need to include JavaScript to include semantic tags on non-HTML5 compliant browsers</li>
<li>Our goal is to make Drupal work for HTML5, not to make HTML5 work in all web browsers</li>
</ul>
<p><strong>Forms and Fields</strong></p>
<ul>
<li>Form API gives us a big advantage and many abilities to make changes to any form field</li>
<li>right now we can primarily work with core and CCK fields</li>
<li>we can provide support moving forward, but we can&#8217;t completely anticipate what other fields will be used for; we can&#8217;t inspect backwards</li>
<li>we can also work with modules like Date, Email</li>
<li>use the Elements allows module developers to use Form API to get HTML5 form elements into their modules; a separate module would be used to transform core and CCK fields to HTML5 elements</li>
<li>want to be able to switch fields from &#8220;text&#8221; field to &#8220;email&#8221; field; <a href="http://drupal.org/project/elements">Elements</a> module lets you do some of that already</li>
<li>we&#8217;d need a different module that does what Elements does to core fields</li>
<li>other things to support with the other module - search (core)</li>
<li>these modules will override the markup for CCK widgets</li>
<li>we need to figure out how to override markup for all the fields with HTML5 elements; then we need to figure out how to implement that within the module, allow people to specify which fields they want to override, etc.</li>
<li>Could also consider getting this stuff into modules (CCK, Date, etc) themselves anyhow to avoid having to develop an entirely separate module</li>
</ul>
<p><strong>$header and DOCTYPE</strong></p>
<ul>
<li>DOCTYPE has to be changed but that&#8217;s relatively easy</li>
<li>Header elements are also done differently in HTML5</li>
<li>In Drupal, $header is spit out by Drupal</li>
<li>In Drupal 6, $header is populated by both core and by the <a href="http://api.drupal.org/api/function/drupal_set_html_head/6">drupal_set_html_head</a> function - anything can be put into the $header using that function</li>
<li>We can tackle this on the module level, but would then need to ensure that the module gets executed last (and other modules are already jockeying for that position)</li>
<li>In Drupal 7 what you&#8217;re adding to headers is much more structure</li>
<li>Other option - handle it at the theme level using a preprocess function - wind up with an amorphous blob of text that we could regex to replace tags with HTML5, but it&#8217;s not foolproof</li>
<li>A module seems like a headache; a starting point in a base theme might be a better way to go</li>
<li>If an edge case uses the old HTML ways, the page/site will still work</li>
<li>If this is done with a module, anyone can do their own HTML5 theme, $header is still printed normally, instead what you get out of $header is now HTML5 instead of the old way to do it</li>
<li><a href="http://api.drupal.org/api/function/drupal_add_http_header/7">drupal_add_http_header</a> and <a href="http://api.drupal.org/api/function/drupal_add_html_head/7">drupal_add_html_head</a> are used in Drupal 7, so getting stuff into $header will be much more structured</li>
<li>We could backport that from Drupal 7, but contrib modules might not work with that backport</li>
<li>We could implement the backport and append on whatever else was set in the header that isn&#8217;t handled by the backport at the end, though that could result in double info</li>
<li>Are there concerns about the order of tags in the header? Probably tags that have to come after everything else will be appended on the theme layer anyway, and if not it would work if we appended things at the end of the D7-backported $header</li>
<li>Agreement is coming in this discussion that this should be done in the module level; create a wrapper function that overrides drupal_set_html_head and is a backport of what&#8217;s in Drupal 7; modules can use our function if they provide needed information that they want in the header; and if any modules are not using our function to set header tags those are just appended at the end of the $header</li>
<li>possible module names: HTML5 API, HTML5 tools</li>
<li>might have implications for limitations on script and styles tags (e.g. IE limitation of number of CSS files)</li>
<li>The syntax has only been simplified in HTML5, but how do we get in there and alter those variables?</li>
</ul>
<p><strong>Document Layout Tags</strong></p>
<ul>
<li>The new HTML5 document layout tags include article, header, footer, nav</li>
<li>Much of this is a theming layer issue</li>
<li>A group needs to get together, figure out best practices, and rewrite node.tpl.php and page.tpl.php for a base D6 theme</li>
<li>However, some tags come out of core, CCK, and Views</li>
<li>Some of the HTML that core spits out has theme functions, some doesn&#8217;t (e.g. comments)</li>
<li>We can create a theme function that rewrites and fixes core HTML that doesn&#8217;t already have a theme function</li>
<li>Mothership theme might be a good place to look for existing fixes <em>or</em> a list of possible problems to look at</li>
<li>Views and CCK - do we fix Views and CCK, or do we tell people to use <a href="http://drupal.org/project/semanticviews">Semantic Views</a> and <a href="http://drupal.org/project/semantic_cck">Semantic CCK</a> instead?</li>
<li>Can we wrap our solutions up as Features, perhaps including Semantic Views and Semantic CCK</li>
<li>One possibility - require Semantic Views and Semantic CCK modules as part of this feature, add a lot of HTML5 documentation to the top of the Semantic CCK form (and Semantic Views too?). We should also prepopulate as many predictable HTML5 settings in Semantic CCK and Views as possible, just like what happens in Semantic Views and Semantic CCK already; in both we&#8217;ll be using HTML5 markup.</li>
</ul>
<p><strong>Menus and other Drupal entities<br />
</strong></p>
<ul>
<li>there&#8217;s a nav tag in HTML5</li>
<li>Not every menu is a nav, but there are some we know are navs, e.g. primary links and secondary links</li>
<li>Stuff that only shows up for administrators are second-tier issues for us</li>
<li>there is some debate about what menus might qualify as navs and what might not</li>
<li>consider creating a Semantic Menus module</li>
<li>Though we&#8217;re not sure of the way we&#8217;ll do it, we do have a goal of altering the menu creation form so that a user can choose to make a menu HTML5 or not</li>
<li>Other Drupal entities that we need to tackle similarly: blocks, comments</li>
<li>Config page for the module(s) we create could turn HTML5ing on for particular entities; turning HTML5 on for those entities will turn on</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=233</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 Drush Intro or What Is It Good For</title>
		<link>http://blog.palantetech.com/?p=227</link>
		<comments>http://blog.palantetech.com/?p=227#comments</comments>
		<pubDate>Sat, 24 Jul 2010 20:32:33 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[DrupalCampNYC8]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=227</guid>
		<description><![CDATA[Presented by Robert Holmes (robbiethegeek)
(Got here a bit late, but caught the very beginning of drush command overview)
Handy drush commands

drush - listing of all the drush commands available to you
drush status - basic info on your site
drush sqlc (drush sql-cli) - takes you into MySQL console using the credentials of the site you&#8217;re accessing with [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by Robert Holmes (robbiethegeek)</p>
<p>(Got here a bit late, but caught the very beginning of drush command overview)</p>
<p><strong>Handy drush commands</strong></p>
<ul>
<li><strong>drush</strong> - listing of all the drush commands available to you</li>
<li><strong>drush status</strong> - basic info on your site</li>
<li><strong>drush sqlc</strong> (drush sql-cli) - takes you into MySQL console using the credentials of the site you&#8217;re accessing with drush right now</li>
<li><strong>drush dl &lt;projectname&gt;</strong> - downloads code for module (project) into sites/all/&lt;projectname&gt;; can list multiple projects at once</li>
<li><strong>drush dl &lt;projectname&gt;-&lt;version&gt; </strong>- download a specific version of a module, e.g. <em>drush dl filefield-6.x-3.x-dev</em></li>
<li><strong>drush en &lt;projectname&gt;</strong> - enable &lt;projectname&gt;</li>
<li><strong>drush up</strong> - upgrade code <em>and</em> database for Drupal core and third-party modules</li>
<li><strong>drush sql-dump </strong>- Performs a dump of the current Drupal site&#8217;s database. This will vomit it all over the screen, so instead you&#8217;ll want to direct the SQL dump to a file using <strong>drush sql-dump &#8211;result-file=filename.sql </strong>or <strong>drush sql-dump &gt; filename.sql </strong>(and then</li>
<li><strong>drush cc</strong> - clear the cache that you then specify from the menu, or specify within the command as <strong>drush cc theme</strong> or <strong>drush cc all </strong>etc</li>
<li><strong>drush help &lt;command&gt;</strong> - get help on the given drush command</li>
</ul>
<p><strong>Random Notes<br />
</strong></p>
<ul>
<li>You can use drush in conjunction with other shell commands, wrap drush commands in shell scripts, etc</li>
<li>Other modules can also expose functionality and add commands to drush, e.g. devel module</li>
<li>Drush supports the ability to remotely connect to a server - open an ssh connection, run a drush command, and bring it locally</li>
<li>http://dgo.to/ - Drupal URL shortener AND smartener with quick paths to projects, issue queues, nodes by number, users, etc</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=227</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 - From a Contractor to a Shop: How to Make the Leap</title>
		<link>http://blog.palantetech.com/?p=224</link>
		<comments>http://blog.palantetech.com/?p=224#comments</comments>
		<pubDate>Sat, 24 Jul 2010 19:34:33 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=224</guid>
		<description><![CDATA[Presented by Alex Urevick-Ackelsberg, Zivtech (12-person Drupal shop based in Philly)
Starting Out

look to other existing shops to get insights into the business of selling Drupal
Define the type of Drupal/web shop you are. Are you just a Drupal firm? Do you provide other services/products? What are you selling?
Good to write up a mission statement, followed by [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by Alex Urevick-Ackelsberg, Zivtech (12-person Drupal shop based in Philly)</p>
<p><strong>Starting Out</strong></p>
<ul>
<li>look to other existing shops to get insights into the business of selling Drupal</li>
<li>Define the type of Drupal/web shop you are. Are you just a Drupal firm? Do you provide other services/products? What are you selling?</li>
<li>Good to write up a mission statement, followed by a business plan - take the time to look at the market, the other players in the market, assess the cost and payout of the business</li>
<li>Small Business Association - many resources that you can tap into when starting out, even just as a freelancer</li>
<li>Cash flow is a tricky thing to handle; need to know how much money you need to get started. Do you need investors? Loans? Are you going to bootstrap it?</li>
<li>Money comes in through accounts receivable; goes out through payroll, accounts payable, and taxes. Need to have it coming in faster than it&#8217;s going out.</li>
</ul>
<p><strong>Partners</strong></p>
<ul>
<li>Who are you looking to partner with? Why? Do you want to stop doing certain parts of the work? Does your shop need skills that you don&#8217;t have?</li>
<li>Define roles for each partner</li>
<li>Split tasks and responsibilities up</li>
<li>Keep partners accountable</li>
<li>Seth - the perfect partner is someone who you <em>don&#8217;t </em>agree with all the time, to be challenged</li>
</ul>
<p><strong>Management</strong></p>
<ul>
<li>Remote vs office
<ul>
<li>Being in the same room can help facilitate quick communication</li>
</ul>
</li>
<li>Managing teams of developers
<ul>
<li>can be like herding cats</li>
<li>if your shop sells hours</li>
<li>who ends up being a project manager? is that a separate role or can other people take on that role in addition to development?</li>
<li>Sometimes developers don&#8217;t have good project management skills; sometimes it&#8217;s based on scale and you just get to a size where it won&#8217;t work</li>
</ul>
</li>
<li>Fixed bids vs retainers/hourly
<ul>
<li>&#8220;If you want a good way to bankrupt your company, do a fixed bid.&#8221;</li>
<li>Zivtech either sells buckets of time (e.g. 100 hours to be used within a certain amount of time) or estimated costs (here&#8217;s the top of what we think it&#8217;s gonna cost, if it gets to where we think it&#8217;s going to be 10% over that we come back and check in)</li>
<li>push back from others in the audience (Liza, Seth) about fixed bids working if projects are managed well, clients not being willing to go for non-fixed bids</li>
<li>Zivtech bills based on who&#8217;s working on the project; different levels of skill</li>
<li>Liza - can be important to have a client manager (not necessarily the same as the project manager)</li>
<li>someone else in the room - gives clients deadlines for giving feedback</li>
<li>Zivtech uses unfuddle for ticketing, time tracking, etc - has git and svn repositories</li>
<li>suggestion: multiply the number of hours you think a task will take by three and you&#8217;re more likely to be on target!</li>
</ul>
</li>
<li>Juggling more and longer term engagements
<ul>
<li>Tricky to figure out how to juggle how many projects you&#8217;re taking on at once</li>
<li>A key thing is to overbook yourself</li>
</ul>
</li>
<li>Balancing contribution and business development with client work
<ul>
<li>balance the non-billable hours well</li>
<li>make sure you&#8217;re charging enough to withstand the time that folks are doing non-billable work</li>
<li>Drupal is something of a publish or perish business; you&#8217;ve got to put yourself out there, contribute to the community</li>
</ul>
</li>
<li>Outsourcing
<ul>
<li>a more flexible way to pay people for work than payroll; accounts payable is &#8220;pay when you can&#8221; whereas payroll happens every two weeks no matter what</li>
</ul>
</li>
</ul>
<p><strong>Sales and Marketing</strong></p>
<ul>
<li>Sales cycles
<ul>
<li>understand how long clients will take to make decisions, sign contracts, send initial deposit and later payments</li>
<li>understand how clients&#8217; fiscal years work and how that will affect the work you&#8217;re getting</li>
</ul>
</li>
<li>RFP, estimates, and proposals - understand how your internal cycle works</li>
<li>MeetUps, Camps, Local community sites and conferences - good sources for new clients</li>
<li>Contribute!!! in open source! Publish or Perish!</li>
<li>Develop or claim modules in desired verticals (e.g. mapping, media, mobile, etc) - focus your contributions in the area you&#8217;re trying to work with</li>
</ul>
<p><strong>Basic Roadblocks to Growth</strong></p>
<ul>
<li>Cash flow is king!
<ul>
<li>you can demand a certain amount up front from many clients, though some clients will tell <em>you</em> how they&#8217;re going to pay; they generally ask for 40-50% up front</li>
</ul>
</li>
<li>Taxes</li>
<li>Accounts Receivable/Collections
<ul>
<li>gently but consistently remind clients to pay you</li>
<li>make sure you get into your clients payment system ASAP - contact billing right away</li>
<li>do regular billing, biweekly or monthly</li>
<li>try to avoid being a hard-ass to collect; you&#8217;re building relationships, so you want to communicate the need to pay as gently as possible</li>
</ul>
</li>
<li>Talent
<ul>
<li>can be a huge impediment to Drupal shops</li>
<li>you need to aggressively train smart people, not just expect to find all the highly-developed talent you need</li>
</ul>
</li>
</ul>
<p><strong>Get Help!</strong></p>
<ul>
<li>SCORE (Service Corp of Retired Executives), SBA, Business Schools
<ul>
<li>some business schools have programs where they place interns with you for a period of time to assist you in the startup stage</li>
</ul>
</li>
<li>Collaborate with other shops</li>
<li>Consultants email list</li>
</ul>
<p><strong>Questions</strong></p>
<ul>
<li>is client acquisition a &#8220;hard marketing&#8221; expense? As in, something that can be written off?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=224</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 - Far Out Admin Interfaces</title>
		<link>http://blog.palantetech.com/?p=221</link>
		<comments>http://blog.palantetech.com/?p=221#comments</comments>
		<pubDate>Sat, 24 Jul 2010 17:15:25 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[DrupalCampNYC8]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=221</guid>
		<description><![CDATA[Presented by Roger López (zroger)
Admin Themes

clients/users appreciate a clear visual division between the public front-end view of the site and the admin view
Garland: out-of-the-box theme that can be used to easily create that visual separation; it&#8217;s the easy choice, but there are others that are specifically tailored to be admin themes
Root Candy: specifically focused on [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by Roger López (zroger)</p>
<p><strong>Admin Themes</strong></p>
<ul>
<li>clients/users appreciate a clear visual division between the public front-end view of the site and the admin view</li>
<li>Garland: out-of-the-box theme that can be used to easily create that visual separation; it&#8217;s the easy choice, but there are others that are specifically tailored to be admin themes</li>
<li>Root Candy: specifically focused on being used on the administrative side; creates tabs at the tops for &#8220;root-level&#8221; admin items, emphasis on readibility, good table structures</li>
<li>comes with built-in slide-out control panel that you can drop any block on the site into</li>
<li>Rubik: another admin theme designed for clear, clean admin with a keen eye to styling messaging, help text</li>
</ul>
<p><strong>Tools, Toolbars</strong></p>
<ul>
<li>Admin module; little wrench in the corner that expands out into an administration</li>
<li>admin_menu module: gives you a nice dropdown menu across the top of your site (front-end and back-end), a number of functions under the Druplicon dropdown menu</li>
</ul>
<p><strong>Administrator != Developer</strong></p>
<ul>
<li>A menu of quick-links specially created for client administrator can be very helpful</li>
<li>Modules to build an admin interface:</li>
<li>Views bulk operations - lets you build a view of content (eg nodes, files, comments) and provide checkbox-style operations on all of the nodes</li>
<li>Draggable Views - lets users drag and drop lists of content into a completely arbitrary sort</li>
<li>Nodequeue - one step beyond Draggable Views, does the drag and drop sorting but also controls specific pinpointing of what content is included in what queue, e.g. take ten completely unrelated nodes and put them into one queue</li>
<li>Panels - you can use it to create a dashboard view of content for your administrators, e.g. a dashboard just for users who are comment moderators</li>
</ul>
<p><strong>Developer tools &amp; APIs</strong></p>
<ul>
<li>Ctools - suite of modules that exist to support other modules
<ul>
<li>includes AJAX library - ideas behind it are foundation for AJAX libraries in Drupal 7</li>
<li>Wizard - multi-step forms</li>
<li>Non-volatile Object Caching</li>
</ul>
</li>
<li>Dialog API - merges jQuery UI Dialog widget with Ctools AJAX - do simple form submissions through a dialog</li>
<li>Features - bundle up all the views for admin interfaces, just like with the front-end stuff</li>
</ul>
<p><strong>WYSIWYG</strong></p>
<ul>
<li>they&#8217;ve gotten better at outputting valid (if not entirely efficient) output</li>
<li>WYSIWYG API is the way to go now; editor specific modules are deprecated</li>
<li>input_formats - new module that allows you to export input formats as Features code (!!!)</li>
<li>better_formats - module that attempts to improve the input format specifications of Drupal, default input formats per role (!!!)</li>
<li>Insert - works in conjunction with imagefields and filefields - get an insert button next to each imagefield, throws it into the body of the node, works with all major Imagefields (!!!)</li>
</ul>
<p><strong>Random</strong></p>
<ul>
<li>Check out http://www.sequelpro.com/ - MySQL management for Mac OS X</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=221</wfw:commentRss>
		</item>
		<item>
		<title>Raw Notes: DrupalCampNYC8 - Theming Content-Rich Sites</title>
		<link>http://blog.palantetech.com/?p=214</link>
		<comments>http://blog.palantetech.com/?p=214#comments</comments>
		<pubDate>Sat, 24 Jul 2010 16:09:54 +0000</pubDate>
		<dc:creator>Jack</dc:creator>
		
		<category><![CDATA[Drupal]]></category>

		<category><![CDATA[DrupalCampNYC8]]></category>

		<category><![CDATA[theming]]></category>

		<guid isPermaLink="false">http://blog.palantetech.com/?p=214</guid>
		<description><![CDATA[Presented by Theresa Summa (theresaanna) and Seth Cohn (sethcohn)

Looked at a non-Drupal site, cnn.com - cramming as much information on one page as possible - they throw as much on the page as possible to appeal to as many different people as possible
observer.com - a Drupal site that does something very similar
How do you standardize [...]]]></description>
			<content:encoded><![CDATA[<p>Presented by Theresa Summa (theresaanna) and Seth Cohn (sethcohn)</p>
<ul>
<li>Looked at a non-Drupal site, cnn.com - cramming as much information on one page as possible - they throw as much on the page as possible to appeal to as many different people as possible</li>
<li>observer.com - a Drupal site that does something very similar</li>
<li>How do you standardize the display of each piece of content on your site (e.g. pictures in proper sizes, providing all essential data, formatting it)</li>
<li>economist.com and globalpost.com - more content-rich sites built in Drupal</li>
</ul>
<p><strong>Imagefield</strong></p>
<ul>
<li>let users upload images in a CCK node</li>
<li>lets users upload multiple images, sort the list to select which is going to be featured on the front page, the others get inserted into the content appropriately and in a consistent way by Drupal</li>
<li>bulk uploader available</li>
</ul>
<p><strong>Imagecache</strong></p>
<ul>
<li>resizes/crops images on the fly according to your preset dimensions</li>
<li>helps standardize image sizes across the site</li>
<li>Imagecache is included in Drupal 7 core, hurrah!</li>
<li>Imagecache presets stop large images from breaking your layout</li>
</ul>
<p><strong>Quicktabs</strong></p>
<ul>
<li>allows you to combine multiple items into one Quicktabs block with tabs on the top</li>
<li>Nice jQuery action to allow users to switch from one section to the next, loaded all at once, or via Ajax on the fly</li>
<li>Plays nicely with Views, individual Nodes, and multiple Blocks</li>
</ul>
<p><strong>Views Slideshow</strong></p>
<ul>
<li>the recommended solution (&#8221;best of the breed&#8221; according to Seth) for rotating carousel type things</li>
</ul>
<p><strong>Panels</strong></p>
<ul>
<li>Provides a drag and drop interface for units of content on the site to be added, deleted, and arranged in a layout on the fly</li>
<li>&#8220;is all sorts of insane magic&#8221;</li>
<li>pros for Panels - great Views integration, user friendly for non-techie users</li>
<li>Negative - spans between modules and theme layer, so it&#8217;s slower, performance hit on your site, takes a lot of liberties</li>
<li>If you&#8217;re a themer, you might be able to do without panels</li>
</ul>
<p><strong>Composite Layout</strong></p>
<ul>
<li>could be called Panels Light</li>
<li>gives you the Panels approach but does it on a node by node basis - you can choose predesigned layouts on a node by node basis, e.g. a different layout for each individual blog entry, on the fly.</li>
<li>Display Suite is another alternative</li>
</ul>
<p><strong>Vertical Tabs</strong></p>
<ul>
<li>for the content adding and editing side of the site - much easier</li>
<li>divide your node add/edit forms into sections with vertical tabs on the side, collapsed along with a summary of the collapsed settings.</li>
<li>Makes large content types easier for content producers to maintain</li>
<li>Drupal 7 includes this in core, Drupal 6 module mostly works well</li>
</ul>
<p><strong>Arrange Fields</strong></p>
<ul>
<li>http://drupal.org/project/arrange_fields</li>
<li>First commit was 5 weeks ago as of 7/24/10 so is early on, but lots of potential</li>
<li>&#8220;This module lets you drag-and-drop the fields of any CCK content type, <a rel="nofollow" href="http://drupal.org/project/webform">Webform</a>, or  almost any other form in Drupal into the positions you would like for  editing.  This makes it super simple to have forms with inline fields,  which you can change at any point.  Tab indexing is also updated, so no  matter how you arrange the fields, the users can still tab through them  easily.  And, you can now add arbitrary bits of HTML markup&#8211; labels,  images, HR&#8217;s, etc.&#8221;</li>
</ul>
<p><strong>CCK Fieldgroup Tabs</strong></p>
<ul>
<li>separate CCK fields onto a completely separate tab to break down long node creation forms</li>
</ul>
<p><strong>Random Notes</strong></p>
<ul>
<li>check out Nodequeue again for arbitrary lists of nodes, drag and drop</li>
<li>you can feed Nodequeues through views</li>
<li>Imagefield Insert module</li>
<li>get good at Views theming - so much can be done!</li>
<li>My question: what&#8217;s the best practices approach to fine-grain tuning of everything via node-whatever.tpl.php files vs doing as much as possible within the CSS. Answer: there are a lot of different philosophies; have to consider how custom and how specific this content type needs to be displayed. If it can be done through CSS fairly easily, go for it; there&#8217;s a performance hit to loading bunches of node-whatever.tpl.php vs using already loaded &amp; cached CSS. Theresa says her philosophy is to keep the number of files down as much as possible.</li>
<li>Omega theme (Theresa: &#8220;If Zen and 960gs had a baby, it would be Omega&#8221;</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantetech.com/?feed=rss2&amp;p=214</wfw:commentRss>
		</item>
	</channel>
</rss>
