Feb 012011
 

In the last couple of months I have been plagued by a problem with the system that hosts this website.  A nice kernel panic followed by a random uptime and a crash.  This is a bit difficult to swallow when the server is around 1200 miles away but a reboot and away it goes again.

The actual error is show here:

Feb 01 14:13:27 [kernel] kernel BUG at mm/filemap.c:128!
Feb 01 14:13:27 [kernel] Modules linked in:
Feb 01 14:13:27 [kernel] Pid: 13604, comm: apache2 Not tainted 2.6.36-hardened-r6 #1 0K8980/Dimension 3000
Feb 01 14:13:27 [kernel] EIP: 0060:[<c105af4f>] EFLAGS: 00010046 CPU: 0
Feb 01 14:13:27 [kernel] EIP is at __remove_from_page_cache+0x44/0x91
Feb 01 14:13:27 [kernel] EAX: 00000000 EBX: c16acf40 ECX: 00000015 EDX: 00000015
Feb 01 14:13:27 [kernel] ESI: de877d7c EDI: ffffffff EBP: 00000015 ESP: dc4abe28
Feb 01 14:13:27 [kernel]  DS: 0068 ES: 0068 FS: 00d8 GS: 0033 SS: 0068
Feb 01 14:13:27 [kernel]  de877d7c c16acf40 c105afbc c16acf40 de877d7c c1061079 c16acf40 00000000
Feb 01 14:13:27 [kernel] <0> c1061123 de877d7c 00000015 00000006 ffffffff 00000000 0000000e 00000000
Feb 01 14:13:27 [kernel] <0> c1641f40 c1641f60 c1641f80 c1641fa0 c173ecc0 c1695de0 c16acf40 c15d2f00
Feb 01 14:13:27 [kernel]  [<c105afbc>] ? remove_from_page_cache+0x20/0x27
Feb 01 14:13:27 [kernel]  [<c1061079>] ? truncate_inode_page+0x6c/0x7d
Feb 01 14:13:27 [kernel]  [<c1061123>] ? truncate_inode_pages_range+0x99/0x23a
Feb 01 14:13:27 [kernel]  [<c10612cd>] ? truncate_inode_pages+0x9/0xc
Feb 01 14:13:27 [kernel]  [<c10fa452>] ? ext4_evict_inode+0x83/0x265
Feb 01 14:13:27 [kernel]  [<c108dab2>] ? evict+0x17/0x7b
Feb 01 14:13:27 [kernel]  [<c108e211>] ? iput+0x182/0x1df
Feb 01 14:13:27 [kernel]  [<c108b58e>] ? d_kill+0x2a/0x43
Feb 01 14:13:27 [kernel]  [<c108c292>] ? dput+0xf3/0xfb
Feb 01 14:13:27 [kernel]  [<c107e289>] ? fput+0x191/0x1b3
Feb 01 14:13:27 [kernel]  [<c106e14f>] ? remove_vma+0x34/0x52
Feb 01 14:13:27 [kernel]  [<c106f26a>] ? __do_munmap+0x257/0x2a8
Feb 01 14:13:27 [kernel]  [<c106f335>] ? sys_munmap+0x49/0x60
Feb 01 14:13:27 [kernel]  [<c1378005>] ? syscall_call+0x7/0xb
Feb 01 14:13:27 [kernel] ---[ end trace 4598df0f375c22c4 ]---
Feb 01 14:13:27 [kernel] kernel BUG at mm/filemap.c:128!Feb 01 14:13:27 [kernel] Modules linked in:Feb 01 14:13:27 [kernel] Pid: 13604, comm: apache2 Not tainted 2.6.36-hardened-r6 #1 0K8980/Dimension 3000               Feb 01 14:13:27 [kernel] EIP: 0060:[<c105af4f>] EFLAGS: 00010046 CPU: 0Feb 01 14:13:27 [kernel] EIP is at __remove_from_page_cache+0x44/0x91Feb 01 14:13:27 [kernel] EAX: 00000000 EBX: c16acf40 ECX: 00000015 EDX: 00000015Feb 01 14:13:27 [kernel] ESI: de877d7c EDI: ffffffff EBP: 00000015 ESP: dc4abe28Feb 01 14:13:27 [kernel]  DS: 0068 ES: 0068 FS: 00d8 GS: 0033 SS: 0068Feb 01 14:13:27 [kernel]  de877d7c c16acf40 c105afbc c16acf40 de877d7c c1061079 c16acf40 00000000Feb 01 14:13:27 [kernel] <0> c1061123 de877d7c 00000015 00000006 ffffffff 00000000 0000000e 00000000Feb 01 14:13:27 [kernel] <0> c1641f40 c1641f60 c1641f80 c1641fa0 c173ecc0 c1695de0 c16acf40 c15d2f00Feb 01 14:13:27 [kernel]  [<c105afbc>] ? remove_from_page_cache+0x20/0x27Feb 01 14:13:27 [kernel]  [<c1061079>] ? truncate_inode_page+0x6c/0x7dFeb 01 14:13:27 [kernel]  [<c1061123>] ? truncate_inode_pages_range+0x99/0x23aFeb 01 14:13:27 [kernel]  [<c10612cd>] ? truncate_inode_pages+0x9/0xcFeb 01 14:13:27 [kernel]  [<c10fa452>] ? ext4_evict_inode+0x83/0x265Feb 01 14:13:27 [kernel]  [<c108dab2>] ? evict+0x17/0x7bFeb 01 14:13:27 [kernel]  [<c108e211>] ? iput+0x182/0x1dfFeb 01 14:13:27 [kernel]  [<c108b58e>] ? d_kill+0x2a/0x43Feb 01 14:13:27 [kernel]  [<c108c292>] ? dput+0xf3/0xfbFeb 01 14:13:27 [kernel]  [<c107e289>] ? fput+0x191/0x1b3Feb 01 14:13:27 [kernel]  [<c106e14f>] ? remove_vma+0x34/0x52Feb 01 14:13:27 [kernel]  [<c106f26a>] ? __do_munmap+0x257/0x2a8Feb 01 14:13:27 [kernel]  [<c106f335>] ? sys_munmap+0x49/0x60Feb 01 14:13:27 [kernel]  [<c1378005>] ? syscall_call+0x7/0xbFeb 01 14:13:27 [kernel] ---[ end trace 4598df0f375c22c4 ]---

The uprecords for this machine:

     #               Uptime | System                                     Boot up
----------------------------+---------------------------------------------------
     1    24 days, 20:31:52 | Linux 2.6.32-hardened-r2  Thu Nov 25 20:58:34 2010
     2    18 days, 09:10:28 | Linux 2.6.36-hardened-r6  Sat Jan  8 12:31:38 2011
     3    15 days, 12:41:25 | Linux 2.6.32-hardened-r9  Fri Oct  8 09:48:07 2010
     4    14 days, 03:43:24 | Linux 2.6.32-hardened-r2  Wed Nov  3 11:29:55 2010
     5     9 days, 19:44:59 | Linux 2.6.32-hardened-r2  Sun Oct 24 15:14:10 2010
     6     7 days, 21:49:22 | Linux 2.6.32-hardened-r2  Mon Dec 20 17:31:43 2010
     7     7 days, 17:34:24 | Linux 2.6.36-hardened-r6  Tue Dec 28 15:58:45 2010
     8     7 days, 08:53:26 | Linux 2.6.32-hardened-r2  Thu Nov 18 11:55:57 2010
     9     5 days, 16:58:46 | Linux 2.6.36-hardened-r6  Wed Jan 26 21:43:51 2011
    10     3 days, 00:09:43 | Linux 2.6.36-hardened-r6  Wed Jan  5 12:17:33 2011
----------------------------+---------------------------------------------------
->  13     0 days, 00:14:46 | Linux 2.6.36-hardened-r6  Tue Feb  1 15:02:26 2011
----------------------------+---------------------------------------------------
1up in     0 days, 00:40:31 | at                        Tue Feb  1 15:57:42 2011
t10 in     2 days, 23:54:58 | at                        Fri Feb  4 15:12:09 2011
no1 in    24 days, 20:17:07 | at                        Sat Feb 26 11:34:18 2011
    up   115 days, 09:00:18 | since                     Fri Oct  8 09:48:07 2010
  down     0 days, 21:28:47 | since                     Fri Oct  8 09:48:07 2010
   %up               99.230 | since                     Fri Oct  8 09:48:07 2010

In conclusion, I’m suspecting a hardware issue but if anyone has any ideas as to what might cause this type of problem I’d be more than happy to hear possible causes and solutions until I get a replacement server built out.

Jan 202010
 

Today I found out that some machines can’t handle the load I throw at them. The following was the status of my web server after apache filled up its memory. A quick (quite slow actually) reboot of apache and everything was stabilized.

!Ridiculous System Load

Apr 162008
 

It’s strange that I’m the only tutor for our Computer Science and Information Systems department, but I can live with that. What irks me though, is how these students come to gain their knowledge about programming.

To be fair I will not mention names and not blame anyone. I truly believe this to be a simple matter of miscommunication and easily solved. I also feel that the scope of these classes needs to be monitored a little more closely, and what follows is simply what I understand the classes should teach in an introductory programming class and my understanding of what is being taught in our introductory programming classes.

The classes in question are our first introductory classes to C++ and then our follow up course. These courses together should leave the student comfortable with the basic constructs and built-ins of C++. It should also make them comfortable with classes, and working in an OOP(Object Oriented Programming) paradigm. The problem crops up in the transition between these two classes. It seems (and I know this because of my tutees) that their understanding of the basics gets muddled in the first class, and thus they cannot build upon this knowledge in the second class. I have heard many things about what may be happening wrong in this class to cause such a terrible calamity, but let us refocus and start by going over what should be covered in the first class in order to succeed in the following class and throughout the whole program.

In an introductory programming class it should be important for students to become familiar with functions, control structures, and various keywords (not all of them mind you, just most of them). Thus they should be comfortable looking through a piece of code like the following and have an understanding of the majority of it:

#include
#include

using namespace std;

int factorial(int n)
{
if (n == 0)
return 1;
return n * factorial(n – 1);
}

int main(int argc, char argv[])
{
if (argc != 2)
{
cerr << “You must pass a number to get the factorials!” << endl;
return EXIT_FAILURE;
}
int n = argv[1] + 1;
while (–n, n > 0)
cout << “The factorial of ” << n << ” is ” << factorial(n) << “.” << endl;
return EXIT_SUCCESS;
}

They should also be able to understand Makefiles (rudimentary Makefiles not automake or anything of its ilk), header files vs. source files, the stages of compiling and how to deal with different errors in each (i.e. A linking error versus a compilation error), and they should understand array mechanics (if not exactly what they are then how to use them). They should be able to put all of this together, and make a nice modular program that allows them to expand and reuse code in an intelligent way. Then if there is time (although this gets covered in great detail in the second class) a quick coverage of structs should ensue. At this point the education they should have gained from the first class should be enough of the basics that they understand the constructs of the langauge and can start reading simple programs like the one above.

In reality, this goal (mind you this is my personal goal and does not reflect the goals of the professors or the department) was not met, and based on experience with people I’m tutoring who are in the second class at this time, it is quite obvious where their shortcomings are. Those shortcomings are outlined below:

  • Lack of understanding as to how looping control structures function
  • Lack of knowledge as to how arrays function and how to use them
  • Lack of knowledge as to how the compiler actually takes the source code (possibly spread over many files) and makes an executable
  • Lack of understanding as to how to solve simple problems like manipulating all the entries of an array
  • Lack of understanding as to how to do a simple search or utilize functions provided in an API(Advanced Programming Interface)

This list will be updated appropriately as I gain more knowledge on what the students actually know. Thus this list may have inaccuracies and shortcomings, and may not reflect reality.

The list goes in in much the same fashion here after, and this is obviously a product of the class not fulfilling its primary purpose of laying down a foundation that the students can build on. To better achieve this goal it may be necessary to at the very least recommend some supplemental texts (see list at the end of this article for recommended books for the various programming courses).

Now, what I’ve heard reports of in this class is that:

  1. These concepts outlined above are not getting covered in the detail that is required of them in the subsequent classes (which only confirms what I’ve observed in students)
  2. There has been a report that a new teaching tool Alice was used in the introduction class.

The first point appears to be just a shortcoming of the class, and could be ameliorated by simply spending more time and going over more examples of the concepts in question.

Also, the students themselves need to realize that they control their education and must participate for a class to truly be successful for them. When entering a class, students should think to themselves what do I want from this class, and how can I have this class help me achieve that goal? By asking questions and looking for more material on the specific area of study the student is interested in, they can get a much more fulfilling experience and better understanding of the topics involved, but may hit a point where they just can’t keep up with the class and need further assistance that isn’t self-guided. Tutors are available from the tutoring department, and should not be shied away from. If you really want to learn the material you have to be willing to get help and help yourself towards that goal. That’s only part of the problem, students who do try are still having a hard time within the status quo.

The second point requires that I do not put forth my personal opinion, but does require that I state its purpose (from the Alice website):

“Alice is an innovative 3-D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a freely available teaching tool designed to be a student’s first exposure to object-oriented programming. It allows students to learn fundamental programming concepts in the context of creating animated movies and simple video games. In Alice, 3-D objects (e.g., people, animals, and vehicles) populate a virtual world and students create a program to animate the objects.”

“In Alice’s interactive interface, students drag and drop graphic tiles to create a program, where the instructions correspond to standard statements in a production oriented programming language, such as Java, C++, and C#. Alice allows students to immediately see how their animation programs run, enabling them to easily understand the relationship between the programming statements and the behavior of objects in their animation. By manipulating the objects in their virtual world, students gain experience with all the programming constructs typically taught in an introductory programming course.”

In conclusion, it is my perception that there is a missing communication link in the way these classes are handled, but it’s not just between the professors of the two classes (they seem to not have a smooth break between the classes), it’s between the students and the professors that the communication has really broken down. The students must speak up for their education or they may see it going down a path that does not maximally further their education. This is wider spread than just the simple class example I’ve given here. Almost everywhere one looks, it seems that students are becoming more lethargic; pushing to just get through the courses. There is a lack of genuine interest in the education being provided, and more of a view that college is now a necessity to continue in society. Unfortunately, that has begun to be so, but we can still fight for the freedom of our minds.

Supplemental Books for CSIS Courses:
152

C++ in Plain English by Brian Overland

252

C++ in Plain English by Brian Overland

352

C++ in Plain English by Brian Overland

Beyond the C++ Standard Library: An Introduction to Boost by Björn Karlsson

C++ Coding Standards: 101 Rules, Guidelines, and Best Practices by Herb Sutter & Andrei Alexandrescu

Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John M. Vlissides

XBOX 360

 Uncategorized  Comments Off
Oct 012007
 

I finally broke down and purchased an XBOX 360 with Halo 3. It is an incredible improvement over the first system, and is backwards compatible. The first intriguing thing about the system from a networking perspective is their idea of “Open”, “Moderate”, and “Closed” NAT. I didn’t know that this was possible, but after a few sniffing experiments later I learned a few things:

  • XBOX Live uses port 3047
  • XBOX Live uses UDP
  • XBOX Live thinks open NAT means that port and protocol is forwarded to your XBOX through the NAT device

This leads me to the conclusion that the XBOX Live and Vista ready devices are just engineered to provide holes in your network. I suppose this is fine for most, but what if you want that security back?

Linksys WRT54GL

 Uncategorized  Comments Off
May 262007
 

Today I received a new WRT54GL (Linksys Wireless Router). Upon setting the thing up to take the place of my old access point, MN-700 (Microsoft Wireless Router), I found that there are a couple of annoying quirks to this type of router:

  1. 1. If it’s supposed to be a bridging device, don’t use the WAN port. This is by far the worst design flaw I’ve seen. If I select router vs. gateway (which are the only options I received) I expect the WAN port to get bridged into the 4-port switch. This is not the case, and caused me an hour of headaches.
  2. 2. Is a shared key necessary for RADIUS authentication (I’m researching this one, but it seems a little paranoid)?

Otherwise, the thing is incredible. I can be on the far side of my house in the basement, and only get as low as approximately 50% connection status for wireless. I also have a couple of new to do items:

1. Set up a local LDAP for user authentication, and set up pam properly (thank goodness I’ve done this before).
2. Get FreeRadius running, and hooked into the LDAP server.
3. Set up the new WRT54GL (Linksys Wireless Router) to work with the RADIUS server for authentication.
4. Look into IPSec, and see if it is feasible for communication encryption once the RADIUS authentication is over.

© 2011 Alunduil's Hosting Suffusion theme by Sayontan Sinha