getlektor.com_atom.xml - sfeed_tests - sfeed tests and RSS and Atom files
(HTM) git clone git://git.codemadness.org/sfeed_tests
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
getlektor.com_atom.xml (37800B)
---
1 <?xml version="1.0" encoding="utf-8"?>
2 <feed xmlns="http://www.w3.org/2005/Atom">
3 <title type="text">The Transcript</title>
4 <id>urn:uuid:68a046f3-78ea-3cf1-8a20-d5e5861256f3</id>
5 <updated>2020-08-20T00:00:00Z</updated>
6 <link href="https://www.getlektor.com/blog/" />
7 <link href="https://www.getlektor.com/blog/feed.xml" rel="self" />
8 <author>
9 <name></name>
10 </author>
11 <subtitle type="text">Lektor's blog</subtitle>
12 <generator uri="https://github.com/ajdavis/lektor-atom" version="0.3.1">Lektor Atom Plugin</generator>
13 <entry xml:base="https://www.getlektor.com/blog/2020/8/lektor-32-released/">
14 <title type="text">Lektor 3.2 Released</title>
15 <id>urn:uuid:5837dc8f-8400-3c64-89b6-40311cdf9085</id>
16 <updated>2020-08-20T00:00:00Z</updated>
17 <link href="https://www.getlektor.com/blog/2020/8/lektor-32-released/" />
18 <author>
19 <name>Andreas Runfalk</name>
20 </author>
21 <content type="html">
22 <div class="page-banner page-banner-500" style="background-image: url(/blog/2020/8/lektor-32-released/coffee-ground-1171092-1599x1066.jpg)"></div>
23
24 <div class="text-block text-block-default">
25 <p>It's been a long time in the making, and on behalf of the Lektor Team I'm happy to introduce the 3.2 release of Lektor. As some of you may have noticed the development pace of Lektor has slowed down over the past two years. Those of you who have had open PRs for a long time, sorry for the delay and we'll try to do better going forward!</p>
26 <p>Recently we've made a big push to bring the project back on its feet. Our focus besides merging PRs and fixing various issues has been to streamline the CI and release process. The biggest change was the <a href="https://github.com/lektor/lektor/pull/734">switch from Travis and Appveyor to GitHub actions</a> which should make the release process a lot easier going forward.</p>
27 <p>We have also promoted <a href="https://github.com/lektor/lektor-tags">lektor-tags</a> and <a href="https://github.com/lektor/lektor-atom">lektor-atom</a> to official plugins. This represents our commitment to keep them up to date. We have also deployed a <a href="https://github.com/lektor/lektor-atom/pull/28">new CI workflow</a> that can publish new versions using tags. This will be something all plugin authors can use in their own projects. Thank you <a href="https://github.com/goanpeca">Gonzalo Peña-Castellanos</a> for spearheading the CI improvements.</p>
28 <p>A big shoutout to all the contributors who help make Lektor awesome!</p>
29 <div class="admonition admonition-info"><p>Since Python 2 is EOL and its <a href="https://blog.python.org/2020/04/python-2718-last-release-of-python-2.html">final release ever</a> happened on April 20th, 2020, this will be the last Lektor release with Python 2 support. This is also the last release supporting Python 3.5 since it is <a href="https://devguide.python.org/#status-of-python-branches">very near EOL</a> and we want to have opportunity to work with several benefits of Python 3.6 going forward.</p></div><div class="admonition admonition-warning"><p>The slugify change may mean that your URLs will change when you update to Lektor 3.2. This could lead to broken links from external sites such as search engines. This can be fixed by providing a custom slug for the necessary pages.</p></div><h1 id="changelog">Changelog</h1><h2 id="bugfixes">Bugfixes</h2><ul>
30 <li>Fix to correctly calculate relative urls from slugs that contain dots. (thank you <a href="https://github.com/f-seven">f-seven</a>)</li>
31 <li>Fix to allow negative integers in integer fields in the admin UI. (thank you <a href="https://github.com/davidferguson">David Ferguson</a>)</li>
32 <li>Fix <code>lektor plugins reinstall</code> triggered <code>on_setup_env</code> instead of just reinstalling plugins. (thank you <a href="https://github.com/germn">Mikhail Gerasimov</a>)</li>
33 <li>Fix failing dimensions detection for some JPEG thumbnails. (thank you <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
34 <li>Fix mismatch between reported thumbnail size and on-disk image when both width &amp; height are provided. (thank you <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
35 <li>Return JPEG dimensions swapped when EXIF rotation is in effect. (thank you <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
36 <li>Fix off-by-1px rounding discrepancy between reported thumbnail dimensions and actual dimensions. (thank you <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
37 <li>Fix off-by-one error in pagination's iter_pages in the interpretation of the right_current argument, and adding an appropriate trailing <code>None</code> for some uses. (thank you <a href="https://github.com/dairiki">Jeff Dairiki</a>)</li>
38 </ul>
39 <h2 id="new-features">New features</h2><ul>
40 <li>Added the ability to <a href="/docs/templates/videoops/">generate video thumbnails</a> with ffmpeg. (thank you <a href="https://github.com/runfalk">Andreas Runfalk</a>)</li>
41 </ul>
42 <h2 id="improvements">Improvements</h2><ul>
43 <li>Added support for setting the output_path in the project file. (thank you <a href="https://github.com/georgeyk">George Kussumoto</a>)</li>
44 <li>Added support for deleting and excluding files for the rsync deployment publisher. (thank you <a href="https://github.com/m-lib">m-lib</a>)</li>
45 <li>Several modernization and performance improvements to the admin UI (thank you <a href="https://github.com/yagebu">Jakob Schnitzer</a>)</li>
46 <li>Improved speed of source info updates. (thank you <a href="https://github.com/dairiki">Jeff Dairiki</a>)</li>
47 <li>Set colorspace to sRGB for thumbnails. This should result in significantly reduced thumbnail file size when the source image uses a more exotic colorspace. (thank you <a href="https://github.com/skorokithakis">Stavros Korokithakis</a>)</li>
48 <li>Now stripping profiles and comments from thumbnails, for even smaller file size. (thank you <a href="https://github.com/skorokithakis">Stavros Korokithakis</a>)</li>
49 <li>Improved speed of flow rendering in the admin UI. (thank you <a href="https://github.com/davidferguson">David Ferguson</a>)</li>
50 <li>Improved image-heavy build speeds by reducing the amount of data extracted from EXIFs. (thank you <a href="https://github.com/tgpfeiffer">Tobias Pfeiffer</a>)</li>
51 <li>Added the ability to collapse flow elements in the admin UI. (thank you <a href="https://github.com/jtraub91">Jason Traub</a>)</li>
52 <li>Now <code>extra_flags</code> is passed to all plugin events. (thank you <a href="https://github.com/nixjdm">Joseph Nix</a>)</li>
53 <li>Extra flags can now be passed to the <code>clean</code> and <code>dev shell</code> CLI commands. (thank you <a href="https://github.com/nixjdm">Joseph Nix</a>)</li>
54 <li>Deprecate the <code>crop</code> thumbnail argument in favor of the new <code>mode</code> argument, which can be one of <code>fit</code> (the default), <code>crop</code>, or <code>stretch</code>. (thank you <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
55 <li><code>upscale=False</code> for thumbnails can now prevent up scaling. (thank you <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
56 <li>Added a new CLI command <code>lektor dev new-theme</code>. (thank you <a href="https://github.com/nixjdm">Joseph Nix</a>)</li>
57 <li>Made admin use full UTF-8 version of RobotoSlab. Fixes missing glyphs for some languages (thank you <a href="https://github.com/yagebu">Jakob Schnitzer</a>)</li>
58 <li>Bumped minimum Jinja2 version to 2.11 (thank you <a href="https://github.com/nixjdm">Joseph Nix</a>)</li>
59 <li>Bumped filetype dependency to 1.0.7 because of API changes (thank you <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
60 <li>Relative urls are now as short as possible. (thank you <a href="https://github.com/relikd">Oleg Geier</a> and <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
61 <li>Automatically include setup.cfg configured for universal wheels when creating plugins (thank you <a href="https://github.com/georgeyk">George Kussumoto</a>)</li>
62 <li>Changed default slug creation to use <a href="https://github.com/un33k/python-slugify">python-slugify</a>. This should mean greater language support, but this may produce slightly different results than before for some users (thank you <a href="https://github.com/nixjdm">Joseph Nix</a> and <a href="https://github.com/xlotlu">Ionuț Ciocîrlan</a>)</li>
63 </ul>
64
65 </div></content>
66 </entry>
67 <entry xml:base="https://www.getlektor.com/blog/2018/5/plugin-play/">
68 <title type="text">Plugin Play</title>
69 <id>urn:uuid:183ff07b-516c-34eb-a0a3-885ac82eca81</id>
70 <updated>2018-05-15T00:00:00Z</updated>
71 <link href="https://www.getlektor.com/blog/2018/5/plugin-play/" />
72 <author>
73 <name>Joseph Nix</name>
74 </author>
75 <content type="html">
76 <div class="page-banner page-banner-300" style="background-image: url(/blog/2018/5/plugin-play/spices.jpg)"></div>
77
78 <div class="text-block text-block-default">
79 <h2 id="get-lektor-updates">Get Lektor Updates</h2><p>This site just updated the way it lists available plugins! Now <a href="https://www.getlektor.com/plugins/">https://www.getlektor.com/plugins/</a> gives you a list of all known Lektor plugins in a much more interactive and informative way. This will hopefully make it much easier for you to discover plugins that are relevant to your project and your needs. If you are a plugin developer, this should also help you find examples from existing plugins to help you learn how to interact better with Lektor's plugin system.</p>
80 <h3 id="categories">Categories</h3><p>Each plugin now falls within one of a few broad categories to help quickly narrow your search for what you're looking for.</p>
81 <h3 id="details">Details</h3><p>Each plugin also now has its own dedicated page. On this page you can see the entire README for a plugin, in beautiful rendered Markdown or reStructuredText, GitHub statistics, authorship information, and tags. This page should give you all the information you need to be able to use the plugin, or to decide if it's what you're looking for as a guide to building your own.</p>
82 <h3 id="tags">Tags</h3><p>Plugins are tagged with specific key words or phrases that describe what they are used for and how they work. All of a plugin's tags are listed on its page as a link. Each tag has its own page where you can see other plugins that share that tag. This offers a powerful way to navigate between related content, and another way to discover more plugins.</p>
83 <p>I think this is especially useful for plugin development when the tag is an event that the plugin hooks. This allows you to quickly find the source code of plugins that depend on the same Lektor plugin events, so that you can see many quick examples to help you write your own plugin. For instance, you can find all of the plugins that hook the <code>before-build-all</code> event by looking at it's tag page <a href="/plugins/tag/before-build-all/">here</a>. Tag pages for events also have links back to the plugin documentation pages, including the page for that specific event.</p>
84 <p>Now go check out some <a href="/plugins">plugins</a>!</p>
85
86 </div></content>
87 </entry>
88 <entry xml:base="https://www.getlektor.com/blog/2018/1/lektor-31-released/">
89 <title type="text">Lektor 3.1 Released</title>
90 <id>urn:uuid:5baefef3-bee6-346b-8220-0a94a203e7a0</id>
91 <updated>2018-01-29T00:00:00Z</updated>
92 <link href="https://www.getlektor.com/blog/2018/1/lektor-31-released/" />
93 <author>
94 <name>Joseph Nix</name>
95 </author>
96 <content type="html">
97 <div class="page-banner page-banner-500-tall" style="background-image: url(/blog/2018/1/lektor-31-released/pancakes-2020863.jpg)"></div>
98
99 <div class="text-block text-block-default">
100 <p>Lektor continues to be discovered and used by more people, and many of these fine people have given back. Lektor is now a little easier to use, and more robust with plenty of bugfixes and added support for Python 3. Let's take a brief look at what's been done, and what we want next.</p>
101 <h2 id="lektor-themes">Lektor Themes</h2><p>Perhaps the most eye-catching change is the introduction of the ability for Lektor to use <a href="/docs/themes/">themes</a>. This can become a very powerful tool, allowing people to make beautiful sites even more quickly by standing on the shoulders of those who have gone before them. Why spend more time fiddling with your CSS, or template queries than you need to? If there's a theme that's similar to yours in either design or function, you can start from there. Assets, templates, models, and flowblocks are all able to be themed, offering a lot of flexibility in what they could provide.</p>
102 <p>This is a very new and experimental feature. We'd love to add more support for themes so that making them and using them is easy, but it may be a bit rough around the edges at the moment. The <a href="https://github.com/rlaverde">contributor</a> who gave Lektor its initial theming ability also created the <a href="https://github.com/rlaverde/lektor-theme-nix">first theme</a>, which is a simple theme based on the <a href="https://themes.gohugo.io/hugo-theme-nix/">Nix Hugo theme</a>.</p>
103 <p>I think this feature has a lot of potential. It's pretty exciting.</p>
104 <h2 id="improved-support-and-testing">Improved Support and Testing</h2><p>If you take a look at the changelog since version 2.0, you'll notice many references to bugfixes and dependency updates. We now support Python 3, and have a more extensive automated testing environment. We have upgraded the versions of Mistune (our current Markdown parser), and several JavaScript dependencies that drive the admin interface. Windows users have a few bugfixes to help them out, and added automated testing to catch more bugs before they reach a release.</p>
105 <h2 id="other-features">Other Features</h2><ul>
106 <li>Templates now have greater control of image quality and rotation.</li>
107 <li>Fixed and expanded handling of image EXIF data.</li>
108 <li>Improved date handling in the admin interface.</li>
109 <li>Added ability to publish from different file systems.</li>
110 <li>Fields can now be disabled for alternatives in the admin interface.</li>
111 <li>Another Plugin hook added between instantiating the Renderer and creating the Markdown Processor.</li>
112 <li><code>lektor dev shell</code> now uses IPython if it's installed.</li>
113 </ul>
114 <h2 id="support-for-mac-installer-paused">Support for Mac Installer Paused</h2><p>The code that was used to create the Mac installer for the Desktop App has <a href="https://github.com/lektor/lektor/issues/420">some problems</a>. We're (hopefully temporarily) pulling support for the desktop app because of this. If you have modern experience making executables (especially cross-platform) and would like to contribute, we'd love to have your support. We generally want to make Lektor as easy to use as possible, and a new desktop app could really help with that.</p>
115 <h2 id="want-to-contribute">Want to Contribute?</h2><p>Open Source Software lives and dies by the communities that use them, love them, and support them. If you're a developer looking to get your feet wet in OSS, we'd love to review your pull request. &lt;3</p>
116 <p>A larger task, if you're someone with React (and Python) knowledge, is our admin interface. It has served us pretty well so far, but it also has <a href="https://github.com/lektor/lektor/issues/458">some issues</a>. It could use some TLC.</p>
117
118 </div></content>
119 </entry>
120 <entry xml:base="https://www.getlektor.com/blog/2016/4/lektor-2-released/">
121 <title type="text">Lektor 2.0 Released</title>
122 <id>urn:uuid:6c255b6a-8b9f-379e-9100-619144ab30d8</id>
123 <updated>2016-04-11T00:00:00Z</updated>
124 <link href="https://www.getlektor.com/blog/2016/4/lektor-2-released/" />
125 <author>
126 <name>Armin Ronacher</name>
127 </author>
128 <content type="html">
129 <div class="page-banner page-banner-500" style="background-image: url(/blog/2016/4/lektor-2-released/banner.jpg)"></div>
130
131 <div class="text-block text-block-default">
132 <p>After quite a bit of wait, I'm happy to announce the 2.0 release of Lektor.
133 Some things that previously were supposed to go into this release were pushed
134 out a bit more because the wait just was too long and quite a few features
135 were already in this release.</p>
136 <p>Here is the changelog of what's in this release:</p>
137 <ul>
138 <li>Added <code>_discoverable</code> system field which controls if a page should show
139 up in <code>children</code>. The default is that a page is discoverable. Setting it
140 to <code>False</code> means in practical terms that someone needs to know the URL as
141 all collection operations will not return it.</li>
142 <li>Added <code>for_page</code> function to pagination that returns the pagiantion for a
143 specific page.</li>
144 <li>Make pagination next_page and prev_page be None on the edges.</li>
145 <li>Allow plugins to provide publishers.</li>
146 <li>Added <code>|markdown</code> filter.</li>
147 <li>Added French translations.</li>
148 <li>Unicode filenames as final build artifacts are now explicitly disallowed.</li>
149 <li>Serve up a 404.html as an error page in the dev server.</li>
150 <li>Improvements to the path normalization and alt handling. This should support
151 URL generation in more complex cases between alts now.</li>
152 <li>Show a clearer error message when URL generation fails because a source
153 object is virtual (does not have a path).</li>
154 <li>Empty text is now still valid markdown.</li>
155 <li>Lektor clean now loads the plugins as well.</li>
156 <li>Basic support for type customization.</li>
157 <li>Fields that are absent in a content file from an alternative are now pulled
158 from the primary content file.</li>
159 <li>Development server now resolves index.html for assets as well.</li>
160 <li>Markdown processing now correctly adjusts links relative to where the
161 rendered output is rendered.</li>
162 <li>Added Dutch translations.</li>
163 <li>Added Record.get_siblings()</li>
164 <li>Added various utilties: build_url, join_path, parse_path</li>
165 <li>Added support for virtual paths and made pagination work with it.</li>
166 <li>Added support for Query.distinct</li>
167 <li>Add support for pagination url resolving on root URL.</li>
168 <li>Server information can now also contain extra key/value pairs that
169 can be used by publishers to affect the processing.</li>
170 <li>The thumbnails will now always have the correct width and height set
171 as an attribute.</li>
172 <li>added datetime type</li>
173 <li>added support for the process_image utility functions so that plugins
174 can use it directly.</li>
175 <li>added support for included_assets and excluded_assets in the project file.</li>
176 <li>added Spanish translations.</li>
177 <li>added Japanese translations.</li>
178 <li>added support for discovering existing alts of sources.</li>
179 <li>added support for image cropping.</li>
180 <li>added preliminary support for publishing on windows.</li>
181 <li>children and attachments can now have a hidden flag configured explicitly.
182 Attachments will also no longer inherit the hidden flag of the parent
183 record as that is not a sensible default.</li>
184 <li>changed internal sqlite consistency mode to improve performance on HDDs.</li>
185 <li>allow SVG files to be treated as images. This is something that does not
186 work in all situations yet (in particular thumbnailing does not actually
187 do anything for those)</li>
188 </ul>
189 <p>As always you can install the release as mentioned in the release notes.
190 If you had a previous version of Lektor the install process should auto
191 upgrade. If you use the OS X desktop build, just drag the new application over
192 the already existing one.</p>
193
194 </div></content>
195 </entry>
196 <entry xml:base="https://www.getlektor.com/blog/2016/3/lektor-at-rails-girls-summer-of-code/">
197 <title type="text">Lektor at Rails Girls Summer of Code 2016</title>
198 <id>urn:uuid:f5918d57-8c93-3bdf-bd2f-e4546646e819</id>
199 <updated>2016-03-17T00:00:00Z</updated>
200 <link href="https://www.getlektor.com/blog/2016/3/lektor-at-rails-girls-summer-of-code/" />
201 <author>
202 <name>Armin Ronacher</name>
203 </author>
204 <content type="html">
205 <div class="page-banner page-banner-500" style="background-image: url(/blog/2016/3/lektor-at-rails-girls-summer-of-code/banner.jpg)"></div>
206
207 <div class="text-block text-block-default">
208 <p>I'm happy to announce that Lektor is participating as a project in this year's
209 <a href="http://railsgirlssummerofcode.org/">Rails Girls Summer of Code</a> (RGSOC).
210 Unlike what the name would suggest, RGSOC is open for all Open Source projects
211 and not just Ruby.</p>
212 <p>The goal of RGSOC is to bring more women into programming. To quote the
213 website:</p>
214 <blockquote><p>Rails Girls Summer of Code is a global fellowship program aimed at bringing
215 more diversity into Open Source. Successful applicants are paid a monthly
216 stipend, from July-September, to work on Open Source projects of their
217 choice.</p>
218 </blockquote>
219 <p>Lektor was accepted as a particpating project. For more information about
220 the project there refer to the <a href="https://teams.railsgirlssummerofcode.org/projects/115-lektor-cms">project overview on
221 RGSOC</a>.</p>
222 <p>We want to make it as easy as possible to work on Lektor during the event which
223 is why we will be very flexible with regards to which area interested
224 developers want to work on.</p>
225 <p>If you are interested in working on Lektor you can reach out to us via
226 Twitter at <a href="https://twitter.com/getlektor">@getlektor</a> or
227 <a href="https://gitter.im/lektor/lektor"
228 class="js-gitter-toggle-chat-button">Gitter</a>.</p>
229
230 </div></content>
231 </entry>
232 <entry xml:base="https://www.getlektor.com/blog/2016/3/road-to-lektor-2/">
233 <title type="text">Road to Lektor 2.0</title>
234 <id>urn:uuid:e29ee451-ec19-38f5-840d-67d5e5457913</id>
235 <updated>2016-03-10T00:00:00Z</updated>
236 <link href="https://www.getlektor.com/blog/2016/3/road-to-lektor-2/" />
237 <author>
238 <name>Armin Ronacher</name>
239 </author>
240 <content type="html">
241 <div class="page-banner page-banner-500" style="background-image: url(/blog/2016/3/road-to-lektor-2/header.jpg)"></div>
242
243 <div class="text-block text-block-default">
244 <p>It's great to see what people have been building with Lektor so far. It also
245 shows us what still needs to be built. For a lot of things we improved for
246 Lektor 2.0 which is going to release very soon indeed. To give you some ideas
247 what's going to change here is a current brief look into the changelog and
248 what has been changed so far.</p>
249 <h2 id="page-discovery">Page Discovery</h2><p>One of the biggest frustrations users have voiced is the inability to control
250 discoverability of pages. In Lektor 1.0 you can only hide pages entirely in
251 which case the build process skips over them but there was no way to hide them
252 by default from queries. While you could always hide pages by changing the
253 query, this did not work for pagination and it also required you to be quite
254 careful with the queries you are writing in templates.</p>
255 <p>In Lektor 2.0 we introduced the system <code>_discoverable</code> attribute which allows
256 you to easily hide pages from any query. Queries can explicitly include
257 undiscoverable pages but you do not need to take care of this yourself. This
258 makes it possible to automatically hide drafts from blogs for instance. Lektor
259 will still build it but without knowing the URL you cannot see it on the
260 overview.</p>
261 <h2 id="virtual-paths">Virtual Paths</h2><p>The biggest change in Lektor 2.0 is the introduction of virtual paths and
262 sources. This is somewhat of an under the hood change but it has big
263 implications on what is possible with Lektor plugins. Each page can have
264 virtual resources below it that can be provided by plugins. These virtual
265 resources are separated from the page through what is called a virtual path
266 which is indicated by the at-sign (<code>@</code>). For instance this blog here uses
267 a plugin which provides a blog archive available at <code>/blog@blog-archive</code> and
268 the year 2015 is available at <code>/blog@blog-archive/2015</code> etc.</p>
269 <h2 id="next/previous-page">Next / Previous Page</h2><p>Lektor 2.0 implements sibling support through it's virtual path system which
270 allows you to refer to the next or previous record easily. This is for
271 instance used by this blog here to link between blog posts.</p>
272 <h2 id="improved-alternative-support">Improved Alternative Support</h2><p>Alternatives were heavily improved. Individual fields that are absent in
273 content files now fall back to the primary content file. In addition it is
274 now possible to ask Lektor about which alternatives exist for a given source
275 or in total. This simplifies handling of internationalized pages greatly
276 but more work will be done in that field.</p>
277 <h2 id="improved-plugin-support">Improved Plugin Support</h2><p>Plugins now have the ability to do a few more things they could not do before:</p>
278 <ul>
279 <li>custom field types (want to render reStructuredText? You can now build a plugin)</li>
280 <li>custom build programs: because of the virtual source and path support you can
281 now build custom build programs that build things that do not exist in the
282 source tree. For instance you can build feeds, blog archives etc.</li>
283 </ul>
284
285 </div></content>
286 </entry>
287 <entry xml:base="https://www.getlektor.com/blog/2015/12/travis-and-ghpages/">
288 <title type="text">Lektor Loves Travis-CI and GitHub Pages</title>
289 <id>urn:uuid:f5986ecc-af94-3569-b82b-3a4438ca5358</id>
290 <updated>2015-12-23T00:00:00Z</updated>
291 <link href="https://www.getlektor.com/blog/2015/12/travis-and-ghpages/" />
292 <author>
293 <name>Armin Ronacher</name>
294 </author>
295 <content type="html">
296 <div class="page-banner page-banner-500" style="background-image: url(/blog/2015/12/travis-and-ghpages/header.jpg)"></div>
297
298 <div class="text-block text-block-default">
299 <p>Open Source projects need websites, that's a given, and one of the most popular
300 ways to host them these days is <a href="https://pages.github.com/" class="ext">GitHub Pages</a>.
301 It's a free service provided by <a href="https://github.com/" class="ext">GitHub</a> which allows
302 hosts a git repository as a website on a subdomain of <code>github.io</code>.</p>
303 <p>Wouldn't it be nice if you could easily host Lektor projects on there? Turns
304 out you can with the help of <a href="https://travis-ci.org/" class="ext">Travis-CI</a>. Because
305 Lektor has built-in support for deploying to GitHub Pages pairing up the three
306 is a breeze.</p>
307 <p>We <a href="../../../../docs/deployment/travisci/" class="ref">created a guide</a> and also recorded
308 a screencast that goes with it:</p>
309 <iframe width="100%" height=410 frameborder="0" allowfullscreen="allowfullscreen"
310 src="https://www.youtube.com/embed/3pj_EyZIL5A?autoplay=0&fs=1">
311 </iframe>
312 </div></content>
313 </entry>
314 <entry xml:base="https://www.getlektor.com/blog/2015/12/hello-lektor/">
315 <title type="text">Hello Lektor!</title>
316 <id>urn:uuid:61a91a00-268d-36e7-b014-9e733ff99ce4</id>
317 <updated>2015-12-21T00:00:00Z</updated>
318 <link href="https://www.getlektor.com/blog/2015/12/hello-lektor/" />
319 <author>
320 <name>Armin Ronacher</name>
321 </author>
322 <content type="html">
323 <div class="page-banner page-banner-500" style="background-image: url(/blog/2015/12/hello-lektor/banner.jpg)"></div>
324
325 <div class="text-block text-block-default">
326 <p>About <a href="http://w3techs.com/technologies/details/cm-wordpress/all/all">25% of the Internet uses
327 Wordpress</a> and
328 it's estimated that about 50% of Wordpress installations out there are
329 vulnerable to security problems because they have not been updated. This is a
330 very high number.</p>
331 <p>Because I know how much work it can be to keep software updated and my own
332 terrible track record of spending time of updating everything I'm running
333 I kept getting increasingly frustrated with the lack of software that would
334 allow me to run a simple website in a secure manner without having to resort
335 to all kinds of user-unfriendly hackery.</p>
336 <p>While there are many static site generators none of them really matched what I
337 actually wanted: a content management system that just happens to run
338 on the client. Most static website generators are too “hacker focused” in the
339 sense that they could not be used by people without programming experiences or
340 they are full fledged content management systems that need a server to run on
341 or require regular maintenance for security updates.</p>
342 <p>There the hacker's favorite projects like
343 <a href="https://github.com/getpelican/pelican">Pelican</a> or
344 <a href="https://jekyllrb.com/">Jekyll</a> which support generating websites out of static
345 files that are tracked through version control and there are CMS systems like
346 <a href="http://statamic.com/">Statamic</a> which store all of its data in flat files
347 — but as mentioned — needs PHP.</p>
348 <p>None of those were what I was looking for. Static file generators like Jekyll
349 are nice in a way but not just end user unfriendly, but also very limited in
350 what you can do with them. They are more suited for building blogs than
351 more complex sites. I tried a bunch of them and built different things
352 with them, but ultimately always felt like something was missing.</p>
353 <p>After about two years of frustration with that situation I finally sat down
354 and spend some time working on a system to solve this problem. May I
355 introduce: Lektor.</p>
356 <h2 id="what-is-lektor">What is Lektor?</h2><p>Lektor combines the experience of using a content management system like
357 Wordpress with a static website generator like Jekyll and has some of the
358 flexibility of a web development framework like Django. It can run locally
359 on your computer and deploy to remote servers. All source assets are stored
360 either in version control or Dropbox and when you are satisfied with the end
361 results, you can push them online from the UI to a remote server.</p>
362 <p>And this is what it roughly looks like when you look at the admin panel:</p>
363 <div class="screenshot-frame"><img src="admin.png"></div><h2 id="how-do-i-use-it">How do I use it?</h2><p>That depends on who you are. Lektor is based on the idea that there are
364 two parties to a website: the web developers and the editors. The former
365 create the design, layout, data layout and configures Lektor in general. The
366 latter change the contents of the website according to the general setup.</p>
367 <p>If you are a web developer you can install two versions of Lektor: you can
368 use the command line client or if you are on a Mac, you can install the
369 desktop version. Either version comes with a handy web interface that
370 can be used to preview and edit all pages.</p>
371 <p>Once you have configured Lektor to your liking you can put the project into
372 version control (or just Dropbox) and let your users modify the contents. All
373 they have to do is to install the Desktop version of Lektor, double click the
374 project in their Dropbox and start changing it.</p>
375 <p>If you just want to edit the contents of a project you can install the
376 Desktop version or maybe in the future use a cloud hosted version.</p>
377 <h2 id="project-layout">Project Layout</h2><p>To get an idea how it works, you can have a look at the <a href="https://github.com/lektor/lektor-website/">github repository of
378 this website</a> which contains the
379 project for this website and blog and have a look at the introduction
380 documentation: <a href="../../../../docs/quickstart/" class="ref">Getting Started</a>. You can
381 also find a screencast there.</p>
382 <p>On a very basic level Lektor takes <code>.lr</code> files which are basic text files
383 with a super simple format and generates out HTML files. The <code>.lr</code> files
384 correspond to a previously set up data model. They are pure text format for
385 key/value pairs. Each pair is separated by three dashes (<code>---</code>):</p>
386 <pre><code>field_1: value
387 ---
388 field_2:
389
390 a longer value
391 </code></pre>
392 <p>You can set up data models for simple things like blog posts but also more
393 elaborate ones if you want to build portfolio sites. For instance you could
394 set up models for your projects and then access that data in the templates.</p>
395 <p>The content files are stored in folders in a tree like structure and at any
396 level you can add other files as attachments:</p>
397 <div class="screenshot-frame"><img src="structure.png"></div><h2 id="an-open-source-project">An Open Source Project</h2><p>Lektor is available under <a href="../../../../license/">a BSD license</a> and run as a
398 community Open Source project <a href="https://github.com/lektor/lektor/" class="ext">on github</a>.
399 The build system is written in Python, the UI in JavaScript with React and
400 the GUI components use Electron.</p>
401 <h2 id="feedback-appreciated">Feedback Appreciated</h2><p>Lektor took two attempts to get into a usable application and I'm sure that
402 there is more that needs to be done to scratch the needs of most users.
403 However I also know that there is no point in delaying an initial release
404 unnecessarily. What's being released today is the application as it exists
405 today and I think it's in a good shape to build really cool websites with
406 it. I welcome you to give it a try and give feedback on what you think
407 about it.</p>
408
409 </div></content>
410 </entry>
411 </feed>