freenerd-blog
freenerd-blog
Freenerd
17 posts
Don't wanna be here? Send us removal request.
freenerd-blog · 13 years ago
Text
Learning Ruby & Rails
Recently the question in the Readmill company chat came up on how what read to learn Ruby and Rails best. This is the links that were posted: http://pragprog.com/book/rails4/agile-web-development-with-rails http://railscasts.com/ http://rubykoans.com/ http://mislav.uniqpath.com/poignant-guide/ http://techiferous.com/2010/07/roadmap-for-learning-rails/ http://www.codecademy.com/ http://www.codeschool.com/ http://railsforzombies.org/
0 notes
freenerd-blog · 13 years ago
Text
Require custom gems in development
When developing you often come about a part in a gem you want to change. You will fork the gem and/or create a pull request later. But for testing, you often want to see how your change performs locally int he context of your project first.
So you locally clone the gem, start making your changes. To integrate, use this code:
$LOAD_PATH << 'local/path/to/gem/lib' require 'gemname.rb'
For example in Rails you can put it in your `application.rb`. Also uncomment the orginal gem in your Gemfile. Once you are happy with your changes, push them to Github. To use the with bundler, put this in your Gemfile:
#gem 'gemname' gem 'gemname', :git => 'git://github.com/user/gemname.git', :branch => 'your_branch'
Note: Your git repository has to be publicly accessible.
16 notes · View notes
freenerd-blog · 14 years ago
Text
Scrolling in screen
In GNU screen you can't use the normal terminal scrolling. One way to still retrieve your history is by switching into copy mode via
C-a [ or C-a ESC
You can then use the arrow or movement keys
h j k l
for scrolling. Exit with ESC. Yay.
1 note · View note
freenerd-blog · 14 years ago
Text
Disable logger in Rails & Rspec
Parts of my Rails code have a good portion of logging code, because I want to observe it's behavior closely in the real world. I will probably remove the logging code, once I'm confident enough with the code
But during testing these log lines distract me from the test results and hide other stuff. So I decided it is better to disable it. I did this by adding the following code to /config/environments/test.rb
# disable logger class EmptyLogger < StringIO def write(input) # do nothing end end config.logger = Logger.new(EmptyLogger.new)
This writes all log messages to a StringIO object, which does nothing with it ...
16 notes · View notes
freenerd-blog · 14 years ago
Text
Pretty JSON with curl
When using curl to call REST APIs returning JSON, it is often hard to see the structure of the response. We need to prettify that! Fortunately, the Ruby json gem has a script called "prettify_json.rb", that we can just pipe JSON to. Awesome.
Install the json gem
gem install json
Use it
$ curl "http://api.soundcloud.com/users/4126.json" | prettify_json.rb { "id": 4126, "permalink": "diskodna", "username": "DiskoDNA", ... "website": "http://www.diskodna.de", "website_title": null, "online": false, "track_count": 11, "followers_count": 545, "followings_count": 311, "public_favorites_count": 93 }
0 notes
freenerd-blog · 14 years ago
Text
Screen
When working remote via SSH, you often want to make sure that your processes continue to run, even if your connection dies. Screen is the tool for that. It creates shell sessions, that are detached from your terminal session. Thus they run, without you being connected. Also different users can share screen sessions with each other.
This are some of the basic commands:
Open a new screen session
screen
Get out of a running screen session (detach from terminal)
screen -d C-a C-D
What screen sessions are already there?
screen -list
If there already is one, let's open that (attach it to your current terminal session)
screen -r
Or specify the screen to open
screen -r [sessionowner]/[pid.tty.host]
Read more on the screen man page
man screen
Another tip, put this in your ~/.screenrc to have a footer displaying all open screens:
caption always "%{kg}%?%-Lw%?%{bw}%n*%f %t%?(%u)%?%{kr}%?%+Lw%?"
2 notes · View notes
freenerd-blog · 15 years ago
Text
Keys in Ruby Hashes are Case Sensitive
> a = {} => {} > a['content-type'] = "My first string" => "My first string" > a['Content-Type'] = "My second string" => "My second string" > a => {"content-type"=>"My first string", "Content-Type"=>"My second string"}
0 notes
freenerd-blog · 15 years ago
Text
Avoid clutter in irb
When using irb, the prompt might get cluttered bad, if you handle huge objects, since irb always returns the last object. To clean this up, just append ; nil to your input. This will return nil, since it is the last object.
Cluttered:
> numbers = (1..1000).collect { |i| i } => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000]
Uncluttered:
> numbers = (1..1000).collect { |i| i }; nil => nil
(I am aware that this example is a bit crappy, but nevermind)
1 note · View note
freenerd-blog · 15 years ago
Text
See surrounding lines in grep
When you search for something with grep, you sometimes need some context for the search results. Use the following arguments for that:
grep -B 2 foo bar.txt # 2 lines before every match grep -A 3 foo bar.txt # 3 lines after every match grep -C 1 foo bar.txt # 1 line before and after every match grep -n 1 foo bar.txt # 1 line before and after every match
0 notes
freenerd-blog · 15 years ago
Text
Compare View on Github
GitHub has introduced compare view about half a year ago. It basically is a nice frontend to git diff. You can specify a start and an end point for the diff. This can be commit hashes, tag or branch names:
http://github.com/<USER>/<REPO>/compare/[<START>...]<END>
For example, this is everything that happened between some commit a the current master branch in the Browsemytweets repository. We are using this view for code reviews. Once a feature in a topic branch is done, we sit down together on one computer and go through the diff. The Github view is nicer than the plain-text diff and even includes comments made on github throughout the way ... The only thing missing is doing new comments in compare view ...
1 note · View note
freenerd-blog · 15 years ago
Text
Run only some tests in RSpec
When working with fairly big test suites in RSpec you do not want to run all tests always. Especially with Red-Green-Refactor you are only interested in some tests, sometimes even only in one describe block. RSpec helps you with this. You can specify specific files to be run:
spec spec/models/my_model_spec.rb spec spec/models/my_model_spec.rb spec/models/your_model_spec.rb
Sometimes spec-files get too big. Luckily RSpec allows to only execute blocks starting at a certain line in a file.
spec -l 548 spec/models/my_model_spec.rb
0 notes
freenerd-blog · 15 years ago
Text
Copy/Paste in Terminal on Mac
The following two commands let you use the Mac OS X clipboard in terminal:
pbcopy pbpaste #examples cat text.txt | pbcopy pbpaste > copy_of_text.txt
0 notes
freenerd-blog · 15 years ago
Text
Executing external commands in vim
In vim I sometimes want to execute commands on the command line. Switching to a console window sometimes seems too much of a hassle. Alternatively you can execute commands in vim.
:! command # example :! ls -tl | head -n10
The bang symbol ! switches to the command line. In the example I look at the latest changed file in my working directory.
0 notes
freenerd-blog · 15 years ago
Text
Global .gitignore
To globally ignore files do the following:
git config --global core.excludesfile ~/.gitignore
then create the .gitignore file, open it and put all the stuff inside you want to ignore. Mine looks the following way at the moment:
# RVM RC .rvmrc # VIM *.un~ # Mac OS X Finder DS_Store .DS_Store
[found in peepcode google group]
0 notes
freenerd-blog · 15 years ago
Text
Project-Wide Search in Vim
I am using ack for project-wide search in vim. This vim plugin replaces grep in vim to use ack instead. You can search for something in the following way then:
:grep "search_pattern" location # search_pattern = regex pattern # location = absolute or relative path #example :grep "require\('debug'\)" .
This will open a vim quickfix window. Pressing enter jumps to the first search result. Here are more useful commands:
:cc [nr] # jump to result number [nr] :cn # jump to next result :cp # jump to previous result :cl # display the list of all errors
2 notes · View notes
freenerd-blog · 15 years ago
Text
Installing old versions with Homebrew
Sadly Homebrew (in current version 0.7) does not support installing old versions of software. If you want to install older versions of it anyway, you have to alter the Formulas for the software.
There are two ways to do this:
1.
Go to the directory where your Homebrew Formulas are. I think the default is:
cd /usr/local/Library/Formula/
and there you can directly alter the Formulas, like changing url and version of the specific software or create completely new Formulas.
2.
If the version already has been in an older Formula in the Homebrew repository, you can checkout that old version. To find out, if that version already has been in the Formula and which commit it has been in, look at the Formula history on Github.
For example this is the history for Cassandra. If we want to install say version 0.6.2. we need the corresponding commit hash which is in this commit 19d9c92c522923a5ec80. To check the formula out, do the following
cd /usr/local/Library/Homebrew/ git remote add origin http://github.com/mxcl/homebrew.git git pull origin master git checkout 19d9c92c522923a5ec80 -- ../Formula/cassandra.rb brew install cassandra
0 notes
freenerd-blog · 15 years ago
Link
0 notes