Search Results

Search found 19796 results on 792 pages for 'bit twiddler'.

Page 231/792 | < Previous Page | 227 228 229 230 231 232 233 234 235 236 237 238  | Next Page >

  • Can I install ubuntu on usb hdd without loosing data on it?

    - by Radek
    I have live-usb stick that I can boot latest live Ubuntu from. Then I have 160GB external WD hdd with few GB free of space. My notebook can't have any internal hdd so I was wondering if I can use my external one to install and boot Ubuntu and install new programs, save settings etc. without loosing (or moving around) any data on this external hdd. The best would be if I can somehow use the live-usb. I'm traveling so any "complicated" solution might be bit hard to implement. I do have an access to the Internet.

    Read the article

  • Will Xubuntu 12.10 also have amazon ads?

    - by Miguel Guasch
    and thanks in advance for your comments: I'm currently using Ubuntu 12.04, and quite happy with it. I'm using the Unity desktop, and I've got no major complaints. My problem/question is: I've been reading on the news, forums, and different websites that the new version in 12.10, which i'll eventually have to upgrade to if I plan on using Ubuntu, has a lens/amazon function on the dash that sends queries to amazon. Now, this disturbs me a bit, since I don't want to see "shopping recommendations" everytime I look for something, be they from amazon or from "future partners". Does this new "function" only apply to the Unity desktop? If I switch to the Xfce desktop, will I be able to "save myself" from sending search data to amazon and/or shopping recommendations from them? Or will I have to entirely switch distributions, in order to evade this? Again, many thanks in advance for your comments and/or help. Regards, Miguel.

    Read the article

  • Something in the world of Firewall Hosted SSL VPN's

    - by AreYouSerious
    I run a Physical firewall at my residence. Call me paranoid, but I appreciate the added security. I have been working to get the VPN to work properly, but had until today not managed this. I worked with ensuring that the VPN configurations were correct, that the port filters were correct,  I could connect to the Firewall GUI, but never to the VPN. Turns out that in W7, if you add a key, it suddenly works.Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNELAdd DWORD(32-bit) - SendExtraRecord --> value 2 and voila, suddenly your presented with the login screen. I won't mention the specific vendor, as they don't have this listed in their fixes... but there are several venders where this is an issue. So, if you are having an issue connecting to an SSL VPN (web vpn) this might just be the solution that you need.

    Read the article

  • Cant Install TOR on Ubuntu Netbook 10.10 [closed]

    - by Prateek Mishra
    Possible Duplicate: How to install tor? I downloaded the tar.gz file from TORproject .org and unzipped it. I clicked everything inside the directories but nothing happened. I also tried to install the addon from here http://bit.ly/bSSNea . The addon is installed but I cant see the TOR button anywhere. I checked relevant the option in the preferences section of toolsaddons. How do I install it? EDIT - Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv-keys 886DDD89 gpg: requesting key 886DDD89 from hkp server keyserver.ubuntu.com gpg: key 886DDD89: public key "deb.torproject.org archive signing key" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)

    Read the article

  • Upgrade from 11.10 to 12:04 failed

    - by Sandeep Adi
    I upgraded from Ubuntu 11.10 to 12.04 using the update manager. At the end of the upgrade the console said the upgrade had failed and it forced me to restart. After a restart I am not able to do anything other than logging in. I just see a blue screen with the ubuntu one icon, I can open applications, but nothing beyond that. I opened the terminal but after that the keyboard is not being recognized. Basically the laptop is now rendered useless. Any pointers on how to recover? This is on a Dell Inspiron 1501 laptop with a 64 bit AMD Sempron Processor. Any help would be appreciated. Thanks, Sandeep

    Read the article

  • Nearly technical books that you enjoyed reading

    - by pablo
    I've seen questions about "What books you recommend" in several of the Stack Exchange verticals. Perhaps these two questions (a and b) are the most popular. But, I'd like to ask for recommendations of a different kind of books. I have read in the past "The Passionate Programmer" and I am now reading "Coders at Work". Both of them I would argue that are almost a biography (or biographies in the "Coders at work") or even a bit of "self-help" book (that is more the case of the "Passionate programmer"). And please don't get me wrong. I loved reading the first one, and I am loving reading the second one. There's a lot of value in it, mostly in "lessons of the trade" kind of way. So, here is what I'd like to know. What other books that you read that are similar to these ones in intent that you enjoyed? Why?

    Read the article

  • Sept 25th - SharePoint 2013 talk in Arendal, Norway

    - by Sahil Malik
    SharePoint 2010 Training: more information I am thrilled to be talking about SharePoint 2013 in Arendal, Norway over an informal user group get together. Thanks to a Doorway and Sevan Marine for making this happen, and thanks to Asplan Viak for presenting a real world implementation called "Oh behave!" I mean! Beehive :). Here is the agenda, 1800 - 1815 Welcome, the user group - a bit to bite into1815 - 1930 Sahil Malik: SharePoint 2013 - what's new? How do we get there? What challenges will we face?1930 - 2000 Asplan Viak presents their SharePoint Solution – Beehive When and Where: 1800hrs at Kittelsbuktveien 5 Read full article ....

    Read the article

  • Java Plugin - Firefox

    - by Tomassino
    Having trouble getting Java to work with Firefox (22), I have followed the advice in this question and on the official Java site, but nothing seems to work. I have the latest Java (1.7.0_25) in /opt/java and have set a symlink in /usr/libs/mozilla/plugins for the libnpjp2.so file. I can see the file in the terminal and Java runs fine. However Firefox shows nothing in about:plugins. I have also run export JAVA_HOME="/opt/java/jre1.7.0_05/bin/java" to be on the safe side. I know there are multiple plugin directories such as /usr/lib/firefox/plugins and /usr/lib/firefox-addons/plugins, but all my current plugins show they are located in /usr/lib/mozilla/plugins when viewing the about:plugins page. A bit stuck on where to go next?

    Read the article

  • How to download flash (streaming) videos from sites like youtube, dailymotion, vimeo, etc.?

    - by riclags
    I have read this thread but please hear me out. I use Ubuntu 10.04 LTS (32-bit) and I didn't bother to install the Flash plugin for Firefox as I am using a netbook and sometimes Flash caused firefox to crash. What I would like to ask is if I had the link to the video, is there some way I can download it and watch it offline (via VLC) so that I don't need to install Flash plugin? Command line or GUI techniques is welcome. Based on what I have read, using the /tmp technique requires Flash plugin to be installed and the video to be loaded before I can go scavenge it in the said directory. Note that I also want to dload videos from site aside from youtube.

    Read the article

  • Rhythmbox plugin radio-browser crashes

    - by Marco
    I have just installed the plugins package from fossfreedom repository on my Rhythmbox 2.96 running on 12.04 (64 bit). The radio-browser plugin crashes Rhythmbox after a few seconds of playing. When I restarted Rhythmbox after the crash, the plugin was marked as "error" and it is impossible to reinstall it. I've then manually removed (sudo apt-get remove ...) and reinstalled it but still I can't enable it. Unfortunately, radio-browser was the reason for me to install the plugin package, and I can't use it... Help please?

    Read the article

  • My Red Gate Experience

    - by Colin Rothwell
    I’m Colin, and I’ve been an intern working with Mike in publishing on Simple-Talk and SQLServerCentral for the past ten weeks. I’ve mostly been working “behind the scenes”, making improvements to the spam filtering, along with various other small tweaks. When I arrived at Red Gate, one of the first things Mike asked me was what I wanted to get out of the internship. It wasn’t a question I’d given a great deal of thought to, but my immediate response was the same as almost anybody: to support my growing family. Well, ok, not quite that, but money was certainly a motivator, along with simply making sure that I didn’t get bored over the summer. Three months is a long time to fill, and many of my friends end up getting bored, or worse, knitting obsessively. With the arrogance which seems fairly common among Cambridge people, I wasn’t expecting to really learn much here! In my mind, the part of the year where I am at Uni is the part where I learn things, whilst Red Gate would be an opportunity to apply what I’d learnt. Thankfully, the opposite is true: I’ve learnt a lot during my time here, and there has been a definite positive impact on the way I write code. The first thing I’ve really learnt is that test-driven development is, in general, a sensible way of working. Before coming, I didn’t really get it: how could you test something you hadn’t yet written? It didn’t make sense! My problem was seeing a test as having to test all the behaviour of a given function. Writing tests which test the bare minimum possible and building them up is a really good way of crystallising the direction the code needs to grow in, and ensures you never attempt to write too much code at time. One really good experience of this was early on in my internship when Mike and I were working on the query used to list active authors: I’d written something which I thought would do the trick, but by starting again using TDD we grew something which revealed that there were several subtle mistakes in the query I’d written. I’ve also been awakened to the value of pair programming. Whilst I could sort of see the point before coming, I also thought that it was impossible that two people would ever get more done at the same computer than if they were working separately. I still think that this is true for projects with pieces that developers can easily work on independently, and with developers who both know the codebase, but I’ve found that pair programming can be really good for learning a code base, and for building up small projects to the point where you can start working on separate components, as well as solving particularly difficult problems. Later on in my internship, for my down tools week project, I was working on adding Python support to Glimpse. Another intern and I we pair programmed the entire project, using ping pong pair programming as much as possible. One bonus that this brought which I wasn’t expecting was that I found myself less prone to distraction: with someone else peering over my shoulder, I didn’t have the ever-present temptation to open gmail, or facebook, or yammer, or twitter, or hacker news, or reddit, and so on, and so forth. I’m quite proud of this project: I think it’s some of the best code I’ve written. I’ve also been really won over to the value of descriptive variables names. In my pre-Red Gate life, as a lone-ranger style cowboy programmer, I’d developed a tendency towards laziness in variable names, sometimes abbreviating or, worse, using acronyms. I’ve swiftly realised that this is a bad idea when working with a team: saving a few key strokes is inevitably not worth it when it comes to reading code again in the future. Longer names also mean you can do away with a majority of comments. I appreciate that if you’ve come up with an O(n*log n) algorithm for something which seemed O(n^2), you probably want to explain how it works, but explaining what a variable name means is a big no no: it’s so very easy to change the behaviour of the code, whilst forgetting about the comments. Whilst at Red Gate, I took the opportunity to attend a code retreat, which really helped me to solidify all the things I’d learnt. To be completely free of any existing code base really lets you focus on best practises and think about how you write code. If you get a chance to go on a similar event, I’d highly recommend it! Cycling to Red Gate, I’ve also become much better at fitting inner tubes: if you’re struggling to get the tube out, or re-fit the tire, letting a bit of air out usually helps. I’ve also become quite a bit better at foosball and will miss having a foosball table! I’d like to finish off by saying thank you to everyone at Red Gate for having me. I’ve really enjoyed working with, and learning from, the team that brings you this web site. If you meet any of them, buy them a drink!

    Read the article

  • ATI Proprietary Driver Over/Underscan setting ignored after reboot

    - by Lassi
    I installed the proprietary driver (fglrx-updates) on Ubuntu 12.10 64-bit for my graphics card (ATI Radeon HD 7570). I am using two displays, one connected with DVI, one with HDMI. I set the desktop to be expanded to both screens and disabled the under scan for the HDMI screen, which is always for some reason enabled on HDMI screens. Now the issue. Everything was fine until I restarted my computer. After reboot, the screen connected with HDMI cable had the black borders again, meaning that the under scan is again enabled. I checked the ATI CCC, and under scan was disabled. However, moving the slider to enable under scan and then back to zero fixed the issue -- temporarily. The same issue is repeated every time I restart my computer. The settings remains the same, but the computer seems to ignore it. Any ideas how I could solve the issue?

    Read the article

  • Going home now :-)

    - by Mike Dietrich
    3 weeks of traveling through Asia and Australia - nearly 500 customers and partners in 8 workshops in Tokyo, Seoul, Beijing, Shenzhen, Singapore, Melbourne, Perth and Manila. Great people in all places, many interesting discussions, several new reference prospects for Oracle Database 11g Release 2 - YOU should upgrade as well pretty soon :-) But now it's time to go home. We are a bit exhausted but we really enjoyed it talking to and with you. And I'd suppose we'll meet again the sooner or later. Thanks to everybody - and special thanks to the local colleagues and especially to Abe-san, Kota-san, Blair Layton and Shaheen Ismail for taking care on us, organizing our workshops and the whole setup!!!

    Read the article

  • The death of Kodak digital

    - by Ken Hortsch
    Months ago Kodak announced that it was discontinuing its digital video to focus on “significant opportunities for profitable growth”.  Three years ago I picked up the little Kodak Zi6 (pronounced Zix) for the kids for Christmas.  It is an HD pocket video camera with a nice 3” LCD all built into a something a bit longer than an deck of cards.  It is low tech and great!  The kids have had a ball with it, and for around $100 it was perfect.  It comes with 2 AA rechargeable batteries and the recharger.  You can add an SD card, but don’t need to, and the USB is not a cable but a pop-out dongle so everything is right in the one package.  Too many companies look for the next big thing and fail to see the stuff that is good enough, and right in front of their eyes.

    Read the article

  • Some non-generic collections

    - by Simon Cooper
    Although the collections classes introduced in .NET 2, 3.5 and 4 cover most scenarios, there are still some .NET 1 collections that don't have generic counterparts. In this post, I'll be examining what they do, why you might use them, and some things you'll need to bear in mind when doing so. BitArray System.Collections.BitArray is conceptually the same as a List<bool>, but whereas List<bool> stores each boolean in a single byte (as that's what the backing bool[] does), BitArray uses a single bit to store each value, and uses various bitmasks to access each bit individually. This means that BitArray is eight times smaller than a List<bool>. Furthermore, BitArray has some useful functions for bitmasks, like And, Xor and Not, and it's not limited to 32 or 64 bits; a BitArray can hold as many bits as you need. However, it's not all roses and kittens. There are some fundamental limitations you have to bear in mind when using BitArray: It's a non-generic collection. The enumerator returns object (a boxed boolean), rather than an unboxed bool. This means that if you do this: foreach (bool b in bitArray) { ... } Every single boolean value will be boxed, then unboxed. And if you do this: foreach (var b in bitArray) { ... } you'll have to manually unbox b on every iteration, as it'll come out of the enumerator an object. Instead, you should manually iterate over the collection using a for loop: for (int i=0; i<bitArray.Length; i++) { bool b = bitArray[i]; ... } Following on from that, if you want to use BitArray in the context of an IEnumerable<bool>, ICollection<bool> or IList<bool>, you'll need to write a wrapper class, or use the Enumerable.Cast<bool> extension method (although Cast would box and unbox every value you get out of it). There is no Add or Remove method. You specify the number of bits you need in the constructor, and that's what you get. You can change the length yourself using the Length property setter though. It doesn't implement IList. Although not really important if you're writing a generic wrapper around it, it is something to bear in mind if you're using it with pre-generic code. However, if you use BitArray carefully, it can provide significant gains over a List<bool> for functionality and efficiency of space. OrderedDictionary System.Collections.Specialized.OrderedDictionary does exactly what you would expect - it's an IDictionary that maintains items in the order they are added. It does this by storing key/value pairs in a Hashtable (to get O(1) key lookup) and an ArrayList (to maintain the order). You can access values by key or index, and insert or remove items at a particular index. The enumerator returns items in index order. However, the Keys and Values properties return ICollection, not IList, as you might expect; CopyTo doesn't maintain the same ordering, as it copies from the backing Hashtable, not ArrayList; and any operations that insert or remove items from the middle of the collection are O(n), just like a normal list. In short; don't use this class. If you need some sort of ordered dictionary, it would be better to write your own generic dictionary combining a Dictionary<TKey, TValue> and List<KeyValuePair<TKey, TValue>> or List<TKey> for your specific situation. ListDictionary and HybridDictionary To look at why you might want to use ListDictionary or HybridDictionary, we need to examine the performance of these dictionaries compared to Hashtable and Dictionary<object, object>. For this test, I added n items to each collection, then randomly accessed n/2 items: So, what's going on here? Well, ListDictionary is implemented as a linked list of key/value pairs; all operations on the dictionary require an O(n) search through the list. However, for small n, the constant factor that big-o notation doesn't measure is much lower than the hashing overhead of Hashtable or Dictionary. HybridDictionary combines a Hashtable and ListDictionary; for small n, it uses a backing ListDictionary, but switches to a Hashtable when it gets to 9 items (you can see the point it switches from a ListDictionary to Hashtable in the graph). Apart from that, it's got very similar performance to Hashtable. So why would you want to use either of these? In short, you wouldn't. Any gain in performance by using ListDictionary over Dictionary<TKey, TValue> would be offset by the generic dictionary not having to cast or box the items you store, something the graphs above don't measure. Only if the performance of the dictionary is vital, the dictionary will hold less than 30 items, and you don't need type safety, would you use ListDictionary over the generic Dictionary. And even then, there's probably more useful performance gains you can make elsewhere.

    Read the article

  • Error installation of Ubuntu 12.04 LTS

    - by garu
    Attempting a new installation of Ubuntu 12.04 LTS on what was a dual boot Windows 7 and Ubuntu 12.04 LTS laptop ( Sony intel i3 core 64 bit with 500GB HDD). I followed the following procedure Install Ubuntu • has at least 4.4 GB available, is connected to the internet, download updates while installing and install this third-party are all ticked this time • I chose the Erase disk and install Ubuntu option ( since I want to have only Ubuntu 12.04 LTS operating system in my disk) Now shows The entire disk will be used • 501GB free disk I clicked the install now button. All data copied to the hard drive ( it was copied OK), askes for location, keyboared layout, and who are you. Started to install the Ubuntu 12.04 operating system. After some minutes, I got a report Installation failed, the installer encountered an unrecoverable error. A desktop session will now be run so that you may investigate the problem or try installing again. So, Please give me simple advice on how to proceed. Thank you

    Read the article

  • MySQL port forwarding

    - by Eduard Luca
    I am trying to help a colleague to connect to my MySQL server. However the situation is a bit special, and here's why (let's call him person A and me, person B): Person A has a PC, on which he has a virtual machine, which is in the same network as the actual PC he's running. However person A is also in the same network with person B (a different network). I want the site that lives on A's VM to be able to connect to the MySQL server on B's PC. For this I've thought a port forwarding would be appropriate: from ip-of-person-A:3306 to ip-of-person-B:3306. This way the site would connect to the IP of the PC it's living on (not the VM), which would forward to A's MySQL. I've seen several examples of port forwarding, but I don't think it's what I need, from what I've seen, it's kind of the opposite. So would something like this be achievable?

    Read the article

  • Fixing Broken Links to Entries on This Blog

    - by Shay Shmeltzer
    I just found out that some built in redirects that were in place on the Oracle Blogging platform were removed, and as a result there is a good chance that if you were directed to an entry on this blog that is a bit older you'll get a 404 error. Luckily there is a simple URL hack that you can use to fix this - switch the "year/month" part for "entry" and then remove the ".html" from the URL. So for example instead of :  https://blogs.oracle.com/shay/2010/10/passing_parameters_to_adf_appl.html use: https://blogs.oracle.com/shay/entry/passing_parameters_to_adf_appl I fixed the links on my "Archives" page so you can also look for the entry by title there. Sorry for any inconvenience.

    Read the article

  • Software development life cycle in the industry

    - by jiewmeng
    I am taking a module called "Requirements Analysis & Design" in a local university. Common module, I'd say (on software development life cycle (SDLC) and UML). But there is a lot of things I wonder if they are actually (strictly) practiced in the industry. For example, will a domain class diagram, an not anything extra (from design class), be strictly the output from Analysis or Discovery phase? I'm sure many times you will think a bit about the technical implementation too? Else you might end up with a design class diagram later that is very different from the original domain class diagram? I also find it hard to remember what diagrams are from Initiation, Discovery, Design etc etc. Plus these phases vary from SDLC to SDLC, I believe? So I usually will create a diagram when I think will be useful. Is it the wrong way?

    Read the article

  • 3D Studio Max biped restrictions?

    - by meds
    I have a stock biped character in 3D studio max which has a jump animation. The problem I have with the jump animation is that there is actual y offset happening inside it which makes it awkward to play while the character is jumping since it's not only jumping in the game world but the jump animation is adding its own height offset. I'm tryuing to remove the jump animations height offset, so far I've found the root node and deleted all its key frames which has helped a bit. The problem I'm having now is that the character still has some height offset and if I try to lower it it has a fake 'ground' that isn't at 0 and the limbs sort of bend on the imaginary floor, si there a way to remove this restriction just for the jump animation? Here's what I mean: http://i.imgur.com/qoWIR.png Any idea for a fix? I'm using Unity 3D if that opens any other possibilities...

    Read the article

  • Artificial Intelligence implemented in x86 Assembly? [closed]

    - by Bigyellow Bastion
    Okay, so I decided that for my upcoming operating system, I do basically everything in x86 Assembly, using only 16-bit mode. I will need to write the software to host on it once I have something up and going, and I'll definitely post the source and VM-executable file. But as for now I'm stuck with the idea of implementing the AI code for some of the games I'm making to host on it. AI in Assembly is tedious, and sometimes almost impossible seeming, especially complex AI(I'm talking SNES Super Mario World 2: Yoshi's Island AI here, by the way, not pong AI). I was thinking that it'd be such a hassle that I'd have to bring a higher-level language to work some of this out here, like maybe C++ or C#, but I'd have to go through more work linking it into a fine binary that my OS will host, and that adds unnecessary work to the table I wanted to avoid(I don't want a complex system, I want everything as bare-bones as possible, avoiding libraries, APIs, and linkable formats for now, to make everything more directly accessible to the kernel's API).

    Read the article

  • suspend resume not working on HP dv7

    - by Emiel
    this one is driving me nuts. My HP dv7 laptop isn't resuming from suspend and hybernate. On suspend - resume it leaves me with a black screen. On hibernate it succesfully loads the images and then it hangs.... I searched through internet and tried serveral things, but nothing seems to work for this HP dv7 on Ubuntu 12.04. With 11.10 it didn't work either. Intel® Core™ i5 CPU M 450 @ 2.40GHz × 4 VESA: Intel®Ironlake Mobile Graphics 64-bit Hope someone knows where to start the search.. I'm really desperate.

    Read the article

  • Copying logins to another server

    - by DavidWimbush
    I'm busy setting up a new server to replace our main live server and part of that is to get the logins copied over. The database users will come over when I restore the databases but I wanted to get the logins they relate to, with the same SIDs, passwords and other properties as they have on the current server. In fact I don't even know the passwords for the logins created by our Sage accounting package - apparently they are generated by the setup using a number of ingredients unique to each installation. I did some Googling and fount this KB article: http://support.microsoft.com/kb/918992/, which more or less did the trick. It produces a set of CREATE LOGIN statements with the SIDs and hashed passwords. But it didn't include the default language, which can subtly or dramatically alter the behaviour of date-related SQL. So I added that bit and you can help yourself here.

    Read the article

  • What's a good data structure solution for a scene manager in XNA?

    - by tunnuz
    Hello, I'm playing with XNA for a game project of myself, I had previous exposure to OpenGL and worked a bit with Ogre, so I'm trying to get the same concepts working on XNA. Specifically I'm trying to add to XNA a scene manager to handle hierarchical transforms, frustum (maybe even occlusion) culling and transparency object sorting. My plan was to build a tree scene manager to handle hierarchical transforms and lighting, and then use an Octree for frustum culling and object sorting. The problem is how to do geometry sorting to support transparencies correctly. I know that sorting is very expensive if done on a per-polygon basis, so expensive that it is not even managed by Ogre. But still images from Ogre look right. Any ideas on how to do it and which data structures to use and their capabilities? I know people around is using: Octrees Kd-trees (someone on GameDev forum said that these are far better than Octrees) BSP (which should handle per-polygon ordering but are very expensive) BVH (but just for frustum and occlusion culling) Thank you Tunnuz

    Read the article

  • Anatomy of a .NET Assembly - CLR metadata 2

    - by Simon Cooper
    Before we look any further at the CLR metadata, we need a quick diversion to understand how the metadata is actually stored. Encoding table information As an example, we'll have a look at a row in the TypeDef table. According to the spec, each TypeDef consists of the following: Flags specifying various properties of the class, including visibility. The name of the type. The namespace of the type. What type this type extends. The field list of this type. The method list of this type. How is all this data actually represented? Offset & RID encoding Most assemblies don't need to use a 4 byte value to specify heap offsets and RIDs everywhere, however we can't hard-code every offset and RID to be 2 bytes long as there could conceivably be more than 65535 items in a heap or more than 65535 fields or types defined in an assembly. So heap offsets and RIDs are only represented in the full 4 bytes if it is required; in the header information at the top of the #~ stream are 3 bits indicating if the #Strings, #GUID, or #Blob heaps use 2 or 4 bytes (the #US stream is not accessed from metadata), and the rowcount of each table. If the rowcount for a particular table is greater than 65535 then all RIDs referencing that table throughout the metadata use 4 bytes, else only 2 bytes are used. Coded tokens Not every field in a table row references a single predefined table. For example, in the TypeDef extends field, a type can extend another TypeDef (a type in the same assembly), a TypeRef (a type in a different assembly), or a TypeSpec (an instantiation of a generic type). A token would have to be used to let us specify the table along with the RID. Tokens are always 4 bytes long; again, this is rather wasteful of space. Cutting the RID down to 2 bytes would make each token 3 bytes long, which isn't really an optimum size for computers to read from memory or disk. However, every use of a token in the metadata tables can only point to a limited subset of the metadata tables. For the extends field, we only need to be able to specify one of 3 tables, which we can do using 2 bits: 0x0: TypeDef 0x1: TypeRef 0x2: TypeSpec We could therefore compress the 4-byte token that would otherwise be needed into a coded token of type TypeDefOrRef. For each type of coded token, the least significant bits encode the table the token points to, and the rest of the bits encode the RID within that table. We can work out whether each type of coded token needs 2 or 4 bytes to represent it by working out whether the maximum RID of every table that the coded token type can point to will fit in the space available. The space available for the RID depends on the type of coded token; a TypeOrMethodDef coded token only needs 1 bit to specify the table, leaving 15 bits available for the RID before a 4-byte representation is needed, whereas a HasCustomAttribute coded token can point to one of 18 different tables, and so needs 5 bits to specify the table, only leaving 11 bits for the RID before 4 bytes are needed to represent that coded token type. For example, a 2-byte TypeDefOrRef coded token with the value 0x0321 has the following bit pattern: 0 3 2 1 0000 0011 0010 0001 The first two bits specify the table - TypeRef; the other bits specify the RID. Because we've used the first two bits, we've got to shift everything along two bits: 000000 1100 1000 This gives us a RID of 0xc8. If any one of the TypeDef, TypeRef or TypeSpec tables had more than 16383 rows (2^14 - 1), then 4 bytes would need to be used to represent all TypeDefOrRef coded tokens throughout the metadata tables. Lists The third representation we need to consider is 1-to-many references; each TypeDef refers to a list of FieldDef and MethodDef belonging to that type. If we were to specify every FieldDef and MethodDef individually then each TypeDef would be very large and a variable size, which isn't ideal. There is a way of specifying a list of references without explicitly specifying every item; if we order the MethodDef and FieldDef tables by the owning type, then the field list and method list in a TypeDef only have to be a single RID pointing at the first FieldDef or MethodDef belonging to that type; the end of the list can be inferred by the field list and method list RIDs of the next row in the TypeDef table. Going back to the TypeDef If we have a look back at the definition of a TypeDef, we end up with the following reprensentation for each row: Flags - always 4 bytes Name - a #Strings heap offset. Namespace - a #Strings heap offset. Extends - a TypeDefOrRef coded token. FieldList - a single RID to the FieldDef table. MethodList - a single RID to the MethodDef table. So, depending on the number of entries in the heaps and tables within the assembly, the rows in the TypeDef table can be as small as 14 bytes, or as large as 24 bytes. Now we've had a look at how information is encoded within the metadata tables, in the next post we can see how they are arranged on disk.

    Read the article

< Previous Page | 227 228 229 230 231 232 233 234 235 236 237 238  | Next Page >