Dotz0cat's recent activity

  1. Comment on Hi, how are you? Mental health support and discussion thread (April 2024) in ~health.mental

    Dotz0cat
    Link
    I'm well, ughh, going. There is about a month left in the semester. I have to say, it feels like everything is due during this time. I have multiple group projects coming due. And one fairly big...

    I'm well, ughh, going. There is about a month left in the semester. I have to say, it feels like everything is due during this time. I have multiple group projects coming due. And one fairly big semester long paper and presentation. It is also time for registration. I, like usual, waited too long to make an appointment with my adviser. So I worry that the classes that I need are going to fill up. Even then, I don't know what other classes I need to take. Yes, that is what my adviser is for, but I don't think he is one of the greatest advisers. He feels kinda disconnected from my major. I guess that is what you get when you have a more general adviser. I also somewhat worry about how I am even going to graduate. There is a long list of classes I need to take, along with other requirements. One thing is so many hours of 3000 or 4000 level courses. While I am taking them, I feel like I am not going to have enough. There is also my major related classes. I am taking one of the 2 major gates now, data structures. And I still need to take the other major gate, algorithms. I know that the class fills up fast, and with how long I waited, I worry that the class will be filled up by the time I can register. There is also the fact that it is a gate, meaning that parts of the major are locked behind that class. So if, I don't get algorithms, I won't be able to work on other parts of the major. It doesn't help that I need 15 hours each semester to keep a scholarship. All of this makes me feel like I won't really graduate on time. Which is not something that bothers me (fully), but does my family. They are always like "when will you graduate", "You need to look for a job", "your 529 won't last forever", "You should be looking into internships", and more. It can just weigh at times. The job/internship one especially. I don't feel like there is anything that anyone would want to hire me for. Also I don't like the talking myself up or having to fake interest in a place. It's, well, a lot, but I do know that somehow it will work out. At least I did get an appointment with my adviser, though like 2 days after registration opens. The group projects, I don't worry about as much as the semester long paper and presentation. It's in Information Security. I chose an out there topic, of iOS Security (at the hardware level). Talking the hardware chain of trust, along with bootrom exploits like checkm8. Also including information about the secure enclave. I have wrote some on the paper. I got a rough version of the checkm8 section done. I think I probably should also include a section about other ones like limera1n and alloc8, while also cutting down on the detail about checkm8. I have started the secure enclave section, but I haven't made it far. The presentation is due 2 weeks or so before the paper. I haven't even thought on how I'll do the presentation yet. At least it is a recorded presentation, meaning that I can pull out all the stops with video editing. Even then, I don't know how I'll do it, and fill the time. I got to do it in a way that that includes enough detail, but not too much. Well, it's a thing, and it will somehow work out.

    5 votes
  2. Comment on What programming/technical projects have you been working on? in ~comp

    Dotz0cat
    Link
    This week I had been working on my complex plotting made with fortran. I got it to where it outputs tiffs. I also got it to where it compresses the tiffs too. It uses zlib bindings for fortran to...

    This week I had been working on my complex plotting made with fortran. I got it to where it outputs tiffs. I also got it to where it compresses the tiffs too. It uses zlib bindings for fortran to do so. That was fun. The zlib bindings were not up to my standards at first, and not really packagable. So I worked on the that project's makefile to have it build a shared library, and added pkg-config integration. I also added an install target, so now it can be packagable. So all of that resulted in a pull request for those bindings, and after that for a package to be added to the aur. That was a fun detour that gives back. My next steps will be fully object orientifying my tiff writer. After that my next step will be adding logluv support, as currently floats compress very badly.

    4 votes
  3. Comment on What programming/technical projects have you been working on? in ~comp

    Dotz0cat
    Link
    I had been busy with classes/ general willingness to work on anything due to not building a ring buffer right. I finally started making something again. A complex plotter made in Fortran. It shows...

    I had been busy with classes/ general willingness to work on anything due to not building a ring buffer right. I finally started making something again. A complex plotter made in Fortran. It shows the complex parts through domain coloring. It took forever to get right because I didn’t want to write the conversion from hsl to rgb. So I decided to convert from CIELCHuv to linear srgb. It now works decentlyish, but I likely will change its output from 32bit portable float maps to something a little more compressed. A single run produces 46Mb of data.

    3 votes
  4. Comment on Hi, how are you? Mental health support and discussion thread (September 2023) in ~health.mental

    Dotz0cat
    Link
    If you asked me "how are you?", I would say fine, good, okay, or some variation of the sort. That would not be fully true. I don't like to share it, but I am under quite a lot of stress, and such....

    If you asked me "how are you?", I would say fine, good, okay, or some variation of the sort. That would not be fully true. I don't like to share it, but I am under quite a lot of stress, and such. There is my classes. I am now going only on MWF now, but I think that is doing more harm than good. I have to do this or that, do the reading for one class, or do the lab for another. Its just a lot. When I am not going to campus for classes, I am home. That brings along its own kind of stress. For several reasons, one is I don't know how to shut myself off. I feel like I always must be doing something. That is even when I know I can just take a break. Another reason is because my family is a mess. To put it simply my mother is a narcissist. My step-dad is good, but he can act the role of a flying monkey at times. So when I am I at home, I am stressed because of that. Its been ingrained into me for a long time that I must always be available, a door must always be open. It makes it troublesome for me to close my door, so I can focus on homework or reading. I have other family troubles too. My uncle is in the hospital, my aunt is staying with my grandparents, which live right beside me. My aunt has this kind hard to describe kind of personality, bitty maybe?, that makes it hard to be around for long periods of time. I go up there to drink my coffee in the mornings, its a non-stop stream of westerns, john wayne, and other tv shows that were made before any of them were born. All of that at a very loud volume. While that doesn't stress me, it sure does irritate me. There is more from the other side of the family too. My half brother wants me to go to the fair with him tomorrow, not bad but that's just the leader. On Monday, or Sunday, my biological father (note: father not dad) is coming to town for a week. Being around him is stressful, and thinking about him coming is stressful. You can never predict what he is going to do. He smokes (tobacco and weed) like a freight train. It reeks, and it gets on you, I have to take a shower every time after I am around him. So, I got to juggle being around him and homework next week. Just the thought of that is stressful. As you can tell there are very obviously issues there, and I can go on, like not even exist then show up in your son's life after 19 years, but I won't. Things are tough, things are stressful, and I haven't even wrote about it all. Like there is the admin stuff I do for a local facebook buy/sell group. I have to keep it clean and ban lots of fake people. Very easy to do, but times 100, it gets repetitive. There is also the moderation I do for the navigator's, not bad, but I do feel like I am never doing enough. With how few mods there are on the team, I can't think about taking a break or not doing it. I feel like I am always running late with my posts and such. It's a lot, but typing it out here does help some. There is also stuff like I know I am having trouble with stress and such, but I don't do anything about it. When I do something about it, it doesn't work imminently so I don't continue with it. Anyway, I'll just stop here or I'll never get this posted.

    1 vote
  5. Comment on Help with finding out more about an obsure c++ graphics library in ~comp

    Dotz0cat
    Link Parent
    This is what ended up working so far. I used wine-msvc. On their github page they mentioned using it natively with clang, so I set it up with clang in a makefile.

    This is what ended up working so far. I used wine-msvc. On their github page they mentioned using it natively with clang, so I set it up with clang in a makefile.

    2 votes
  6. Comment on Help with finding out more about an obsure c++ graphics library in ~comp

    Dotz0cat
    Link Parent
    Yeah, its for the love of rabbit holes that I posted this. Another pair of eyes that has not been looking at this for a week, can see more than one that has.

    Yeah, its for the love of rabbit holes that I posted this. Another pair of eyes that has not been looking at this for a week, can see more than one that has.

    2 votes
  7. Comment on Help with finding out more about an obsure c++ graphics library in ~comp

    Dotz0cat
    Link Parent
    I wish I could, but the main cross compiler to make the windows binaries (mingw-w64) fails to link. It throws an error about “could not find definition for function()”

    I wish I could, but the main cross compiler to make the windows binaries (mingw-w64) fails to link. It throws an error about “could not find definition for function()”

    2 votes
  8. Help with finding out more about an obsure c++ graphics library

    I recently started classes again a little over a week ago. One of the classes I am taking is Computer science 2. One of the things it includes is openGL based graphics programming. They have us...

    I recently started classes again a little over a week ago. One of the classes I am taking is Computer science 2. One of the things it includes is openGL based graphics programming. They have us using glut, which is not bad in it self. However what they do is provide us a wrapper library for glut. In the form of a header named "graph1.h" and a precompiled library. Which goes by various names, such as "graphLib1.lib", "graphLib2010.lib", "graphLib2022.lib", "graphicLib2015.lib", etc. It's provided in the form of Windows flavored x86, Macos flavored x86_64 and arm. However, no forms for Linux. While I have been using Windows and VS Studio for classes so far, I strongly prefer my current Linux based tool chain. (text editor, build system, debugger). I have tried cross compiling with mingw-w64, but it fails when I try to link it. I would very much like to use it natively. To do this I would need either the library or the sources to compile it myself. That is what I would really like to find.

    Here is more about the library it self. It is based off of BMPLoader, a small library for loading bitmaps as openGL textures. It also inherits its license from BMPLoader too, because it is a derivative of BMPLoader. (GPLv2; and has been distributed). When you unpack the library there are 3 object files, BMPLoader.o, loadPNG.o, and example2.o. (.o/.obj) I have found traces of it online, however they all link back to my University, University of Central Arkansas. I have also found evidence of it being used at GSU too, but it is from one of the professors that is now here at UCA. (They even provided a pdf on using it, I hashed them and they were the same). Here is a copy of the header graph1.h.

    graph1.h
    /*BMPLoader - loads Microsoft .bmp format
        Copyright (C) 2006  Chris Backhouse
    
        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License along
        with this program; if not, write to the Free Software Foundation, Inc.,
        51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    
    
      cjbackhouse@hotmail.com 		www.backhouse.tk
      
      I would appreciate it if anyone using this in something cool would tell me
      so I can see where it ends up.
    
      Takes a filename, returns an array of RGB pixel data
      Loads:
      24bit bitmaps
      256 colour bitmaps
      16 colour bitmaps
      2 colour bitmaps  (Thanks to Charles Rabier)
    
      This code is designed for use in openGL programs, so bitmaps not correctly padded will not
      load properly, I believe this only applies to: 
      256cols if width is not a multiple of 4
      16cols if width is not a multiple of 8
      2cols if width is not a multiple of 32
    
      Sample code:
    
    	BMPClass bmp;
    	BMPLoad(fname,bmp);
    	glTexImage2D(GL_TEXTURE_2D,0,3,bmp.width,bmp.height,0,GL_RGB,GL_UNSIGNED_BYTE,bmp.bytes);
    */
    #include <windows.h>
    #include <gl/glut.h>
    #include <iostream>
    #include <cstring>
    #include <string>
    #define endg "_endg_"
    
    
    #ifndef BMPLOADER_H
    #define BMPLOADER_H
    
    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    typedef unsigned char BYTE;
    
    class BMPClass
    {
    public:
    	BMPClass();
    	~BMPClass();
    	BYTE& pixel(int x,int y,int c);
    	void allocateMem();
    	int width,height;
    	BYTE* bytes;			//OpenGL formatted pixels
    };
    
    #define BMPError char
    #define BMPNOTABITMAP 'b'	//Possible error flags
    #define BMPNOOPEN 'o'
    #define BMPFILEERROR 'f'
    #define BMPBADINT 'i'
    #define BMPNOERROR '\0'
    #define BMPUNKNOWNFORMAT 'u'
    
    //Loads the bmp in fname, and puts the data in bmp
    BMPError BMPLoad(string fname,BMPClass& bmp);
    
    //Translates my error codes into English	
    std::string TranslateBMPError(BMPError err);	
    
    //Load and select in OpenGL
    BMPError BMPLoadGL(string fname);
    
    struct Precision
    {
      int precision;
      bool precisionFlag;
    };
    
    struct GraphColor
    {
      int r;
      int g;
      int b;
    };
    
    class Gout
    {
      private:
        int x;
        int y;
        int r;
        int g;
        int b;
        int precision;
        bool precisionFlag;
    
    
      public:
        Gout() { r= 0; g=255; b= 0; precisionFlag = false; };
        void setX(int x) { this->x = x;}
        void setY(int y) { this->y = y;}
        int getX() { return x;}
        int getY() { return y;}
        void setR(int r) {this->r = r;}
        void setG(int g) {this->g = g;}
        void setB(int b) {this->b = b;}
        int getR() {return r;}
        int getG() { return g;}
        int getB() {return b;}
        void setPrecisionFlag(bool flag) { precisionFlag = flag;}
        bool getPrecisionFlag() {return precisionFlag;}
        void setPrecision(int precision) {this->precision = precision;}
        int  getPrecision() {return precision;}
        friend Gout& operator<<(Gout& g, int int_val);
        friend Gout& operator<<(Gout& g, double int_val);
        friend Gout& operator<<(Gout& g, char* char_val);
        friend Gout& operator<<(Gout& g, string string_val);
       
    };
    
    extern Gout gout;
    
    struct Point
    {
      int x;
      int y;
    };
    
    
    
    struct GraphObject
    {
      char* str;
      int id;
      int no_points;
      Point* points;
      double* colors;
      int radius;
      int no_objects;
      BMPClass* bmp;
      int remove;
      int width;
      int height;
      int del;
      BYTE* bytes; //PNG BYTES
    };
    
    void reshape(int w, int h);
    void display(void);
    void init(char* title);
    int drawPoint(int x, int y);
    int drawCircle(int radius, int x, int y);
    void drawMyCircle( int Radius, int numPoints, int x, int y );
    int drawLine(int x1, int y1, int x2, int y2, int width);
    int drawRect(int x1, int y1, int width, int height);
    void displayGraphics();
    int displayBMP(char* fn,int x, int y);
    int displayBMP(string fn, int x, int y);
    int displayPNG(string fn, int x, int y);
    int displayPNG(char* fn, int x, int y);
    int displayText(char* str, int x, int y, int r, int g, int b);
    void clearGraphics();
    void setColor(int obj_no, int r, int g, int b);
    GraphColor setColor(int r, int g, int b);
    void timerColor(int value);
    void moveObject(int obj_no, int x, int y);
    void processSpecialKeys(int key, int x, int y);
    DWORD WINAPI display1(LPVOID lpParam);
    void processMouse(int button, int state, int x, int y);
    void removeObject(int id);
    void clearText();
    void GRAPH_SS();
    bool up();
    bool down();
    bool left();
    bool right();
    bool leftMouse(int&x, int&y);
    bool rightMouse(int&x, int&y);
    bool middleMouse(int&x, int&y);
    Gout& operator<<(Gout& g, int int_val);
    Gout& operator<<(Gout& g, double int_val);
    Gout& operator<<(Gout& g, char* char_val);
    Gout& operator<<(Gout& g, char char_val);
    Gout& operator<<(Gout& g, Gout&(*pt2Func)(int x, int y));
    Gout& operator<<(Gout& g, Gout&(*pt2Func)(int r, int g, int b));
    Gout& operator<<(Gout& g, Point a);
    Gout& operator<<(Gout& g, GraphColor gc);
    Gout& operator<<(Gout& g, Precision p);
    Gout& operator<<(Gout& g, Gout&(*pt2Func)(int precision));
    Precision setPrecision(int precision);
    Point setPos(int x, int y);
    void getPos(int obj_no, Point points[], int& no_points);
    bool mouseDragged(int& x, int& y);
    void processMouseDragged(int x, int y);
    void replaceObject(int orig_obj, int new_obj);
    void closeGraphics();
    
    #endif
    

    Right now I am of the opinion that it is a in-house "hackjob". That is how it feels with the GPLed BMPLoader glued together with other graphics functions. In an attempt to not have to use new literature or new style libraries with the new ".net 2008" style ide, as they were likely transitioning out of a codewarrior environment, and before that a borland environment.

    So far, I have asked our computer science club about it. The main thing I was told was that the professor just wants us to use windows. That I can understand, but I still want to see how far I can go. I have also tried sending an email about it to the professor, but all I got sent was a link to the glut downloads. I did reply back asking about the graphlib sources too, but I haven't heard anything back yet. I don't want to push too hard, I still have a whole semester ahead of me. So now I am asking here on tildes. I understand if nothing can be found, but at least information and experiences can be collected.

    11 votes
  9. Comment on “Going shopping” is dead: How stores sucked the fun out of an American pastime in ~finance

    Dotz0cat
    Link
    I don't do much first hand shopping myself in general. Even then I have found most stores tend to be on the downhill side. I haven't been in a higher end store in a long time so I can't talk about...

    I don't do much first hand shopping myself in general. Even then I have found most stores tend to be on the downhill side. I haven't been in a higher end store in a long time so I can't talk about that, but the lower end has been marking new lows. For example dollar tree, a place I used to frequent, has just been downhill. They don't give you much to expect, and even then you walk out disappointed. From the general state of the store to lack of employees. In my option first hand retail has been on the downhill.
    Now looking at second hand, it has been too. Used to you could find amazing used items at a good low price. Now the same item is way higher. I used to find my nugget electronics at flea markets, thrift stores, and other second hand places. Now I find myself not getting as many due to the price/ worth price. (the price may be okay, but it is not worth that price to me) Compared to first hand, you don't expect much in general from the store, and they deliver. The employees don't need to know as much, and that is find. While even on the downhill slope, second hand does stand up better for me then first hand.

    1 vote
  10. Help me make a playlist to listen to while driving

    For a couple of months I have been thinking of making an 80 minute playlist of music to listen to while I am driving. I want them to have that repetitive, can listen to mindlessly while driving...

    For a couple of months I have been thinking of making an 80 minute playlist of music to listen to while I am driving. I want them to have that repetitive, can listen to mindlessly while driving feel. It's hard to describe. So far this is what I have. (20:22)

    Bookmaker - Kobaryo 4:23
    Red and blue - Silentroom 2:01
    Smiiillleee - Tankbuster 3:01
    Babarouqe - cYsmix 4:49
    Keep moving on - Sukima Altera/SeiiYuumi 4:16
    Dx Choseinou full metal shojo - IOSYS/uno w/ chiyoko 1:52

    The order is not set in stone, and it can be rearranged as needed. What got me started with this was Bookmaker. It just feels like something I can listen to on repeat. I just kept adding, but just haven't added enough yet. Most of the songs I have added came from games, as that is how I find most of my new music.

    6 votes
  11. Comment on Requiring ink to scan a document—yet another insult from the printer industry in ~tech

    Dotz0cat
    Link Parent
    Same. I have not actually directly experienced the issues with inkjets. However due to issues that others have experienced, I have a laser printer. I got a "retired" business class lexmark. It is...

    Same. I have not actually directly experienced the issues with inkjets. However due to issues that others have experienced, I have a laser printer. I got a "retired" business class lexmark. It is a tank. Ever since I got it, it had been complaining about a needing a maintenance kit, but unlike inkjets it still prints. When it runs out of toner, I'll bring another one of the exact same model out of storage. It does one thing, print, and it does it well.

    1 vote
  12. Comment on The war on remote work has nothing to do with productivity - the goal is avoiding a commercial real estate crash in ~finance

    Dotz0cat
    Link Parent
    I was a high school student during the 2020 online learn from home thing. I find the same thing. I found that I do more work when doing school at home then when doing school at school. That travel...

    I was a high school student during the 2020 online learn from home thing. I find the same thing. I found that I do more work when doing school at home then when doing school at school. That travel time helps provide a buffer and a time to switch between between work/school modes and home mode.

    1 vote
  13. Comment on Submachine: Legacy | Official reveal trailer in ~games

    Dotz0cat
    Link
    "We have to go back, Liz" gave me chills. I grew up playing the submachine games. These games are very important to me. Seeing the reveal of something more being added is amazing.

    "We have to go back, Liz" gave me chills. I grew up playing the submachine games. These games are very important to me. Seeing the reveal of something more being added is amazing.

    2 votes
  14. Comment on Advice on choosing a class to take to meet scholarship requirements in ~life

    Dotz0cat
    Link Parent
    I have thought about that. One of the things I would be interested in learning more about is photography. Learn some basics about composition, and gain some experience with gauging exposure. I...

    I have thought about that. One of the things I would be interested in learning more about is photography. Learn some basics about composition, and gain some experience with gauging exposure. I have looked some into my college's photography courses. There is one under the art department, but it has loads of prerequisites. There is another one under the journalism department, but it does not have the kind of stuff I am looking to learn.

    2 votes
  15. Advice on choosing a class to take to meet scholarship requirements

    I am currently frustrated with having to pick another 2 hours of classes to take to maintain eligibility of a scholarship. I can't take any more major (CS) related classes, as I do not have all...

    I am currently frustrated with having to pick another 2 hours of classes to take to maintain eligibility of a scholarship. I can't take any more major (CS) related classes, as I do not have all the prerequisites. I can't take any lower core classes as I have finished them all, from getting my general ed AA degree first. There are little filler electives I can take. One of them being first aid, a class that everyone says I need to take. However I do not want to take that class, it will be online and I had that professor for another online class last semester. I did not like the class at all. It was a read the textbook and answer the questions kind of class with no professor interaction at all. I think the first aid class will be exactly like that as well. There are some 1 hour classes I could choose from, however that would mean 2 more classes to juggle just to meet scholarship requirements. I am frustrated with this for multiple reasons, I'm indecisive, I've been putting it off all summer, and classes will start back very soon (aug 24th). I have tried talking to my family about it, but it ends up being a "you need to get this done" or a "just take the first aid course". They make choosing a class sound so simple when it is not as other stuff to juggle through. With it being so late it adds even more problems, as classes are filled up and deadlines are soon.

    Does tildes have any advice about this? Anything you want to comment or add?

    14 votes
  16. Comment on What is weighing heavily on you this week? in ~talk

    Dotz0cat
    Link
    Yes. My step-dad has recently had the chance to inherit some really high quality wood working tools. The only problem is that he needs a place to put it. Our garage is full of junk that something...

    Yes. My step-dad has recently had the chance to inherit some really high quality wood working tools. The only problem is that he needs a place to put it. Our garage is full of junk that something needs to be done with. He’s at work all day, and my mother is no going to do much of anything meaningful. So it falls to me to make the space. I have been working out in the heat and making good progress, but there is only so much I can do. A lot of the stuff that needs to be gone is not mine, and that frustrates me to no end. I doubt anyone is ever going to use an old roaster, but have to keep it because someone thinks they will. There’s a wagon that is being used for nothing more than a glorified table with wheels. It will never be used, but have to keep it. There is a tote full of craft supplies that will never be used again. And there is more, it just grates at me because I can’t do anything about it. I just don’t want my step-dad to miss out on this opportunity because he is at work all the time and because my mother won’t do enough.

    2 votes
  17. Comment on Show ~/project: A thread to share your finished projects in ~comp

    Dotz0cat
    Link
    I made walld, a wallpaper daemon. It changes your wallpaper. If you have 1000 wallpapers, point walld to them, it will shuffle them and display them. By default it changes the wallpaper every 30...

    I made walld, a wallpaper daemon. It changes your wallpaper. If you have 1000 wallpapers, point walld to them, it will shuffle them and display them. By default it changes the wallpaper every 30 minutes. It can even generate colors that can be included in your .Xresources.
    Repo: https://github.com/Dotz0cat/walld

    10 votes
  18. Comment on Does anyone read a weekly printed news publication? If so, which and why? in ~talk

    Dotz0cat
    Link
    The only actual newspaper that I read is The Echo. Its published by my big state college. I read it whenever I on campus. Occasionally I will read The Tower, but its published by the little...

    The only actual newspaper that I read is The Echo. Its published by my big state college. I read it whenever I on campus. Occasionally I will read The Tower, but its published by the little christian college a few streets over.

  19. Comment on Let's add (and rearrange?) some groups + a few notes about other short-term plans in ~tildes.official

    Dotz0cat
    Link
    A ~anime.groupwatch or something of that nature could be good. It would allow people to unsubscribe from group watch threads and such. That can solve one of the concerns about doing anime group...

    A ~anime.groupwatch or something of that nature could be good. It would allow people to unsubscribe from group watch threads and such. That can solve one of the concerns about doing anime group watches.
    This is not as much as a short term idea as much as it is a longer term idea, but I would eventually like to see a raisedByNarcissists type group on tildes one day.

    2 votes