Showing posts with label web. Show all posts
Showing posts with label web. Show all posts

Thursday, March 14, 2013

Draw.io on a Chromebook a real webapp

If you want to peek into the future then have a look at Draw.io running on a Chromebook. I think this is what Google has in mind for ChromeOS.


In the context of ChromeOS, Draw.io is a true 'app', in contrast to some of the "apps" in the Chrome Store that are basically bookmarks for websites. What you're seeing in this screenshot is my screen running the HTML5 based Draw.io app (BTW to the right of it I have the 60 minutes app). This is a web app running as a first-class citizen on a web OS.

Stay tuned, I suspect there's more where this came from.

Thursday, February 28, 2013

What Designers Need to Know about Web (Presentation at Feb 2013 Jamaica Design Association)

Yesterday I presented at the February meeting of the Jamaica Design Association. I'm thankful to +Roger Davis for allowing me the privilege. I was pleased to realize how many persons there had a background or interest in web/programming. At least one third of the room self-identified as web developers/designers.

I sat near +Gebre Wallace who identified himself as an entrepreneur (I know him to be a talented programmer), his company name is "Artuvic Solutions", the company will focus on delivering solutions through problem solving (especially programming) (my words).

Neil A. Buckle, (http://neilabuckle.daportfolio.com) Graphic Designer/Illustrator showcased some of his work. He really has a knack for integrating his illustration skills into his logo designs, and it was clear that he does significant background research around his designs. I've included some of his work below.



He discussed how he deals with clients the most quotable moment was when he spoke about the cliche client that wants a quick logo or letterhead (usually for free): "It's only going to take you five minutes", response "It don't tek me any time because I've been working on this for the past 20 years".

+Howard Forte (http://facebook.com/howard.forte) shared some of his web design work, persons were very vocal about what they liked and didn't like about his work. If you plan to present at the JDA make sure that you have a strong constitution. It's likely that you will be critiqued, but it will be to your benefit. By the end of the presentation they had him on the backfoot. I spoke with him after the meeting, he actually expected harsher criticism :). During the presentation he shared his process which included the use of high fidelity mockups rather than rough wireframes, it feels to me like he's on the learning curve as far as design is concerned but has a good handle on the web technologies, I'm looking forward to seeing what he produces in the next few years.

My presentation focused on raising awareness of modern web concepts, I wanted to keep people in the loop about what are the current trends and practices.

Here's my presentation:


Nanook

The meeting was held at Nanook on Burlington Avenue. Joan Webley of Nanook shared with us about their business. Nanook is a co-working space, with many additional support services, aimed at creatives. It started out servicing music and film persons but is now opening up to designers. For at least the next 6 months Nanook will act as the virtual headquarters for the Jamaica Design Association. Their services include wifi, meeting rooms and physical office space. They also have a cafe and vegetarian restaurant. She also mentioned a potential arrangement that offer members of the JDA a huge discount for use of their facilities.

The Jamaica Design Association

You can find out more about the JDA at their facebook page.




Saturday, January 14, 2012

Dexterity Development Quickstart using zopeskel.dexterity

Update:  You will probably make more progress using this: https://github.com/pigeonflight/stack-python-plone I've blogged about Plone on Dotcloud here.

These are my notes for getting started quickly with dexterity and zopeskel.dexterity.

Rule Number One: Use Unix
This is about getting started quickly. At this time, Windows will slow you down, do this on a server or something, this issue may change in the future at which point I will be able to recommend otherwise, but for now, for the sake of your sanity just use OS X or Linux for development.

Rule Number Two: Use the Unified Installer
The Unified Installer (usually available at http://plone.org/download) provides all the tools you need to get started, everything here assumes that you have successfully installed Plone via the Unified Installer on your platform.

Rule Number Three: 
Install your app and run buildout BEFORE attempting to use localcommands. This is important because additional "goodness" is added to your new package when it is properly installed to your instance.

Step 1 - Install via the UnifiedInstaller then edit the base.cfg and add zopeskel.dexterity and ZopeSkel <= 2.99.

eggs =
    PasteScript
 
    ZopeSkel <= 2.99
             zopeskel.dexterity

Then re-run buildout 
    bin/buildout
 Step 2 - Create your first product
cd src
../bin/zopeskel dexterity my.app

WARNING: localcommands like "addcontent" WILL NOT WORK until you install the app and run buildout!

Step 3 - Install your app by adding it to the buildout.cfg and re-run buildout

Add the following lines to your buildout.cfg
eggs =  
        my.app 
develop =
                 src/my.app

or if you prefer to use mr.developer do something like this:
extensions = mr.developer
auto-checkout = my.app
....
[sources]
my.app = fs  my.app
The re-run buildout
bin/buildout

Step 4 - Add your first contenttype
Note that all localcommands are run from within your new app
cd src/my.app
../../bin/paster addcontent dexterity_content 

You should now be able to follow the instructions at: http://collective-docs.readthedocs.org/en/latest/content/dexterity.html

If you want to know what localcommands are available try running
../../bin/paster addcontent -l
Activate your new Add-on
To see if everything is working launch your instance and visit Site Setup > Add-ons, you should now be able to activate your new add-on.


In the screenshot below, I have already created a content type for my add-on, so after activation I can use the green content bar in my site to add a new example type.




Saturday, November 27, 2010

A Python Webframework for teaching

I'm on the hunt for a Python webframework that I can use to teach web development. The candidates in order of my bias are:
  • Plone
  • Pyramid
  • Pinax/Django
  • Flask
  • Web2py
In general I'm looking for a framework that will reduce distraction and keep newbies focused on the task of web application development. The non-exhaustive criteria are as follows:
  1. Fast iterations - This means make and view changes quickly. In my experience, people learn more effectively if they can see the result of their changes quickly (as close to instantly as possible).
  2. Minimal deployment requirements - I measure this based on expense, initial setup time, deploy/develop cycle.
  3. Minimal context switching - If they can do all their development in one space this will be a good thing.
Other nice to haves:
  • A framework that takes up minimal space. In other words 2MB is better than 20MB, this become especially important if we are providing a local deployment server and we have a class of 30 or more students. Or if we want to take advantage of a free hosting account.
The things that don't matter:
  • Best of class security ()
  • Solves all problems known to man
My Current Perspective

Plone. While I think that Plone is an excellent platform and provides lots of useful application "infrastructure", I don't think it is the best solution for teaching beginners web development. So I've more or less scratched Plone from the list. Besides, Plone is primarily an application and secondarily a framework (I'm sure we can argue about this distinction).

Pyramid. I'm mostly impressed and for web application development (non-content management problems), it's probably where I'm headed. Pyramid is pretty powerful, I've spent some time with it and I definitely see it in my future. That said, I've decided against it because it's too large to run on super cheap/weak shared hosting because of space.

All the solutions, except Plone, claim to run on Google App Engine, that provides a cost effective option for application deployment. At this point I'm strongly leaning to Web2py because the setup and deployment experience appears to be the simplest and the data abstraction layer (DAL) is attractive for portability.

Stop me if you have some convincing arguments regarding alternatives for a 12 week, 36 hour course.

Friday, November 20, 2009

Setting User Passwords - still counter intuitive in Plone 4

This discussion revolves around the question - How can I as an administrator set user passwords?
Let me start by saying, I am an active user of Plone and as far as usability (for administrators and content editors) goes, there are few CMS systems that I've worked with that can hold a candle to Plone. This observation is related to a small issue that I would love to see "fixed".


Before the Rant
Plone 4 is soooo much faster than Plone 3 and I'm loving some of the new usability/convenience features, like the "Image Handling" control panel for managing thumbnail sizes and the newly added ability to specify the group of a newly added user (noted in a screenshot below).
http://img.skitch.com/20091120-1ip2hpdmjh65cnjn65xryp7i4f.jpg
Scenario - Managing Users
When adding a new user, it is not unusual to want to set a user password.
http://img.skitch.com/20091120-83h3gpbb5jqy1dug3y2qnxiss6.jpg

By default, clicking "Site Setup" > "User and Groups" > "Add New User" will present a screen where you can't set a password.
http://img.skitch.com/20091120-jpx88f17ye6wgidb7pyuwerst3.jpg


The solution is to go to "Site Setup" > "Security" and check the "Let users select their own passwords" box.
http://img.skitch.com/20091120-rnrbyrbd1dkhhp5df8af53h57b.jpg

Now when I go back to "User and Groups" > "Add New User", I can now set a password.
http://img.skitch.com/20091120-q5cqwx3xe85wmk93q6jjwd9bwc.jpg
That's just weird!

Possible solution

I think there should be a new option under "Users and Groups". Something like a check box that says "Admin can set passwords".
http://img.skitch.com/20091120-cejtc3u6qu8drp5anuduky8e3f.jpg

In the overall scheme of things this is a tiny issue, but it's worth mentioning and worth fixing.

Tuesday, September 30, 2008

Plone on Amazon EC2

I'm scheduled to give a talk next week on using Plone with Amazon EC2. So I've started a wiki for my talk. The hope is that I'll get feedback from the Plone community and thus make my talk more relevant. So visit the wiki and comment.

Wednesday, September 17, 2008

NGINX entity too large, no more

Sometimes a simple sentence can make a world of difference. It did that for my nginx configuration this morning. Since setting nginx in front of Plone, I've had an "413 entity too large" error for files bigger than 1 MB.

My configuration uses a special conf/proxy.conf file which looks like this::

# proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 30m;
client_body_buffer_size 2m;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 2m;
proxy_buffers 4 1m;
proxy_busy_buffers_size 2m;
proxy_temp_file_write_size 2m;

The wrong way

Previously my 'server' section in my nginx.conf used to look like this:

server {
listen 1.2.3.4;
server_name example.com www.example.com;
location / {
rewrite ^/(.*)$ /VirtualHostBase/http/www.example.com:80/example/plone/VirtualHostRoot/$1;
}
location /VirtualHostBase/ {
proxy_pass http://sharedhosting;
include conf/proxy.conf; #this is apparently a bad place to put this
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

}


The right way

So I read the following comment at the slicehost forums:

"Try moving the directive from inside the location block to just inside the server block."


So now I've moved it to "just inside the server block" so my 'server' section in my nginx.conf now looks like this:

server {
listen 1.2.3.4;
server_name example.com www.example.com;
include conf/proxy.conf; #now it works, phew!
location / {
rewrite ^/(.*)$ /VirtualHostBase/http/www.example.com:80/example/plone/VirtualHostRoot/$1;
}
location /VirtualHostBase/ {
proxy_pass http://sharedhosting;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

}

Tuesday, September 16, 2008

Supervisord and Memmon

Three problems I've had with Plone.
  1. How to start and stop Plone instances
  2. How to deal with Plone instances that run away with memory
  3. How to restart Plone processes that have died
Number 3 was more of a problem a few years ago with older versions of Zope, more recently Zope/Plone seems to run "forever". I used to use DJB daemontools to solve these problems and I still have servers that are "supervised" by daemontools. My problem is that, although daemontools works quite well working with it feels less than organic (read: doesn't play nicely with package managers rpm, apt or easy_install).

The solution

Well I believe that I've found the solution, and it goes by the name of "Supervisord" and the fun slogan "hang on to your processes". As a bonus, it is python based, installs nicely via easy_install and newer versions of ZopeSkel's plone_hosting template now ship with a supervisord configuration.

A recipe
In short, with a few deft strokes of the keyboard, I can have my Plone and supervise it. My recipe goes something like this:

1. Get the latest ZopeSkel

easy_install ZopeSkel

2. Install Plone hosting (I'll call my directory "usain").

paster create -t plone_hosting

3. Add lines similar to this to my crontab (by running crontab -e)

@reboot /home/plone/usain/bin/supervisord -c /home/plone/usain/etc/supervisord.conf

4. For good measure add a line like this to my supervisord.conf file:
   [eventlistener:memmon]
command=%(here)s/../bin/memmon -a 200MB -m bob@example.com
events=TICK_60
If any supervised processes run over 200MB of resident memory usage for more than 60 seconds, supervisor will restart them.

Sign up for my upcoming Plone 5 Book & Video tutorials

plone 5 for newbies book and videos