Blog

Recreate Drupal's users table from url_alias table

Posted on: 2015-08-19 22:36:38

So I needed to recreate a truncated users table to stop the Drupal admin from barfing all over the admin... the url_alias table has the UID and the user names in it... so why not?

INSERT INTO users SELECT REPLACE(source, 'user/', '') AS uid, REPLACE(alias, 'users/', '') AS name, SHA1('nothing') AS pass, CONCAT(REPLACE(alias, 'users/', ''), '@no.none') AS mail, '' AS theme, '' AS signature, 'filtered_html' AS signature_format, -- make sure this is okay 0 AS created, 0 AS access, 0 AS login, 1 AS status, NULL AS timezone, 'en' AS language, 0 AS picture, CONCAT(REPLACE(alias, 'users/', ''), '@no.none') AS initial_size, NULL AS data FROM url_alias WHERE source LIKE "user/%" -- Only grab users AND source != "user/1" -- But not user 1

I didn't need the emails to be anything useful.

Continue reading...

Using Acquia DevDesktop with a site that has domain access and multiple languages

Posted on: 2015-06-01 15:53:25

Acquia DevDesktop can be pretty slick at times for development, but if you're trying to work with a site that has domain access AND internationalization, you may be scratching your head a bit.

First off, you must correct the entries for the default site (or whichever site you're testing) in the domain and languages tables.

But then...

You'll need this patch since Drupal 7.x Core doesn't handle port numbers properly.

Then your site will work!

Continue reading...

Redirect checker script

Posted on: 2015-04-22 09:37:32

Here's a quick script I wrote to test redirects. Useful if you're trying to... test if your redirects are working properly.

<script src=\"https://gist.github.com/nvahalik/d07a27666b0ac0112e01.js\"></script> Continue reading...

Drupal: Community at the cost of code

Posted on: 2015-04-15 09:18:05

I'm probably the last person who should be writing something like this, seeing as how my interest in Drupal is and has always been one from a perspective that it was the best tool for the job. In many ways, I'm part of the (probably) unquantified mass of people who use Drupal on a daily basis, depending on it for my livelihood but being altogether indifferent toward the community. I mean, it's not that I don't like community, but in general I tend to associate with communities who have a particular purpose or shared interest and whose values end goals are reflect my own. This is probably why my local church and amateur radio club get the most attention of my time when I'm on my own timeā€”so I'll be honest and just say that in general I'm indifferent to the community that surrounds Drupal.

Why is that? Well to be fair the mission, means, and goals of both my local church and amateur radio club are pretty similar when you think about it. In a nutshell, they both have a mission to be community-focused, with a purpose to spread a particular message and offering members the ability to grow in knowledge and wisdom, with a goal of growing and making the world a better place. The only difference is what drives them. One is driven by a communal love for the gospel of Jesus Christ while the other a love for emergency preparedness and awesome toys. Both have discrete membership rules, codes of conduct, and a hierarchy that is respected and trusted.

Because let's face it, FOSS isn't something you just limit to some sort of "day job mentality" where things are generally where you left them and a particular hierarchy is set up and enforced. And while there are people who can manage that, I'm not one of those kinds of people and I'm okay with that.

Continue reading...

Quick and Easy code blocks in Google Docs

Posted on: 2015-03-09 09:53:12

Want some quick and easy code blocks in Google Docs? Just do this:

  1. Make a table.
  2. Remove the border (make it 0px), and add your background color.
  3. Add a numbered list.
  4. Right click on the list and choose "Edit prefix and suffix..."
Continue reading...

Web Weariness

Posted on: 2014-09-10 22:41:13

A while back I was doing a bit of research on web standards. Specifically, I was looking at the number of documents that were published by the W3C over time. The last several years have seen an explosion of new recommendations with everything from CSS to Web Telephony. Let's face it, the web is here to stay. Technology points to the web. The Internet of Things surrounds us.

The number of technologies that power those things seem to grow every day. Because the internet changes so rapidly, new variants of existing languages pop up, new frameworks are created and destroyed. Optimization occurs. Repos get branched. Integrations get built. New SaaS platforms get launched. Every ounce of ROI gets squeezed out.

10 years ago, a guy could learn PHP and SQL (with a little CSS & JavaScript) and build a pretty decent app. And while it's still possible for one-man-shows to build and launch a site, it's getting harder to do. Sure, the number of modules that are available for platforms like Drupal, Magento, Laravel, Symfony, ZF2, PHP, Ruby, Rails, Python, Django, Perl, Node.js, Java, etc., etc. are growing at staggering rates. Which technology you choose is a matter of personal preference, but Polyglots are fairly normal to come across in most shops now. This is practically a requirement and not just a sign of someone who loves this stuff.

Why is this the case?

Three observations.

  1. Websites being built are getting more complex and intricate because a bigger internet means you must differentiate yourself.
  2. The code bases and toolsets required to build those complex and intricate things are getting larger and more diverse.
  3. The knowledge required to use those code bases is also expanding, but perhaps not as rapidly since frameworks help to make interop better.

The one-man-custom shop is slowly dying. You can still do well focusing on a particular piece of the puzzle, but the expectation that one person can do it all is quickly becoming less of a reality. It's a full-time job just to keep up with the changes, let alone spending the time to actually implement them.

So the conundrum that I see right now is that while things are getting easier to build, they are requiring more complexity. And that complexity seems to be winning in terms of where the "how much do I have to know to build this" gauge is moving.

Sometimes I yearn for something simpler: Needing only a language or two. Solid, one-way approaches to implementation. Solving real problems instead of trying to figure out how to not pull your hair while accomplishing something that should be simple.

Continue reading...

PyAudioMixer: A more versatile Python Audio Mixer

Posted on: 2014-09-07 22:43:24

When I came across swmixer, it seemed it answered 90% of my needs for a mixer for an amateur radio application I was working on. However, the one thing that it didn't support that was a deal breaker was that only one mixer could be set up. This was no bueno.

The wonderful thing about swmixer, though, was that it seemed like it would lend itself well to being more objectified so that more than one mixer could be set up. And that's exactly what happened.

PyAudioMixer is a fork of swmixer with the following changes (roadmap items in italics):

  • Multiple discrete mixers
  • Microphone as a channel (with volume control)
  • Frequency and DTMF Generators
  • Support for unlimited length (live) audio streams (partially completed)
  • Mixer to mixer I/O
  • Output to file
  • Network transport & codec support

Patches and comments are welcome!

Continue reading...

Rewrapping wx.StaticText

Posted on: 2014-09-02 08:09:08

Per this thread (see the _Rewrap function in Robin's example code), you need to set the Label Text again in order for it to update properly:

def _Rewrap(self): 
    self.st.Freeze() 
    self.st.SetLabel(self._label) 
    self.st.Wrap(self.GetSize().width) 
    self.st.Thaw() 

You may also need to call self.Layout() (which is the parent of the StaticText element) in order to make sure everything is a-okay.

Continue reading...

Setting a wxPython Global Hotkey with a Regular Character

Posted on: 2014-08-31 22:33:21

If you're trying to set up a global hotkey in Windows, you can use the win32con.VK_* codes to set a hotkey that uses a regular character (e.g. Control-Alt-B), but on OSX it's not as clear. However, a quick look at the patch reveals that all you need to do is pass the ASCII character code for the character you want by using ord() like so:

result = self.RegisterHotKey(hkid,
    wx.MOD_CONTROL|wx.MOD_SHIFT,
    ord('r'))

And now, when you hit Control-Shift-R, the event will fire.

For what it's worth, you can also use ord() with wx.GetKeyState() to detect if a character has been pressed on the keyboard. Not sure how this works for international apps, but it works great for my purposes:

print wx.GetKeyState(ord('h')) # Prints true if the 'h' key is currently pressed
Continue reading...

2m/70m Antenna Testing Chart

Posted on: 2014-08-08 09:40:34

I've been in process of building and testing a dual-band 2m/70cm antenna for several weeks now. Recently, my antenna fell and it came time to rework it. A friend of mine was kind enough to loan me an <a href="http://www.dxengineering.com/parts/mfj-269">MFJ-269. During the tweaking process, it's convenient to be able to just keep track of SWR values over the bands as well as a place for notes and changes to be marked for each test. Maybe you'll find it useful.

Download below.

Continue reading...