I have spent today making my first ever batch of Kimchi. I have been documenting it in photos as I go, but thought I'd write up what I did so that if anyone else fancies having a go too, we can compare results.
For a start, this recipe is nowhere near "traditional" because I don't have access to certain ingredients such as glutinous rice flour. I'm sure if I searched in many of the asian supermarkets around the city centre I could find it, but I'm lazy so I didn't even try.
I am not writing this up as a traditional recipe because I'm kinda making it up as I go along, with hints from various sources including the great and wonderful Maangchi whose YouTube channel I follow. Observant readers or followers of Maangchi will recognise the recipe as being close to her Easy Kimchi recipe, however since I'm useless, it won't be exact. If this batch turns out okay then I'll write it up as a proper recipe for you to follow.
I started off with three Chinese Leaf cabbages which seemed to be about 1.5kg or so once I'd stripped the less nice outer leaves, cored and chopped them.
I then soaked and drained the cabbage in cold water...
...before sprinkling a total of one third of a cup of salt over the cabbage and mixing it to distribute the salt.
Then I returned to the cabbage every 30 minutes to re-mix it a total of three times. After the cabbage had been salted for perhaps 1h45m or so, I rinsed it out. Maangchi recommends washing the cabbage three times so that's what I did before setting it out to drain in a colander.
Maangchi then calls for the creation of a porridge made from sweet rice flour which it turns out is very glutinous. Since I lack the ability to get that flour easily I substituted cornflour which I hope will be okay and then continued as before. One cup of water, one third of a cup of cornflour was heated until it started to bubble and then one sixth of a cup of sugar was added. Stirred throughout, once it went translucent I turned the heat off and proceeded.
One half of a red onion, a good thumb (once peeled) of ginger, half a bulb of garlic and one third of a cup of fish sauce went into a mini-zizzer. I then diagonal-chopped about five spring onions, and one leek, before cutting a fair sized carrot into inch long pieces before halving and then thinly slicing it. Maangchi calls for julienned carrots but I am not that patient.
Into the cooled porridge I put two thirds of a cup of korean hot pepper flakes (I have the coarse, but a mix of coarse and fine would possibly be better), the zizzed onion/garlic/ginger/fish mix and the vegetables...
...before mixing that thoroughly with a spatula.
Next came the messy bit (I put latex gloves on, and thoroughly washed my gloved hands for this). Into my largest mixing bowl I put a handful of the drained cabbage into the bowl and a handful of the pepper mix. Thoroughly mixing this before adding another handful of cabbage and pepper mix I repeated until all the cabbage and hot pepper mixed vegetables are well combined. I really got your arms into it, squishing it around, separating the leek somewhat, etc.
As a final task, I scooped the kimchi into a clicklok type box, pressing it down firmly to try and remove all the air bubbles, before sealing it in for a jolly good fermenting effort. I will have to remove a little tonight for our dinner (beef strips marinated in onion, ginger and garlic, with kimchi on rice) but the rest will then sit to ferment for a bit. Expect a part-2 with the report from tonight's dinner and a part-3 with the results after fermentation.
As an aside, I got my hot pepper flakes from Sous Chef who, it turns out, also stock glutinous rice flour -- I may have to get some more from them in the future. (#notsponsored)
While working on new Qwintry.com tasks we needed to provide our operators the interface to rotate uploaded images quickly (and I wanted to rotate the original image file). Surprisingly, I could not find anything like that among d.org modules so I have to come up with my own solution. I was expecting to finish this task by 1 hour, but, as it often happens, the way to right solution took a bit longer.
For the final code scroll down to the end of the post, since now I will be showing some ugly code that you don’t really need :)
Here is the UI for operators:
These links are created in the node—[type].tpl.php in my theme:
So, following the Jessie release, and after a quick approval by the release team for the 4.12 transition, we've uploaded Xfce 4.12 to sid and have asked the RT to schedule the relevant binNMUs for the libxfce4util and xfce4-panel reverse dependencies.
It went apparently well (besides some hickups here and there, lilke some lag on sparc, and some build-failulres on hurd). So Xfce 4.12 is now in sid, and should migrate to Stretch in the following weeks, provided nothing release critical is found.
Or if someone would start it already, tell me about it.
ComputerMinds.co.uk: Mobile first, later : 10 Steps for retrospectively making your Drupal site responsive
On April 21st, Google updated their mobile search algorithms to boost the rankings of mobile-friendly web pages, whilst conversely decreasing rankings for pages that have been designed only for large screens. This change is likely to have a big impact on many Drupal sites, and ComputerMinds have seen a surge in requests for retrofitting responsive themes onto existing Drupal sites.
Extended Sprints are a real thing and in DrupalCon Los Angeles they are in awesome sky-rise building for supreme enjoyment! If you are planning on coming to DrupalCon Los Angeles Extended Sprints for the week befoe DrupalCon Los Angeles, you can head to 601 South Figueroa Street. The building looks like this:
In my recent post (I give up on Google), a lot of people suggested using OwnCloud as a replacement for several Google services. I’ve been playing around with it for a few days, and it is something of a mix of awesome and disappointing, in my opinion.
OwnCloud started as a file-sync tool, somewhat akin to Google Drive and Dropbox. It has clients for every platform, and it is also a client for every platform: you can have subfolders of your OwnCloud installation stored on WebDav, *FTP*, Google Drive, Dropbox, you name it. It is a pretty nice integrator of other storage services, and provides the only way to use some of them on Linux (*cough* Google Drive *cough*)
One particularly interesting feature is the live editing in the browser of ODT, DOCX, and TXT files. This is somewhat similar to Google Docs and the only such thing I’ve seen in Open Source software. It writes changes directly back to the documents and, in my limited testing, seems to work well. A very nice feature!
I’ve tested the syncing only on Linux so far, but it looks solid.
There are two surprising issues, however: there is no deduplication and no delta-uploads. Add 10 bytes to the end of a 1GB file, and you re-upload the 1GB file. Thankfully the OwnCloud GUI client is smart enough to use inotify to notice an mv, but my guess is — and I haven’t tested this, but apparently OwnCloud doesn’t use hashes at all — that the CLI client would require a reupload after any mv, because it doesn’t run continuously.
In some situations, Syncany may be a useful work-around for this, as it does chunk-based dedup and client-side encryption. However, you would lose a lot of the sharing features inside OwnCloud by doing this, and the integration with the OwnCloud “apps” for photos, videos, and music.
The Android/mobile apps support all the usual auto-upload options.
A lot of people report using OwnCloud as a calendar server, and it does indeed use CalDAV. With a program like DAVDroid or Mozilla Lightning, this makes, in theory, a full-functioning calendar syncing tool. There is, of course, also a web interface to the calendar. It, sadly, is limited. Or shall we say, VERY limited. Even something like sending an invite is missing — and in fact, the GUI for sharing an event is baffling. You can share it with someone, they get no say in whether or not it shows up, and it shows up on their calendar on the web only (not on synced copies) and they have no way to remove it!
Sharing calendars is similar; you can hide the display of any one of your calendars on the web interface, but not of any calendars shared with you. Baffling.
I haven’t tested this yet, but there’s not much to test, I suspect. It can be shared with others, which I could see as a nice feature.
An interesting bookmarks manager, though mysteriously not with Firefox sync support. There is Chrome sync support, and a separate Mozilla Sync support, but it doesn’t provide cross-browser syncing, apparently.
It is designed to present an interface to music that is stored in Files. It provides an Ampache-compatible API, so there are a lot of clients that can stream music. It has very few options, not even for transcoding, so I don’t see how it would be useful for my FLAC collection.
Sort of a gallery view of photos synced up with Files. Very basic. Has a sharing button to share a link to an entire folder, but no option to embed photos in blog posts at a lower resolution or shortcut to sharing individual photos.
Notes, Tasks, etc.
I haven’t had the chance to look at this much. Some of them sync to various clients. The Notes are saved as HTML files that get synced down.
There is a very helpful page that lists all the sync clients for OwnCloud — not just for files, but also for calendars, contacts, etc. The list is extensive!
The two other Open Source options mentioned on my blog post were Kolab and Sogo, and there is also Zimbra which also has a community edition. The Debian Groupware page lists a number of other groupware options as well. Citadel caught my eye (wow, it’s still around!). Sogo has ActiveSync support, which might make phone integration a lot easier. It is not dead-simple to set up like OwnCloud is, though, so I haven’t tried it out, but I will probably be looking at it and Citadel next.
I always find that kind of task a little off-putting and difficult to tackle, but I was happy to see someone driving the project, since it does need to get done. Debian is potentially also in a position to help the upstream python community, because we have a pretty good view of what things are being used, at least within our own ecosystem.
I'm happy to say that i also missed one of the other great benefits of paultag's audacious proposal, which is how it has engaged people who already knew about debian but who aren't yet involved. Evidence of this engagement is already visible on the py3porters-devel mailing list. But if that wasn't enough, I ran into a friend recently who told me, "Hey, I found a way to contribute to debian finally!" and pointed me to the py3-porters project. People want to contribute to the project, and are looking for ways in.
So cheers to the people who propose audacious projects and make them inviting to everyone, newcomers included. And cheers to the people who step up to potentially daunting work, stake out a task, roll up their sleeves, and pitch in. Even if the py3porters project doesn't move all of debian's python infrastructure to pyt3 as fast as paultag wants it to, i think it's already a win for the project as a whole. I am looking forward to seeing what comes out of it (and it's reminding me i need to port some of my own python work, too!)
The next time you stumble over something big that needs doing in debian, even something that might seem impossible, please make it inviting, and dive in. The rest of the project will grow and improve from the attempt.
These apps are not directly affiliated with the event, so questions and support inquiries should go to Lemberg.
Thanks to Lemberg for their efforts!
The purpose of this blog post is to tell others how in one week I went from fruitlessly searching the Issue Queue, to contributing to Drupal 8 while interacting with core contributors...and how you can too! I did this by triaging Issues that had the Novice Tag with the help of Drupal Mentors and I documented the process along the way. There are a ton of Issues left to triage and core contributors need your help! So, if you have some experience with Issues and/or core, you can help us too!
How did I get to this point where I was triaging Novice Issues?
As a new contributor to Drupal I was directed to look at Issues tagged Novice to help out. And after looking at the first few Issues I was left befuddled and confused to the point where the only way to express my feelings was through a cat meme.
In the wake of my confusion I mostly drank vanilla frappuccinos and produced over-caffeinated curses about the long list of Issues to chose from, and my inability to contribute to any of them. This is when I turned to the Drupal community! I was able to lean on the help of senior contributors such as Aimee Degnan, Kristen Pol, and John Storey.
I would link them to an Issue and say “Ummm, what?”. With their help I was able to contribute to ongoing Issues like Installing in a non-English language fails for command-line installations , and adding a Beta Phase and Remaining Task template to “Rewrite the documentation of content_translation_entity_type_alter()” . I became very happy with my contributions and wanted to help more!
It was about this time, recalling my elaborate curses regarding the Issues queues, Kristen Pol pointed out an apprenticeship that Cathy Theys was currently offering regarding going through the Issue queue and triaging the Novice Tags. Conveniently, this is the exact thing I was calling for earlier that day! Cathy is a Drupal 8 Core contributor, Drupal Mentor, and overall Leader. She knows how to do the things and is patient enough to teach everyone how to do them. In the first week of working with Cathy part time I was able to: learn how tell if an Issue should have a Novice Tag, interact with fellow core contributors, and even become a mentor for the upcoming DrupalCon in LA! :-) If any of those things sound like something you’d like to do, stop reading right now and shoot me an email or ping me on IRC in the channels #drupal or #drupal-contribute, my IRC name is Patrick_Storey!First steps to triaging Issues
I started by learning what the “Novice Tag” stands for. Apparently it means “new contributor to Drupal”. This contributor could be an expert in their field, but merely just new to contributing to the Drupal project. This runs contrary to what I thought, which I assumed it meant a Task for beginners in the field like myself. This definition alone really cleared up worlds of understanding for me. So that’s the first thing one must learn, what we mean in Drupal when we say “Novice Task”.
After speaking with Cathy Theys about where we should start we decided to start with Issues that were "Tasks" because those are at a high risk of not being committable. Drupal 8 is currently in Beta. And some Issues are about changes that are not going to be in the current version of Beta. So for new contributors we decided it was best to only have them work on Issues that would get in the current version of Beta. I certainly didn’t want to work on an Issue, do it correctly, only to have to wait a year to see the results. I wanted to link it to others and brag about it now!
Luckily the Drupal community has already thought about what makes a good Novice Issue and created a handbook for common things to avoid and use in triaging Issues. The Novice Tasks handbook page documents what makes a good or bad Novice Task. With this powerful handbook at our disposal we are ready to triage Novice Tag Issues!How to search for Beta Issues with the Novice Tag
Start by searching for Novice Tasks in the Drupal 8 Issue queue This should produce a screen with these filters selected.
This information is to help decide if an Issue still has Novice Task(s) on it. Here are the steps I take when first reviewing an Issue:
- Read the Issue Summary, read the remaining Tasks, read the last few comments. Can you identify what the next steps are?
- Look for the comment where the Novice Tag was added. To do this use the browser find (control-f or cmd-f) and search for the +Novice note. Sometimes the Tag gets added and removed often, look at each scenario.
- What did the person say in their comment when they added the Novice Tag? Has the Task been completed already? If so, then there may be no other Novice Tasks for the Issue.
- Is the Issue Summary up to date detailing which Tasks have been done, and which Tasks still need to be done? If not this Issue will need an Issue Summary update before it remains a Novice Issue. You can do the Issue Summary update yourself following this documentation or Tag the Issue with a “Needs Issue Summary update” Tag, comment why it needs an Issue Summary update, and reference the documentation.
- Are the Tasks linked to a contributor Task document saying how to do the Task?
After reviewing the Issue I then decide if the Issue should have the Novice Tag on it or not.
- Compare the information you have gathered with the Novice Tasks documentation to see if this Issue meets the requirements for a Novice Tag
- A good way to see this is to review the Task or Issues to avoid for a Novice Tag documentation.
- If the issue meets the criteria of an “issues to avoid”, then the Novice tag should be removed.
- If the task in question that the Novice tag was added for meets the criteria of a “tasks to avoid”, then the Novice tag should be removed.
This can seem like a confusing thing to do at first, but feel free to ping me on IRC in the channels #drupal or #drupal-contribute, my IRC name is Patrick_Storey. After doing a few Issues together this process will become a lot easier to understand!Template for the removal of a Novice Tag.
When removing the Novice Tag, this is a good template to follow:
- Delete the Tag by erasing it from the “Issue Tags” section.
- Then leave a comment saying why, and cite the documentation to back up your reasoning. Such as below.
I am removing the Novice Tag from this Issue because [why]
I’m using this documentation as a source: https://www.drupal.org/core-mentoring/novice-tasks#avoid
- You should put your reason for removal in the [why] part of the above template
Sometimes there are things we can do to the Issue to keep the Novice Tag. Such as providing a Beta Evaluation or updating the Issue Summary.
- If a "Task" has been assigned the priority of “Normal” it should have a Beta Evaluation. You may perform a Beta Evaluation following the documentation on how to evaluate Issues.If you can not perform a Beta Evaluation at that moment,
- comment that it needs a beta evaluation, why (it is a Task of Normal priority) and reference the contributor Task documentation for how to do a beta evaluation in the comment.
- add the Tag: needs Issue Summary update
- update the Issue Summary, adding a remaining Task of "do a beta evaluation". To aid in this endeavor the dreditor browser plugin has a button for "Insert Tasks", which inserts a HTML table template. Place your cursor in the remaining Tasks section of the Issue Summary, then hit the “Insert Tasks” button. Then uncomment any table rows that you have noticed are remaining Tasks, especially the row to do a beta evaluation.
- Use Dreditor when starting a Beta Evaluation. This will provide you with the “Insert Beta Evaluation” button
- When you click the Beta Evaluation button you will get an output like this
- Be careful as some of the table rows in the template are not spaced out in a clear manner, there is an Issue opened for dreditor that is discussing a work around
- I put spacing for each new instance of a table row . This will result in the spacing to be like this.
- To properly fill in the form, uncomment the relevant rows and put why that row is relevant.
- If the Beta Evaluation results in the Issue needing to be postponed, remove the Novice Task because the Issue will no longer be valid for this version.
- Then hit save.
- If you are doing this for the first few times, or the update you did was a bit complicated, paste a link to your comment in IRC in #drupal or #drupal-contribute so someone else can check if it looks correct. Ping Patrick_Storey or YesCT just by typing their name when you say something in the channel. (If they are not in the channel, just post it to the channel in general, please do not ask anyone else specifically to check.)
Also see the contributor Task handbook page on how to evaluate if a Drupal core Issue is allowed in Beta for further guidance.Examples of Issues I’ve changed
Here is a link to one of the first Issues where I removed a Novice Tag: https://www.drupal.org/node/507502. In this example I removed it for having over 100 comments on the Issue, listed my reasons, and the source documentation I was using.
Here is a link to an Issue where the Novice Tag remained but I provided an Issue Summary update, and a Beta Evaluation: https://www.drupal.org/node/2478535. I kept the Novice Tag as this Issue had a request to update the patch to incorporate feedback from a review.Have any questions?
If you have any questions feel free to hop onto the Drupal chat on IRC in #drupal or the contribution channel #drupal-contribute, or come to the weekly “Triaging Novice Issues office hours” Google hangout at 2pm-4pm PST (21:00-23:00 UTC) on Wednesdays! You can add the Mentor Calendar directly to your Google Calendar to see notifications of when the office hours are! Or feel free to join the Drupal Mentors group to keep up to date with all Drupal mentoring!
The Installing Git series is a free series that walks you through the process of installing Git for the first time and/or updating Git to the latest release on both Windows and Macs.
Installing Git on Windows is pretty straight forward, you just download the "Git for Windows" installer, and step through the process.
On a Mac though:
* You might not have any version of Git installed
* You might have the version that comes with Xcode or the Command Line Developer Tools
* You might have the version from Apple as well as an official install
* Or, you might just need to update an existing official install
This series covers all of those scenarios to get you updated to and running on the latest release.
It also covers the basic Git configuration options you need to set in order to use Git effectively.
So, what are you waiting for? Watch them now! They're free!Tags: Gitplanet-drupal
Gunnar Wolf: Guests in the Classroom: Felipe Esquivel (@felipeer) on the applications on parallelism, focusing on 3D animation
I love having guests give my classes :)
This time, we had Felipe Esquivel, a good friend who had been once before invited by me to the Faculty, about two years ago. And it was due time to invite him again!
Felipe knows his way around the different aspects of animation. For this class (2015-04-15), he explained how traditional ray-tracing techniques work, and showed clear evidences on the promises and limits of parallelism — Relating back to my subject and to academic rigor, he clearly shows the speed with which we face Amdahl's Law, which limits the efficiency of parallelization at a certain degree perprogram construct, counterpointed against Gustafson's law, where our problem will be able to be solved in better detail given more processing abilities (and will thus not hit Amdahl's hard ceiling).
We’re excited to announce this talk, Content After Launch – Preparing a Monkey for Space on Wednesday, May 15, 2015 from 5pm to 6pm at DrupalCon LA!
So what’s it all about? Well, coupled with a silly metaphor, I’m going to be talking about what happens to content during various stages of a website build, from the initial kickoff, through the production, and well after launch. The talk will touch on:
- how all team members can get involved in the success of a launched website.
- setting and managing expectations for what it takes to run a site post-launch.
- everything you might have missed while focused on designing and building the website.
Come for the metaphor, stay for the juicy takeaways! Spoiler alert – there will be an abundance of monkey photos.
In one of our latest projects we developed a Facebook app which integrates with Drupal. Even though Drupal 7 has a powerful set of core tools to manage files and images, using it would unnecessarily overcomplicate a simple PHP app.
Drupal 8 is skipping through the betas and it won’t be long until we’re staring at a release candidate. With that in mind, i’m now taking the time to learn some of the key concepts that you’ll need to know as a day to day site builder using Drupal 8.Custom Config Entity Types
A custom configuration entity type referred to as a config entity for most of this article is a custom definition of an entity that allows you to provide a config class, validation schema and custom storage.
They'll have hundreds of practical usages during development custom development. To give some examples, core uses them for user roles, blocks, image styles and plenty more. Use your IDE to see what’s extending ConfigEntityBase if you’re interested.Creating Our Config Entity Type Schema
First up, lets define our schema. The schema allows us to say what fields our config entity should have and what type those fields should be.
At first, I dismissed the need for yet another module. I have always added the Google Analytics code straight into a template file in various other CMS and static sites I have been involved in over the years. Why do I need a module to do that? Well, you don't, but the Drupal Google Analytics Module does offer a lot more functionality that will make it worth your while.
The first thing you need to do, it you haven't is sign up for a Google Analytics account. It's pretty straight forward process.
Once you are signed up, the most confusing thing to me was the Account vs. Property vs. View:
I break it down like this. Account is the company or the owner. The Property is the website. The view is segmented data of the website. At first, you should have a default "All Website Data" view, but moving forward you may have an app and a website, or a view for different languages on the site like /en and /de.
At least 20 people helped push one or more issues forward in Montpellier, at the Drupal Dev Days Performance Sprint!
Here’s an overview of what we set out to do, what we did, and what the next steps are.The plan for DDD Montpellier
- Priority one: uncover the “unknown unknowns”, i.e. finding more performance issues.
- Priority two: Drupal 8’s internal page cache was enabled by default shortly before DDD Montpellier, so we should try to find edge cases where it breaks (where stale content is served from the internal page cache).
- Priority three: fix known performance problems, as well as those uncovered by the work done for priorities one & two.
We already know that certain things are slow, and we know how to fix them. But significant portions of slowness do not yet have explanations for, let alone precise or even rough plans on how to reduce the slowness.
The parts of Drupal 8 that are slow that we do not have a strong grasp on yet are the bootstrap phase in general, but also routing, container services and route access checking.
Berdir, amateescu, dawehner, yched, znerol, pwolanin and I did a lot of profiling, testing hypotheses about why certain things took a given amount of time, comparing to Drupal 7 where possible, figuring out where the differences lied, and so on.
Bits and pieces of that profiling work1 are in https://www.drupal.org/node/2470679, including patches that help profile the routing system.
In the weeks since DDD Montpellier, effulgentsia and catch have continued discussions there, posted further analyses and filed many more issues about fixing individual issues.2. Try to break Drupal 8’s internal page cache & fix it
So, Drupal 8 had the internal page cache enabled by default shortly before DDD Montpellier, with only a few known problems. Having many people to try to break it, using scenarios they use daily in their day jobs, that’s the ideal way to find any remaining cache invalidation problems.
Many tried, and most did not succeed in breaking it (yay! :)), but about half a dozen problems were discovered. See https://www.drupal.org/node/2467071.What we got done
We fixed so incredibly many issues, and we had more than twenty people helping out! Notably, fgm was all over class loading-related issues, borisson_ and swentel got many of the page cache issues fixed, pwolanin pushed routing/REST/menu links issues forward significantly, and we overall simply made progress on many fronts simultaneously.
We made Drupal 8’s authenticated user page loads several percent faster in the course of that week!
Most of the page cache problems that were discovered (see above) were fixed right at the sprint! There are 4 known issues left, of which one is critical on its own, one is blocked, and the two others are very hard.
(If you want more details, we have day-by-day updates on what got done.)
We currently have 11 remaining criticals with the “Performance” tag. Getting that to zero is our top priority. But many in that list are difficult.
If you specifically care about performance for authenticated users: less difficult issues can be found in the child issues of the Cache contexts meta issue. And for some least difficult issues, see the child issues of the SmartCache issue.
Generally speaking, all major issues tagged with either “Performance” or “D8 cacheability” can use a hand.
Hopefully see you in the queues! :)
It was impossible to capture all things we considered in an issue, that’d have slowed us down at least tenfold. ↩
DrupalCon LA is right around the corner! Woo hoo! I'll be there. Will you?
If this will be your first DrupalCon, I'd like to provide you with some ideas of how you can approach things. You have different options available to put together your Con: