So I recently made some adjustments to the way that I do my chats and thought it might be interesting to share. So in keeping with my extremely nerdy and sparse blog posting, I bring you this installment.
The objective: maintaining a bunch of connections to IRC and IM networks as persistently and easily as possible.
ZNC is a very nifty IRC proxy. I’ve used IRC proxies in the past, but I remember not being entirely satisfied with whatever I tried, so I haven’t played with them in some time. Well, Darren Kitchen of Hak5 did a little segment (13 minutes into episode 1104) about ZNC that really interested me.
Apparently, ZNC is written in raw C++, so it’s fast and efficient, it’s exceedingly simple to set up, and it even has a very nice web interface that allows you to manage everything. Being an IRC proxy daemon, ZNC launches, gets and stays connected to any IRC servers or channels that you have configured, and awaits the user to connect. The user is then able to use any IRC client to “reattach” to the IRC sessions in progress: all the channels appear, and the last X (configurable) lines of conversation are thrown at your IRC client, with timestamps.
It can auto-authenticate with nickserv services, prevent you from accidentally parting channels, change your nick/status when you disconnect, try and keep your nick on a server with no nickserv, and a whole bunch of other features through loadable modules. Again, I was really impressed at just how straight-forward ZNC is to set up and use.
So I was just using irssi under screen on my server for IRC, and various GUI apps for AIM/GTalk (Adium on OS X and Pidgin on linux). When I reboot the server or restart irssi, I reconnect to all the servers and usually have to manually identify with a couple nickservs. (I’m sure there’s an irssi script for this; just never bothered.)
Now, ZNC launches when I boot up the server and it connects to about 7 different IRC servers. (I wasn’t even participating on a few of them, just due to the annoyance of rejoining them with the old setup.) I then use irssi under screen (just like before) except this time, I can restart it and nobody can tell. I can even connect with more than one client, so I could leave my irssi running under screen all the time, and also use a GUI or Android IRC client if I feel like it.
I suppose it was after I had ZNC up and going that I remembered a tool I used some time ago. It’s called Bitlbee and it’s essentially an IRC server with a built-in “service” that allows you to connect to any of the popular IM services. So all your buddies are just in the channel with you and you can use “Nick: Hi” to chat with them, or use a PM for a dedicated window.
So, living up to my AIM “screen name”, ThreadUsesIRC, since they wouldn’t make the switch with me, I just made it look like they did. :D
Oh yeah, and if you’re on OS X and want Growl notifications when someone highlights or PM’s you on irssi, this page has a great solution. I have it set to automatically restart 60 seconds after wake on my Air, so I get them even if I haven’t reattached to the session yet.
On Android, using Trillian is still loads easier on the battery than an IRC client for being connected all day.
I think I’ve covered all the big stuff. I really like irssi and its themability, split windows, and its ability be long-running under screen on the server. It means reattaching is an instant away via a global hotkey.
And now I’ve found a really easy to use, full featured tool to keep all my IRC and IM connections open all the time and in one place.
Do leave a comment if you have any thoughts or questions !
Update 2012-08-20: Per request, I’m providing the oscar-thread irssi theme which is basically px’s oscar theme on the irssi themes page with some modifications of my own. Extract the zip and drop the .theme file in your ~/.irssi dir and use /set theme oscar-thread from within irssi to set the theme. Another trick I enjoy is using a particular color profile within my terminal app to visually differentiate it from my other terminal windows.
My story really starts with Trackbox, an experiment of a perl script daemon I wrote long ago that worked like a headless jukebox daemon and allowed a client program to connect to it to provide a user interface to allow the user to browse the collection of music, manage playlists, play, pause, change volume, and all the other things you expect from a media player. It was pretty hacky, but it did the job. When Shank got MPD, the Music Player Daemon, working properly in raw C, though, I retired Trackbox. MPD is very similar to Trackbox: a super lightweight daemon that sits in the background, performing the duties of of music player. If I don’t need to interact with it, I don’t even need to have a client running — like when my linux tower boots and the init script starts it up. MPD resumes playing where it left off before I even launch X. I’ve obviously been a long time fan of even the idea of MPD.
I’ve been using a Mac increasingly over recent years. It started with a 15″ MacBook Pro for work, and eventually I got a 13″ one for personal use. My current and second Mac is a 13″ 2011 MacBook Air, and I’ve been frankly thrilled with it. Macs are great, but but I think a lot of folks endure the frustration of hunting for a great music player that simply doesn’t seem to exist.
Currawong started this excellent thread on head-fi which gives a really great overview and discussion on the most visible Mac music player options. I’ve tried most of them, but never really found one to my liking. Each was either buggy, lacking features, stupid expensive, or didn’t maintain a library, making practical use limited. I have gone back to iTunes every once in a while, and I’ve always been disappointed with crashing or general bloaty slowness. I finally went as far as to uninstall it from my system entirely, reclaiming hundreds of megabytes. (After removing the iTunes.app, I simply used the Preferences screen of “Software Update” to disable future update notifications.) I must say, I don’t miss it, not one little bit.
I finally decided to give MPD a go on the Mac. After using it for perhaps about a month now, I can happily say it is absolutely my new favorite. At home, I mount my server’s RAID array, and at work, I mount my off-site backup, a 3Tb external drive at my desk, so I always have my full collection of mostly lossless music readily at my disposal. I’ve even found a nice way to start mpd with different config files so I can aim it at the server or the local collection, depending on what I need. Being a global hotkey junkie, I’ve mapped restarting mpd with each config to a different key.
MPD is only as nice to use as the client you’re using. Theremin is nice native Mac one, but seems fairly unmaintained at this point. It scrobbles and has album art, but its main drawback for me is that it doesn’t allow browsing the collection by directory structure like most clients. I would recommend giving this one a try; it may fit the bill. There are countless others to choose from, though. I managed to get the excellent, GTK-based Sonata client to run under OS X with the help of MacPorts, but it is a bit kludgey. Client175 is a very nice, web-based one.
I’ve actually found myself liking the terminal-based ncmpcpp client best. It is jam-packed with features, remains blazingly quick, and even has the ability to add a random album, artist, or track to the playlist! I can understand why many folks might not like using a console client, but it works really well for me. Bind it to pop up with a global hotkey, and you have a slick, quick-launching client that you don’t even need running most of the time!
The other client I use is mpc, the command-line interface client. I barely ever actually use it on the command line, though, but through global hotkeys to toggle (play/pause) and play next track. I’ve also written a wrapper for mpc that allows me to play (or append to the playlist) random tracks on random albums. The most unique feature of my tool is the ability to specify “top-level” directories by a pre-designated “short code” and add random tracks or albums only from within one top-level dir at a time. The main directories of my collection are genres, so I can throw on some random ambient music or random drum ‘n bass. For example, with my Alfred extension, I do my ⌘+space to open him up, and type, “rt db” — immediately 10 random drum ‘n bass tracks are added, and the first one plays.
Honestly, this has revolutionized how I listen to my music. I often don’t even have the patience to drill down my folder structure or otherwise hunt for something to listen to. Now I can tell alfred “rt ch” and have random chill out beats. If I want to hear the entire album for one of the songs, ⌘⌥5 will play it.
I use and adore Alfred for many things including setting up these global hotkeys, and I feel it is worth plenty more than what Andrew is asking for it. But if you want something that is free, I recommend BetterTouchTool. Here is the key configuration I use on my Air:
- ⌘⌥1: play/pause toggle
- ⌘⌥2: next track
- ⌘⌥3: play 10 random tracks from entire collection (hold shift to append)
- ⌘⌥4: play 1 random album from entire collection (hold shift to append)
- ⌘⌥5: play the album the currently playing song belongs to (hold shift to append)
- or all the above, holding Control as well causes the command to be directed at my server, which drives the living room speakers/headphone system
- Control+⌥+n: launch ncmpcpp under iTerm2
(Note: I use Control+⌥+letter to launch / switch focus to my most often used apps. This makes me very efficient and I love it.)
MPD does the trick for me. It is slim, efficient, and invisible. I can do 90% of everything I need with a simple global hotkey, and Growl gives me feedback. When I actually do want to browse around or manage the playlist, ncmpcpp or other client lets me do that. There are some folks who look for an “audiophile” player, but the fact is that if the program can decode the file and feed it to the audio device in a “bit perfect” manner, every app should sound the same. I think there are apps that are broken and don’t do this quite right, and I also think there are people who get fall victim to the placebo effect. I really see no reason to worry about the sound quality of MPD — I trust it.
I’ve uploaded my mpct.php script to GitHub in case anyone is interested in it. If you use it, I would love to hear about your experience. If you have any questions about any of this, I would really love to hear from you in the comments!
Installing MPD on OS X is really easy according to their instructions. Simply install homebrew with
/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"
brew install mpd
I really like this brew software manager! I can even install packages they don’t provide with something like
brew create //unkart.ovh.org/ncmpcpp/ncmpcpp-0.5.8.tar.bz2
Of all the IRC clients I’ve used, I always seem to prefer irssi. Not only is the interface very simple and predictable, but using it with the screen utility is simply baller. Screen allows you to detach from a running terminal session without disturbing what’s running and reconnect later. (You can even connect from multiple locations at once!) The power with irssi should be obvious — the IRC session runs indefinitely and you can come and go as you please, all while keeping that connection to the server (or servers).
The requirement for my approach here is that you have a server that is always connected. The idea is that the screen/irssi combo is running there, and you connect to it from your workstation.
I always set up a global hotkey on my computers to open up a terminal and reconnect to the session on the server. I use Openbox on linux and Alfred on the Mac to accomplish this. In Openbox, I just launch my terminal app with the execute command flag, usually -e, passing in the command to execute the magic script on the server (seen between the quotes on the “do script” line below). On Alfred, I bind a global hotkey to this simple bit of AppleScript:
tell application "Terminal" activate do script "ssh -t user@server /home/user/.bin/irssi_screen.sh" end tell
A “trick” I employ here is a little shell script I found somewhere* that checks for an existing instance of screen/irssi, resumes it if one exists, and fires up a new one if not. This way, you can do the exact same action whether you’ve started the irssi session since boot or not. Here is that script, placed at ~/.bin/irssi_screen.sh on the server. Be sure and set that executable bit!
#!/bin/bash # Start a new screen session with irssi or attach to an already running one.
if screen -list | grep "\.irssi" > /dev/null then # running screen -x irssi else # not running screen -S irssi -t irssi irssi fi
You can also set up desktop notifications for mentions/PM’s! I just actually set it up on my Mac with Growl according to this article. I did it once under linux, too.
If anybody out there finds this post helpful or has questions or comments, I would appreciate a comment! It’s quiet around here. :)
* Sorry I can’t give credit on this one; it was some time ago that I set this up. Edit: Actually, I just googled the comment and found about the only place it could have come from, this article on gregoa’s blog. Some other tips there, too.
I’ve been sort of wanting to do a little brain dump of some of the tweaks I’ve done to my Mac OS X desktop to make it a better experience for me. I’ve been a linux user for about 12 years at this point, and I’m the sort of guy who likes to set things up to maximize comfort and efficiency.
I bought a 13″ MacBook Pro at the end of last year so I could have a solid, well-built laptop on which I could load my favorite distribution, Arch Linux. I knew I wouldn’t mind OS X much, either, since I’d been running it on a 15″ MBP at work for a few years at that point and had already figured out a bunch (plus I could share many sw licenses between the two). I’ve had many problems in my various attempts to get linux up and running on this hardware, mostly relating to the EFI bios and the fact that the hacked up touchpad drivers that you can find *still* don’t come close enough to how OS X handles this button-integrated, multitouch touchpad. Until the touchpad is optimized further, I’m not sure I can be comfortable under linux on this laptop.
Anyway, OS X is just fine with me. Of course, it’s still unix-based, but with a better polished user experience. Let’s face it; under linux, you have a million projects with different goals and quality standards, all trying to coalesce and work together. Some distros make it easier than others, but really — it’s a bit difficult to manage sometimes! There is only one OS X for developers to target, and it’s seen enough adoption to get their attention: this causes commercial software! While I totally disagree with Apple’s direction with iOS and refuse to even consider “owning” such a product, I don’t mind (too much) owning one of their computers.
So with that background, allow me to briefly discuss some of my favorite tweaks and tools.
At the most basic level, Alfred is a quick-launch tool, similar to Quicksilver. It carries all the functionality of Spotlight, serving as an extremely handy application launcher and file finder, but it also can quickly look up words in the dictionary, do math, or look up things on arbitrary websites with custom searches. You hit your global hotkey (I use ⌘+Space) then type a keyword. When one purchases the very modestly-priced “Powerpack”, however, a startling number of options open up: one can access their contacts, email, clipboard history, eject drives, lock your screen, suspend, and even use fancy, quick navigators / remote controls for your filesystem and iTunes.
One of my favorite features and in fact things I wanted to specifically mention in this article, though, is global hotkeys. Not only do I put often used AppleScripts and shell scripts under easy-to-access hotkeys, accessible from anywhere in the OS, but I put often used applications, too. This allows me to launch and switch to my browser, IM, etc even faster that Alfred normally allows. That means no more fumbling with ⌘+Tab; I just go straight to the app I want. (I use Control+Option+<letter> for most of these.)
Andrew recently began working full-time on Alfred which makes me even that much more happy to support him. He seems to add all these amazing features without slowing down the app, and that’s something that he’s called out as being a key point for the tool — it will remain FAST, and apparently extremely stable, too. He has shared screenshots of the upcoming “extensions” preference screens which should allow for insane levels of customization. I’m excited to see and take advantage of what is to come.
I should add that Alfred is probably my favorite app on my Mac and it would be the one app I would want to take back with me to the linux side if I could.
Better Touch Tool is a free app, and an extremely useful and flexible one, too. It has the same hotkey ability as Alfred, with in fact richer options. It also allows you to bind commands involving the mouse and even define custom gestures for a multitouch touchpad. One of my favorite things it does is let me move/resize windows without hunting for the little corner or titlebar! I hope Alfred will eventually obsolete this tool for me, but I do find myself still using it for a couple things.
I actually don’t find myself using this one on my 13″ as much, but at work when I have 3 screens and really like tiling my windows so I don’t waste any space, I find this one very useful. It allows you to very quickly place windows in predefined rectangles that you can draw in a grid that divides your screen into a number of sections that you define. (I use 6×6.) It’s a very handy app when you know you want to put windows in particular positions often.
I’m a web developer by trade, so my text editor very important to me. I’ve been a Vim user for a very long time, but I used TextMate full time for a few years. It was only about a year ago now that I finally got fed up enough waiting for TextMate 2 that I switched back to Vim for my text editing, and now that I’ve learned a bunch more and found the plugins, I haven’t looked back for a second. I’d highly recommend TextMate if you don’t want to put in the effort to learn Vim, but the payoff of being really comfortable in Vim is really huge to me. I’m constantly amazed with just how easy things can be in Vim… if you know how. :) I still use TextMate for a lot of casual things, though… like writing this post, actually!
Edit: I forgot to mention that I would be lost without PCKeyboardHack which remaps my caps lock key to make it another escape key. Swapping out a never-used key with a mega commonly used key (in Vim) is a mega win.
I’ve known about the security considerations of storing my data in Dropbox for some time, but when they broke their authentication for 4 hours recently (any or no password would log someone into any account) I was nudged over the edge. Now I use a git repository on my server and the SparkleShare tool on my machines. SparkleShare adds Dropbox-like functionality to my git repo, keeping all machines in sync by automatically pushing and pulling updates as needed.
- Make the dock icons dim a bit for apps that are hidden with this tip.
- Once you’ve replaced it with Alfred, hide the Spotlight icon in your menubar with the trick in the highest rated response over here.
A Few Others
- iStat Menus is my favorite menulet package. It replaces the clock/cal/battery indicators and adds every cpu/net/ram/hdd/temp/etc monitor you need, with plenty of features along the way. It’s smooth to me. If you want something free, MenuMeters is a good alternative.
- Sparrow is, bar none, the best gmail experience I’ve ever had. I would say it’s well worth the price if you’re a moderate Gmail user.
- Chrome is my favorite web browser by a pretty long shot.
- Adium is an excellent IM client supporting most protocols.
- Audirvana and Vox are both great music player options if you’re like me and want to play FLAC files and/or hate iTunes.
- Cyberduck is an excellent free ftp/sftp client.
- LiquidCD is my favorite CD burning app.
- My beloved Mixxx runs on OS X! (Although I always use it on my tower under linux.)
- The Unarchiver is a free archive compression/decompression tool.
- Onyx is a great tool that does many system tweaks including clearing logs (opening gigs of tied up drive space) and moving the OS X dock over to one side. I am a huge fan of cornering the dock this way so I get a bit more usable screen real estate.
- XLD is a most excellent cd ripping and transcoding tool.
- TeamViewer lets you easily share a desktop for remote support etc. It’s free for my purposes.
Whew! I hope that was useful to someone. :)
With the Droid X coming out tomorrow, there’s quite a bit of attention being drawn to the fact that the fancy new Android phone is using the same encrypted bootloader as the Motorola Milestone, rendering it very difficult to crack. According to this post at androidpolice.com, the bootloader is using a “proprietary encrypted private key scheme” which pretty much requires any ROM you’re going to install has been blessed by Motorola.
This is totally lame.
I bought into the Android platform because it stands for openness and freedom. And really, they do a pretty darned good job at it still. But the fact is that there are some things that I’ve come to take for granted on my Droid because some hacker has enabled them.
My reasons for rooting are:
- I can theme my phone UI
- I can uninstall apps I don’t want (like Amazon MP3. WTF!)
- I can turn off the LEDs behind the 4 main buttons under the screen (Seriously? I need root for this?)
- I can overclock (even though I don’t really do it since FroYo)
- I can tether (I basically never do this — no need.)
Why won’t the phone makers let me do these things?? The only one that could damage anyone on their end is tethering since the carriers actually want extra money for the feature. So restrict it!
I suppose one could cause damage by overclocking and stressing the phone too much… So add some kind of hardware indicator so it would be known if the phone was ever overclocked, and void the warranty if it was! They already do this for water damage!
I was happy not rooting for a long time, so (stock) Android does a good job of not making me feel restricted. I wholeheartedly agree with those who say the phones should all be unlocked and capable of installing custom ROMs like the developer-oriented Nexus One, but the realistic side of me is just asking for a little more flexibility in the stock offering. Why the heck not allow me to do some of these things to my phone??
For nine days now, I’ve had the pleasure of running the leaked Nexus One build of the highly-anticipated FroYo (2.2) release of Android in the form of the Cyan-themed version of JRummy’s FroYo Kangerade v1.0 (FRF57). I guess with a little modification, Cyanogen (whose rom Kangerade is based on) and JRummy can adapt a binary Nexus One build for the Droid. Kangerade v1.1 has since been released, and he is now beta-testing the next version, which will be built from the source code that Google just released through their AOSP (FRF83).
It’s excellent. Apart from the handful of nice-to-have features, FroYo’s new ability to run entirely with the JIT compiler means a real-world speed boost of 4-5 times, they say. It’s really quite a lot smoother all around: general transitions and effects, switching between apps, etc… It pretty much feels like a hardware upgrade to me. And if I’m not mistaken, I’m getting better battery life with FroYo, too!
I must say, I am very pleased with how well android is doing. Especially in the last few months, I’ve seen tons of sweet apps and mods, and hackers like Cyanogen and JRummy just keep pushing the limits.
And what’s funny is that even though there are some better-spec’d phones coming out now (Incredible, Evo 4G, Droid X), they all seem to have their flaws (weak battery, flimsy build, failing screen, *no keyboard?!*). I’m not even jealous of another phone yet!
So I’ve owned the Motorola Droid for just over a month now, and I’m just loving it. Yes, the phone isn’t without its shortcomings, but many of them are getting fixed via software updates. I don’t really want to post another review since there are a bunch of good ones already, but rather list my very favorite apps.
- ConnectBot is an truly excellent ssh client with plenty of features — including easy ssh tunnel managing!
- Dolphin is a good replacement web browser with lots of fancy features.
- NewsRob is the best way I’ve found to read RSS. It syncs with Google Reader (like NetNewsWire on my Mac!) and offers a very comfortable way to navigate and read the news.
- Google Voice, if you can get an invite, is amazing: free phone calls / texts in and out, visual voicemail, vm transcriptions, call recording…
- Google Listen is a really great podcast downloader/player.
- HandyCalc is a very powerful calculator with graphing, algebra, and unit conversion features.
- Google Sky Map turns your phone into a guide to the sky. By reading from the accelerometer and compass sensors in the phone, this app shows what should be seen in the sky when looking in the phone’s oriented direction.
- Pandora, Last.fm, StreamFurious, and Jamendo are all great apps for streaming music down to your phone. Amdroid lets me connect to my Ampache instance on the server back home and stream anything from my collection.
- Qik lets me stream (and archive) live video from my phone.
- SwiFTP starts up a simple ftp daemon that I can connect to from my PC to manage files on the SD card. This is more convenient than plugging it in.
- Mythmote lets me remote control my MythTV DVR software on the TV.
- SqueezeDroid lets me remote control my SqueezeBox.
- TransDroid lets me remote control my torrents running on the server.
- Seesmic is a nicer Twitter client than Twidroid, I think. Maybe not as many features, but it’s clean, totally free, and includes bit.ly API support.
- Meebo IM is my favorite IM application of the bunch. It supports all the major networks.
- MixZing is a great improvement over the native media player, though I haven’t been playing local media much on my Droid. I wouldn’t really want to use my Droid as my primary media player. While the built-in speaker is quite good, the headphone output is not the best from a portable.
The Android user base is currently growing by leaps and bounds with the release of the Droid and other exciting new phones. It seems like every day there’s a great new app and several updates to existing apps. I’m very much enjoying being a part of it!
When Miro 1.2 came out, I decided to give it another try after some previously failed attempts due to annoying bugs. Well, I’ve been using this free and open source, next generation video platform on my Mac for a while now, and I must say it’s quite nice if you fancy yourself watching some of the great, free video content available on the internet.
Miro is RSS + Bittorrent. Find sites with cool videos that interest you, subscribe to their feeds, and when new content is published, you can have it downloaded and waiting for you by the time you realize it’s there. It’s just so smooth the way I can play the first video, and all the new content plays like my personal TV station. Cmd+F throws me into full-screen mode. It didn’t used to work nearly this well, and I’m just all so very pleased with today’s offering. (It will even search and play YouTube videos.)
Ok, so you want to try this. Click the “Miro” link above and grab the player. It comes with some default channels, but I’ve deleted all but the Onion News Network. The Miro Guide appears to be a nice index of most/all of the content available for the platform, but please allow me to recommend a few of my favorites.
- Revision3 is The TV Network of Kevin Rose (of TechTV and Digg fame) with great shows like Tekzilla, Systm, and of course Diggnation. I also have come to watch the goofy Internet Superstar… I haven’t even tasted many of the Rev3 shows yet!
- Mahalo Daily is a great 5-day/wk short form (3-5 mins) show with Veronica Belmont. (Although she’s about to leave…) They visit someone and show of something… usually very interesting stuff. I like the one about the dude who makes music with Gameboys.
- WebbAlert is another daily, short form show with Megan Webb. Just a quick overview of the tech news.
- GeekBrief.TV is yet another daily, short form show with the bouncy character that of Cali Lewis. Again, it’s an overview of the tech news. Maybe a product review or interview here and there.
- commandN is a longer form (15-20 mins), weekly show with Amber MacArthur, Will Pate, and others. They talk about the news and share cool website picks. Amber’s brother, Jeff, usually has a longer segment where he usually reviews a product.
- Hak5 Is a great, long standing show with a great crew. They hack stuff and talk about it on the show.
- Cranky Geeks is a talk show with John C. Dvorak.
- DL.TV is a tech show with some of the folks from TechTV.
Also, anything from Leo Laporte is fantastic. I’m a very regular listener of Security Now, TWiT, MacBreak Weekly, Net@Nite, and Windows Weekly on his TWiT.TV (audio) podcast network. While there aren’t any regular, internet-available video shows from him yet, he’s been talking recently about a new studio he’s setting up where he’ll start doing some video shows. He’s a great personality… One to watch.
I hope I’ve captured the interest of some new internet TV consumers. Watching this web-based, independent content has really never been this easy.
Celemony is set to release Direct Note Access in Autumn of 2008. There is a nice video on the DNA page that explains what it does, but this software is able to identify and isolate different voices within a single audio recording. The user can then change the pitch of and mute individual notes without affecting the overall mix! This is the first piece of software that allows you to reach into a simple, flat audio stream and manipulate its components in this way.
It’ll be really interesting to see how artists use this product to remix familiar tunes.
Holy crap this is totally awesome. Korg will soon release Korg DS-10: a music composition tool that runs on the Nintendo DS. Check out the short video for an idea what it does. It seems like it could be significantly more versatile than the Kaossilator Touchpad Synthesizer.