All Your Favorite Things
Please type your favoite things in the boxes provided
What is your favorite food?
What is your favorite color?
What is your favorite programming language?
What is your favorite animal?
Sumbit


Connecting...
BLE Control for:
Config
BLE names for:
Choose a name and description for your devices:
Back


Lesson 1-2-3: Axioms and Consequences
Now it’s getting serious. We’ve established the axioms of probability, but there is so much more to be done with them! Some of it, sadly, gets a little involved. Luckily, our old friends the coin and the die are back to illustrate the properties we’ll prove here. The Powerpoint version of this presentation can be downloaded here: Presentation 1-2-3 Axioms and Consequences


Viewing PFS Share Logs You can view PFS share logs from the PFS Share Logs page. The PFS share logs contain more detail regarding the initial copy of the share and the last share synchronization. You can use the share log to verify the share. To view the PFS share logs 1. Choose Reports > Branch Services > PFS Shares to display the PFS Shares page. 2. Select a share name. 3. Use the controls to customize the report as described in this table. Control Description Initial Copy Displays details on when the first share synchronization occurred. Last Sync Displays details on when the last share synchronization occurred. Verify Displays a list of differences between the share on the Steelhead appliance and the origin-file server.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/a.20.3D.20b.20.E<IP_ADDRESS>b.20.3D.20a.html ---
What is the fastest way to prove a = b ↔ b = a?
a = b ↔ b = a
Try by split ; cc
by split ; cc
eq_comm
Last updated: Apr 24 2020 at 19:02 UTC


City of Los Angeles Marathon
Los Angeles CA/USA
Web Site: www.lamarathon.com
Race Winners
(34 runnings)
2:24:13a 2:33:50a 2:34:23a 2:30:40a 2:34:10a 2:27:37a 2:26:08a 2:25:39a 2:26:34a 2:25:38a 2:25:59 2:29:09a 04 Mar
2007
2:17:14a
2:37:54a
19 Mar
2006
2:08:40
2:25:10
06 Mar
2005
2:09:35
2:26:11
07 Mar
2004
2:13:41
2:30:17
02 Mar
2003
2:09:52
2:29:40
03 Mar
2002
2:10:27
2:28:49
04 Mar
2001
2:13:13
2:36:58
05 Mar
2000
2:11:55
2:33:33
14 Mar
1999
2:09:25
2:30:32
29 Mar
1998
2:11:21
2:34:03
02 Mar
1997
2:14:16
2:33:50
03 Mar
1996
2:13:23
2:30:30
05 Mar
1995
2:11:39
2:29:48
06 Mar
1994
2:12:13
2:28:12
07 Mar
1993
2:14:29
2:39:49
01 Mar
1992
2:12:29
2:26:23
03 Mar 1991
2:10:29
2:29:38
04 Mar
1990
2:11:54
2:32:25
05 Mar
1989
2:13:01
2:34:42
06 Mar
1988
2:10:19
2:36:11
01 Mar
1987
2:13:08
2:35:24
09 Mar
1986
2:12:59
2:36:27
Notes: In 1997 Nadezhda Ilyina (RUS) crossed the finish line first, but was disqualified for cutting the course. The 2004-2016 races have had a separate early start for the elite women as a "challenge"
for the first man or woman to cross the finish line. The women's winners
listed are for the elite start. The 2016 race was held in February in conjunction with US Olympic Trials weekend. In 2007 the race changed from a loop to a point-to-point course, starting at Universal City and finishing in downtown Los Angeles. In 2009 the course returned to a loop route. From 2010 a "Stadium to the Sea" course has been used, starting at Dodger Stadium and finishing at Santa Monica. The race is currently known as Skechers Performance Los Angeles Marathon.
24 Mar
2019
2:11:47a
Elisha Barno Kiprop-2
Askale Merachi (ETH)
18 Mar
2018
2:11:47a
Weldon Kirui-2
Sule Utura Gedo (ETH)
19 Mar
2017
2:11:52a
Elisha Barno Kiprop (KEN)
Helen Chepkurgat (KEN)
14 Feb
2016
2:13:06a
Weldon Kirui (KEN)
Nataliya Lehonikova (UKR)
15 Mar
2015
2:10:36a
Daniel Kiprop Limo (KEN) (nc)
Ogla Kimaiyo Cherono (KEN) (nc)
09 Mar
2014
2:10:37a
Gebo Burka Gameda (ETH)
Amane Gobena Gemeda (ETH)
17 Mar
2013
2:09:44a
Eric Monyenye Mose (KEN)
Aleksandra Duliba (BLR)
18 Mar
2012
2:12:12a
Simon Njoroge Kariuki (KEN)
Fatuma Sado Dergo (ETH)
20 Mar
2011
2:06:35a
Markos Geneti (ETH)
Bizunesh Deba (ETH)
21 Mar
2010
2:09:19a
Wesley Korir-2
Edna Kiplagat (KEN)
25 May
2009
2:08:24
Wesley Korir (KEN)
Tatyana Petrova (RUS)
02 Mar
2008
2:13:50a
Laban Rotich (KEN)
Tatyana Arysova (RUS)
Fred Mogaka (KEN)
Ramilya Burangulova (RUS)
Benson Cherono (KEN)
Lidiya Grigoryeva (RUS)
Mark Saina (KEN)
Lyubov Denisova-2
David Kiptoo (KEN)
Tatyana Pozdniakova-2
Mark Yatich (KEN)
Tatyana Pozdniakova (UKR)
Stephen Ndungu-2
Lyubov Denisova (RUS)
Stephen Ndungu (KEN)
Elena Paramonova (RUS)
Benson Mutisya (KEN)
Jane Salumae (EST)
Simon Bor (KEN)
Irina Bogacheva (KGZ)
Zebedayo Bayo (TAN)
Lornah Kiplagat-2
El-Maati Chaham (MAR)
Lornah Kiplagat (KEN)
Jose Luis Molina (CRC)
Lyubov Klochko-2
Rolando Vera (ECU)
Nadia Prasad (NCL)
Paul Pilkington (UT/USA) (nc)
Olga Appell (NM/USA)
Joseildo Rocha (BRA)
Lyubov Klochko (UKR)
John Treacy (IRL)
Madina Biktagirova (RUS)
Mark Plaatges (RSA)
Cathy O'Brien (NH/USA)
Pedro Ortiz (COL)
Julie Isphording (OH/USA)
Art Boileau-2
Zoya Ivanova (KZK)
Martin Mondragon (MEX)
Blanca Jaime (MEX)
Art Boileau (CAN)
Nancy Ditz-2
Ric Sayre (OR/USA)
Nancy Ditz (CA/USA)
(nc) => national champion
2015 Jared Ward was the USA champion (3rd place,
2:12:56)
2015 Blake Russell was the USA champion (3rd place, 2:34:57)
Most Wins
(1982-date)
Men
2
Art Boileau (CAN)
1987,1989
.
Stephen Ndungu (KEN)
2001-02
Wesley Korir (KEN)
2009-10
Weldon Kirui (KEN)
2016,2018
Elisha Barno Kiprop (KEN)
2017,2019
Women
2
Nancy Ditz (CA/USA)
1986-87
.
Lyubov Klochko (UKR)
1993,1996
.
Lornah Kiplagat (KEN)
1997-98
.
Tatyana Pozdniakova (UKR)
2003-04
.
Lyubov Denisova (RUS)
2002.2005
Prize Money
(ADR qualified runners)
Year Men Women Total 2017 $50,000 $50,000 $100,000 2016 50,000 50,000 100,000 2015 130,000 130,000 260,000 2014 55,000 105,000 160,000 2013 55,000 105,000 160,000 2012 55,000 155,000 210,000 2011 155,000 55,000 210,000 2010 50,000 180,000 230,000 2009 240,000 93,000 333,000 2008 50,000 150,000 200,000 .... 2006 164,250 269,250 433,500 2005 182,225 124,250 306,475 2004 74,250 124,250 198,500 2003 82,750 64,875 147,625 2002 65,375 66,875 132,250 2001 75,000 75,000 150,000 2000 75,000 75,000 150,000 1999 100,000 80,000 180,000 1998 75,000 75,000 150,000 1997 33,500 33,500 67,000 1996 33,500 33,500 67,000 1995 37,500 37,500 75,000 1994 59,500 37,500 97,000 1993 32,500 25,000 57,500 1992 91,500 182,500 274,000 1991 175,500 181,750 357,250 1990 80,500 78,000 158,500 1989 69,250 56,000 125,250 1988 55,200 52,500 107,700 1987 42,500 42,500 85,000 1986 25,000 25,000 50,000 Sums $2,519,800 $2,813,000 $5,332,800
Race Time Bias (sec/km)
Year Men Women
2017 -1.2 n/c
2016 +0.5 n/c
2015 +1.4 +3.1
2014 -1.3 n/c
....
2011 -1.1 n/c
2010 +0.5 n/c
2009 +0.4 -2.4
2008 -0.7 n/c
....
2006 -0.9 -0.5
....
2004 +1.7 n/c
2003 -0.2 -0.6
2002 +0.3 -1.8
2001 +2.8 n/c
....
1999 +2.4 +1.1
1998 -1.6 +5.4
1997 n/c +5.1
1996 -0.7 +3.1
1995 +0.9 n/c
1994 -0.5 -0.1
....
1992 -0.2 -2.9
1991 -0.0 +2.5
1990 -0.1 -2.5
1989 +1.4 +7.3
1988 -0.9 -2.0
1987 +0.3 +3.6
1986 +0.7 n/c
Avgs +0.2 +1.0
Competitive Level (1990-date)
Year Men Women 2017<PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER> 427 n/c 2006<PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER> n/c 383 1996<PHONE_NUMBER><PHONE_NUMBER><PHONE_NUMBER> 593 n/c 1992<PHONE_NUMBER> 608 735
Quality Performances through 2019
Men <2:07 1 <2:08 2 <2:09 3 <2:10 14 <2:11 34 <2:12 54 <2:13 80 <2:14 114 <2:15 157 Women <2:26 7 <2:28 18 <2:30 35 <2:32 54 <2:34 80 <2:36 123 <2:38 169 <2:40 186
Finishers
Year Men+Women 2018 19547 2017 18990 2016 20623 2015 21924 2014 21516 2013 19955 2012 18729 2011 19902 2010 22580 2009 14240 2008 17356 2007 20230 2006 20335 2005 20606 2004 19533 2003 17097 2002 18900 2001 16221 2000 17164 1999 16827 1998 15603 1997 15967 1996 16180 1995 15186 1994 14840 1993 14546 1992 15928 1991 14531 1990 14115 1989 13398 1988 12759 1987 10330 1986 7553 Sum 524044
Los Angeles Lite Marathon
Los Angeles CA/USA
Race Winners
(3 runnings)
27 Mar
1983
2:22:18
2:55:50
28 Mar
1982
2:16:33a
2:50:41a
29 Mar
1981
2:13:14.8
2:39:32.7
Notes: 1981 was the inaugural year. The 1981 race was known as the Jordache Marathon and had two sections, a professional
section with prize money and an amateur section without prize money. Winners are shown for the professional division.
The 1983 race was misdirected and then compensated by extending the course to insure that all runners covered at
least a marathon distance (men's winner Kilili ran 42,904 m).
Simon Kilili (KEN)
Sue Petersen-2
Steven Brown (PA/USA)
Sue Petersen (CA/USA)
Tom Fleming (NJ/USA)
Cindy Dalrymple (HI/USA)
Municipal Games Marathon
Los Angeles CA/USA
Race Winners
(9 runnings, 8 runnings as a marathon)
18 Mar
1978
2:30:12
2:58:08
1977
2:29:
---
20 Mar
1976
2:25:31
3:21:15
22 Mar
1975
2:26:46.5
3:06:57
06 Apr
1974
2:24:19
3:26:01
03 Mar
1973
2:28:48
4:32:31
04 Mar
1972
2:35:09.2
4:05:25
06 Mar
1971
2:24:28
Notes: 1970 was the inaugural year. The 1970 race distance was 25 miles. The 1973 and subsequent races were known as the Los Angeles Marathon. The 1971
race was known as the Griffith Park Marathon and was held at the same time as the Municipal Games. The race was
organized by the Municipal Sports Section of the Los Angeles Recreation and Parks department, with the sponsorship
of the Japanese American Optimist Club and the LAPD Revolver and Athletic Club.
The 1978 race was known as the Los Angeles Police Marathon.
Ken Moffitt-3
Sue Petersen (CA/USA)
Ken Moffitt-2
n/a
Carl Swift (CA/USA)
Susan Kieffer (CA/USA)
Ken Moffitt (CA/USA)
Marie Albert (16,CA/USA)
William Scobey (CA/USA)
Nicki Hobson (CA/USA)
Douglas Schmenk-2
Gloria Bassler (CA/USA)
Tulley Mann (CA/USA)
Carolyn Miyashiro (USA)
Douglas Schmenk (CA/USA)
1970
2:30:45
Mike Stamm (USA)
Los Angeles Harbor Marathon
San Pedro CA/USA
Race Winners
(4 runnings)
18 Oct
1981
---
---
19 Oct
1980
2:30:35
2:58:16
07
Oct 1979
2:22:52 3:20:53 01
Oct 1978
2:34:18 2:49:06
Notes: 1978 was the inaugural year.
n/a
n/a
William Britten (CAN)
Sally Edwards (CA/USA)
Bill McDermott-2
Kathy Martin (CA/USA)
Bill McDermott (CA/USA)
Sue Petersen (CA/USA)
Other Marathons held in Los Angeles
Several other marathons have been held in the vicinity of Los Angeles but
these are believed to have been held as individual races and do not have more than one running. These include the
20th Century Fox Women's Marathon (03 Nov 1979), the Los Angeles Marathon (19 Feb 1984), the Hang Ten Marathon
(26 May 1979), and the Marathon of the Times (22 Jun 1974).. The Palos
Verdes Marathon, the Western
Hemisphere Marathon, the Santa Monica Marathon, and the Rose Bowl Marathon
have also been held in Los Angeles county.
Last Updated on
25 Mar 2019
Contributor: Jack Leydig (23)


FOSDEM 2023
After 2 years, FOSDEM is finally back in ULB. So has this biggest Open-Source conference changed?
Friday - Fringe events
I arrived early on Friday early morning but it seems FOSDEM has already started! There are a lot of open-source events - which are called fringe events - already happening the day before FOSDEM. It is easy to see why - there will be several thousand folks who are interested in open-source software being there.
Tried to go to @chaosscon EU but accidentally went to a session next door about #SPDX Python tool and #OPOSSUM tool pic.twitter.com/qXdZsg2g9r
— Cheuk Ting Ho (@cheukting_ho) February 3, 2023
Originally, I planned to attend CHAOSS con, which is a conference that my colleague Dave recommended. So I went to Bedford hotel, where the conference is after arriving in Brussels. However, I went to the wrong room and accidentally attended a workshop and licensing and security. The organisers kindly welcome me in and I sit for a talk by James. It is an interesting presentation.
Thanks @purpleidea for the presentation about Yes I Scan pic.twitter.com/zY9ntsXH6h
— Cheuk Ting Ho (@cheukting_ho) February 3, 2023
After that, I got the message about which room the CHAOSS con is, so I went there. I met my friend Lorna and Inessa there. I am so glad to learnt something about CHAOSS project.
Finally able to get to @chaosscon eu and it’s exciting pic.twitter.com/7ZanyYBkNK
— Cheuk Ting Ho (@cheukting_ho) February 3, 2023
When it’s lunchtime, we head to one of my favourite restaurants for lunch. We exchange information about what is going to happen on Saturday and Sunday in FOSDEM so I can get myself prepare to do what I want to do. FOSDEM is so big that if you do not have a plan, you will be overwhelmed.
It was great meeting @InessaPawson and @lornajane at the @chaosscon EU pic.twitter.com/hAa7zLmham
— Cheuk Ting Ho (@cheukting_ho) February 3, 2023
After lunch, I head to check in at the hotel and take a short break. After that, I headed to the Python sprint meet-up organised by local organiser Hugo, who is also the host of the Python Dev Room this year.
Spent the afternoon at Python sprint before #FOSDEM2023 thanks @HugoHerter for organizing and @europythons for sponsoring pic.twitter.com/NhcL8E7fFA
— Cheuk Ting Ho (@cheukting_ho) February 3, 2023
When I arrived there, there are not many folks, I guess there are so many things going on people like me just hopped in and out of different events. However, I was lucky to meet one of the organisers from Tai Wan, Peter, and happen to know that he will be having dinner with my friend Sammy, organiser of PyCon Hong Kong! So I decided to tag along and have dinner with the Tai Wan Hong Kong group. It was fun!
It was a great evening with @singing_li @sammyfung and the @PyConTW folks pic.twitter.com/hHO4zxRLkY
— Cheuk Ting Ho (@cheukting_ho) February 3, 2023
Saturday - Day 1
It is exciting to come back to FOSDEM after so many years. I decided to volunteer at the cloakroom in the morning as there will be many people arriving and there will be many suitcases, and in our case because of the rain, coats to be stored so folks attending can enjoy the conference. During my shift, I met many people I know - including friends that I made at PyCon Italy. I am glad that they came to FOSDEM.
After my shift, I am finally free to explore. I went to say hi to my friends’ booth, they gave me a lot of swags, I am glad that I did bring a bag. I also came across a lot of promotions about other interesting events. I bought a lot of hackable gadgets from various booths as well.
#FOSDEM2023 day 1, I had so much fun! Can’t wait for tomorrow! See you there pic.twitter.com/KocDcdLZwW
— Cheuk Ting Ho (@cheukting_ho) February 4, 2023
I also bump into an old friend Gerben who I met years ago at a Mozilla event in Berlin. We took a picture at one of those vintage photo booths together and I still keep our pictures.
When is the last time you got hugged by your database? @PostgreSQL at #FOSDEM2023 pic.twitter.com/zL23yelxeW
— Cheuk Ting Ho (@cheukting_ho) February 4, 2023
I had a shorter day as there is so many exciting things going on and I got tired before the event finished. I didn’t go to any Dev Rooms as the ones that I am interested in will be on Sunday.
Sunday - Day 2
When is the last time you got hugged by your database? @PostgreSQL at #FOSDEM2023 pic.twitter.com/zL23yelxeW
— Cheuk Ting Ho (@cheukting_ho) February 4, 2023
For day 2, I planned to split it between Community Dev Room and Python Dev Room. I arrived early in the Community Dev Room to attend the first talk by Matt. It is very useful for us as it is about building external evangelists. Then there are talks followed by my friend Floord and Inessa. After that, I head out with Floord and make some new friends - including Faruk whose team developed a lot of cross-platform open-source software for scientists.
1st talk at #CommunityDevRoom is Matt’s talk that is DevRel / community relevant! Good one 👍🏻 #FOSDEM2023 pic.twitter.com/hbERK0Az12
— Cheuk Ting Ho (@cheukting_ho) February 5, 2023
After that, I scout for the location of the Python Dev Room, as I don’t want to be unable to find it when it’s time for my talk. Outside of the Python Dev Room, I met Anastasia, who is another speaker in the same room. But it’s not time for her talk yet, so, joined by her colleague, we head to the food truck to find food for lunch.
Lucky to be in the @PythonDevRoom for @anastasiatymo ‘s talk #FOSDEM2023 pic.twitter.com/IM8GEaE8Yh
— Cheuk Ting Ho (@cheukting_ho) February 5, 2023
After that, we head back for her talk. Then I took a short break to prepare for mine. My talk is the last in the Dev Room and it’s challenging - I am already very exhausted by everything in FOSDEM. But I managed and some folks came to me after the talk to ask more questions and I got connected to a few of them on LinkedIn. I hope they will try our PyScript and provide valuable feedback for us.
Will #PyScript replace #Django?
— Denny Biasiolli<EMAIL_ADDRESS>(@DennyBiasiolli) February 5, 2023
Let's hope not! @cheukting_ho at #FOSDEM2023 pic.twitter.com/dEDXZKe8c1
I met Victor at the Python Dev Room. He has been a friend for years and during the pandemic, we only chat occasionally online. I am so glad to meet him in person. Later in the day, we have dinner together with other friends including the core maintainer team of Mecrial. Some of them will be at PyCon FR in 2 weeks and I am sure we will have more time to chat.
Last social drink at #FOSDEM2023 with some of my favourite people ❤ until we meet next time 😊 pic.twitter.com/IJtYMU5UQp
— Cheuk Ting Ho (@cheukting_ho) February 5, 2023
And that concludes FOSDEM this year. It is officially a 2-day event but because of its scale of it, it feels like a week-long event. This is an event that I am so glad to be a part of because that is where everybody goes and it is where you can meet anyone.
You can also catch up on my talk online:


What can you document?
Variables
Placeholders
Functions
Mixins
Syntax
Documentation is built from inline annotations as comments in your Sass files
Comments must begin with three forward slashes ( /// )
Annotation type is denoted with @annotation-type (e.g. @group), except for description
File-level annotations can be defined with bookending four forward slashes ( //// )
Variables
/// Variable description.
/// @type variable-type
$variableName: variableValue;
/// Map description.
/// @type Map
/// @prop {prop-type} prop1 [defaultValue]
/// @prop {prop-type} prop2 [defaultValue]
$mapName: (
prop1: defaultValue,
prop2: defaultValue
);
Placeholders
/// Placeholder description.
%placeholder {
property: value;
}
Functions
/// Function description.
/// @param {Param type} $paramName - Parameter description.
/// @return {Return type} Return description.
/// @example
/// functionName(paramValue)
/// // returns comment
@function functionName($paramName) {
@return returnValue;
}
Mixins
/// Mixin description.
/// @param {Param type} $paramName - Parameter description.
/// @example
/// mixinName(paramValue)
@mixin mixinName($paramName) {
...
}
Additional Annotations
@group - Allows for high-level grouping of documented items.
@link - A link related to the documented item, e.g. a gist, Stack Overflow post, or blog post.
@access - Define as public or private. You can restrict which access levels get compiled and output in the docs.
Full list available on the Sassdoc site
Compiling - Grunt
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
sassdoc: {
default: {
src: './src/css/**/*.scss',
options: {
dest: 'documentation/sassdoc-grunt',
theme: './sassdoc-theme-example'
}
}
}
});
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', ['sassdoc']);
};
NOTE: requires Grunt CLI, Grunt, and Grunt Sassdoc
Compiling - Gulp
var gulp = require('gulp');
var sassdoc = require('sassdoc');
gulp.task('sassdoc', function() {
return gulp.src('./src/css/**/*.scss')
.pipe(sassdoc({
dest: './documentation/sassdoc-gulp'
}));
});
gulp.task('default', ['sassdoc']);
NOTE: requires Gulp and Sassdoc
GOTCHA: make sure to pipe Sassdoc into your stream before compiling Sass code, if you put them in a single stream
Theming
maximum flexibility, maximum setup
generates the blank theme with a scaffolded Gulp or Grunt build process and some basic markup; no CSS. Maximum flexibility, slightly less setup
a great starting point that can be customized. Less flexibility, very little setup.
Example Default Theme
Editing the Default Theme
Open a console and navigate to your Sassdoc theme directory.
Execute npm install to get its dependencies.
Edit the markup ( /views ), CSS ( /scss ), and assets ( /assets ) as desired.
Execute the "make" command to compile the HTML, CSS, and JavaScript.
Execute your build script to apply the new theme to your Sassdocs.
NOTE: the color scheme is located in /scss/utils/_variables.scss
Feature Wishlist
Better documentation of maps as parameters (#386 )
Easier theming
Possibly happening as part of #272
Pass in color scheme as parameters
Add a logo to the default theme with a parameterized option
More granular control over sorting
Style Guides
Why a Style Guide?
There are a number of benefits. Here are just a few:
Single point of reference for testing site components across breakpoints and visual regressions
Documents the lexicon for site components
Provides a deliverable visual reference for both clients and developers
Makes for a good handoff from front-end to back-end
Makes for a good on-boarding document when bringing on new team members
Our Criteria
Easy enough it’ll be used
Fits our existing workflow
Works with our existing build pipeline
Valuable as a client deliverable
Candidates
StyleDown
StyleDocco
Holograms
KSS
SourceJS
Others…so many others
This guy’s on to something
Source
We went with StyleDown.
Obviously.
Criterion #1: It’s easy
✓ StyleDown’s pretty easy
It parses code comments from inside your stylesheets
Requires at minimum just a title for whatever you’re documenting
Everything else is optional
Can parse example markup in either Jade or Markdown…
…which means it also parses HTML, making copy and paste easy
Criterion #2: Fits our workflow
✓ StyleDown feels like how we work
It’s all inline, so you can document (or update documentation) as you work
Since we’re already writing comments in our partials as we go, it’s just a matter of getting the syntax down
Comment examples:
/***
* Buttons:
*/
/**
* Default Button:
* `%button-config`
* Sets up default buttons styles. Applied to `button` and `.btn`.
* Additional button styles extend this base.
*
* @example
*
*/
Let’s talk config!
Again, all inside a comment block
Can be a Markdown or Sass/CSS file
Can be anywhere in your project
# Styleguide Options is required at start of block
### Head & ### Body signal—wait for it—the head and body
You can link any assets you need (paths relative to output HTML)
Must include a div with an sg-content="sg-content" attribute.
/**
* # Styleguide options
*
* ### Head
*
* meta(name="viewport" content="width=device-width, initial-scale=1")
* link(rel="stylesheet" href="../../Assets/dist/css/style.css")
* link(rel='stylesheet' href='https://cdn.rawgit.com/styledown/styledown/v1.0.0/data/styledown.css')
* link(rel="stylesheet" href="../../Assets/dist/css/style-guide.css")
* link(rel='icon' type='image/png' href='../../Assets/dist/img/content/favicon.png')
* script(src='../../Assets/dist/js/head.js')
* link(rel="stylesheet" href="http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,700")
* script(src='https://cdn.rawgit.com/styledown/styledown/v1.0.0/data/styledown.js')
*
* ### Body
*
* section.wrapper
* div.row
* div.eight.columns.centered
* a(href='../../index.php')
* img(src='../../Assets/dist/img/content/logo-placeholder.png'<EMAIL_ADDRESS>2x').img-align-center
*
* div.row
* div#styleguides(sg-content)
*
* script(src='../../Assets/dist/js/main.js')
* script(src='../../Assets/dist/js/style-guide.js')
*/
Criterion #3: Fits our build
✓ StyleDown plays (pretty) well with Gulp
It’s written in Node, so, you know
The particular Gulp package we chose—gulp-styledown—is at version 0.0.2 and has all of 9 commits over about one week some time last summer, but we were choosing from a field of one, so ¯\_(ツ)_/¯
(It totally works, pinkie swear)
Gulp Example
var gulp = require('gulp');
var styledown = require('gulp-styledown');
gulp.task('styledown', function() {
return gulp.src(['./src/css/style.scss', './src/css/**/*.scss'])
.pipe(styledown({
config: './css/style-guide.scss',
filename: '../../documentation/style-guide/index.html'
})));
});
gulp.task('default', ['styledown']);
NOTE: requires Gulp and Gulp Styledown
Grunt Example
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
styledown: {
build: {
files: {
'./documentation/style-guide/grunt.html': ['src/css/style.scss', 'src/css/modules/_buttons.scss']
},
options: {
config: 'src/css/style-guide.scss'
}
},
}
});
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', ['styledown']);
};
NOTE: requires Grunt CLI, Grunt, and Grunt Styledown
Criterion #4: Valuable Deliverable
✓ StyleDown makes a pretty & handy document
Let’s talk about theming!
Includes a pretty basic stylesheet that looks good out of the box
Customizing is super easy: just link up a stylesheet in your config and you’re set
Since your config can be anything, we’ve chosen to make it a Sass file and keep our custom styles there
Example base theme
Styledown Wishlist
Ordering of your docs (#11 )
Dynamic table of contents
Update the title tag (#2 ) — this is available in the Grunt package