Tuesday, August 1, 2017

Gantt and Algorithms

Even if I won't be using Gantt Charts with agile development, since they fit instead under the waterfall methodology, and, furthermore, although I am not pursuing a job as a project manager, it's still interesting to have sat down this week and set up the tasks, resources and dependencies that make up such a project timeline.  They're a smart tool for planning that may be applied to many different types of projects.

In our other class, the algorithms class, we completed and submitted our last homework assignment today.  I'm feeling pretty confident in my ability to design algorithms and apply or translate algorithmic pseudocode to C++ programming, or any language I've learned, for that matter, which is pretty great.  In specific, writing the backtracking code to the (dynamic programming) coin row problem was particularly satisfying because, although involving a few "Hail Marys" in my running it, was challenging for me and something I built without pseudocode.  It might be easy to whomever might be reading this blog, but for me, it was not that east.  Resolving it was definitely an "it's working" moment.  (All this is not to say that translating pseudocode is not without challenges; it also requires some careful interpretation, too, at that.)  I came close to giving up, twice, but thought, hey, I might be on to something.  Keep coding.  Just see where this leads.  --In the past, I'm unsure I would have felt such confidence to persevere through what I felt was a difficult (challenging enough to me) programming problem like this.

Tuesday, July 18, 2017

Peer Reviews

This week we read a variety of articles about the peer review, which is essential for code quality and thus reduces development time, while we continue to work on our team project.  My story involved creating a new schema with a variety of tables, which I then used to reverse engineer, or generate, a UML diagram, (far nicer, to me, than hand drafting one), as well as create the entity classes in netbeans.  Our team is meeting in weekly sprints to review code and plan next steps.



Tuesday, July 4, 2017

Scrumming away and happy fourth of July, everybody!

The team and I had a good initial meeting with Professor Wisneski and are amping up our project to transform our J2EE version of Hangman into a Wheel of Fortune game. We're continuing with sprint meetings, checking out code and making branches on github, recording activity in the collaboration and version control tool, PivitolTracker, doing test driven development and code review for pull requests.  Stuff like that.  It's great practice for the workplace, which is exciting.

Tuesday, June 13, 2017

Midterms/Finals Week

Finals at the mid-term--sounds odd, yet that is sort of what is going on this week!  In any case, it's exams time, and I'm cramming to ensure that I understand the topics we've been learning, including agile methodologies, junit testing, scalability, user diagrams and J2EE with its Java Sever Pages and servlets, as well as entity managers and persistence files connecting it all to MySQL's database servers.  It's been a challenge, and I'm grateful that NetBeans auto-generates so well!  Ha-ha.  I'm planning on poring through Murach's textbook again and hopefully achieving the deeper understanding that I've been wanting to attain for the client/server relationship.

Monday, May 29, 2017

JPA

This week, we're using JPA, the Java Persistence API, which is a type of ORM, object relational mapping, to access and manage data between Java objects / classes and a relational database in MySQL.

We're also studying measuring the time complexity of a recursive algorithm using initial conditions, backwards substitution and recurrence relations, after studying the non-recursive mathematical analysis of algorithms last week.  We find the basic operation, then create a function including the recursion and any other multiplications that occur, then look for a pattern in the backwards substitution. From that we find a general form that can be compared to the initial condition, so you solve for that, and you can produce an expression that will be in the range of Big Theta, between an upper and lower bound, or if there are possible variations to efficiency based on the input, O and Omega, as well.

Tuesday, May 23, 2017

Java Enterprise and Model-View-Controller

This week we studied coding a web service application with the Java Enterprise, J2EE, which consists of Java Server Pages, the Java Servlet and Java Persistence Architecture (next week), and its use of the MVC pattern (M-JPA; V-JSP; C-JS).  Other frameworks apart from Java include .NET and Ruby On Rails.

Thursday, May 18, 2017

Testing

It's great to get some more experience or exposure to test driven development in our Software Engineering class this week.  I've really valued studying and writing test files.

We also had our midterm this week in the Algorithms class.  I'm definitely not in agreement that having two programming classes at the same time is easier, as had been mentioned was the rationale and would be the case.  We've definitely dived into the deep end with respect to course material/content, compared to some of our more recent classes, so it's a lot!  The above in conjunction with studying asymptotic time complexity, which is a lot to get one's head around, in itself...!

Tuesday, May 9, 2017

Netbeans

These last two weeks, we've been working at modifying code in Netbeans for a hangman game cloned/forked from Github.

We've also started working with Pivotal Tracker, a project management system, which is great.  These software are so valuable to a team that must work together in iterative code progression.

Tuesday, May 2, 2017

Algorithms and Software Engineering!

It's great to be enrolled in CST370 and 438.  In terms of my progress:  this week I'm glad to finally be spelling the word 'algorithm' correctly, i.e., without requiring reference or outside verification.  ...Just joking.  But it's just smashing to be studying algorithms; I love them and approaching a problem with greater precision and the confidence that it can be solved, to analyze the ways that a given solution is better or worse than another and, even to understand the solution before beginning coding....  Problem solving is very entertaining.

I'm plunging into the deep end with C++, which is great because it really expands my exposure to what is a new language, and I always enjoy writing with Java.

Learning about agile methodology, its advantages and controversies, is very interesting and useful, as well.  I wonder if I'll be involved in sprints and daily reporting to a scrum master sometime next year -- that would be awesome.  I had better continue to study.

Friday, April 21, 2017

Onward and Upward

Not much to add, having finished my service learning opportunity earlier in the week.  Looking forward to the algorithms and programming courses to come!

Tuesday, April 18, 2017

Mission Accomplished

I'm so pleased to have completed my final hours this week.  I was only able to complete the minimal 30 hours, in total, and have moved on to completing the final paper and documentary projects.

Tuesday, April 11, 2017

Volunteering Update 2

I accomplished six hours of volunteering this week, which should leave me over ten hours short of the minimal 30 hours of work required to complete the course, as the total now is 18.  I'll have to commit long shifts over the next week to make up the difference.  Studying automation is going well.

Tuesday, April 4, 2017

Black Girls Code

Black Girls Code is a wonderful organization that is training young black girls to code and thereby access jobs in technology.  It’s a movement to empower them to succeed and prosper in the tech. economy and, moreover, in our country as a whole.  Right now, only 3% of coders are women of color, so there are so many young, bright girls, in specific, black girls, who are missing out on this great opportunity to join this robust workforce.  Indeed, our country is failing so many of its own children by failing to track talented kids on the jobs of the future.

Ida’s story is telling; here, a young black girl shows up to a workshop simply because her parents tell her she should; she doesn’t really know what coding is all about; once she is exposed to it, she learns she loves it, to build and create; she simply needed the exposure, mentorship and encouragement.

It's truly an excellent organization that I would be happy to volunteer with and support one day.

With respect to my volunteer assignment, I only managed two hours of work this week.  There are several groups for which to enter in data, again, some of which are in flux, so I chose to enter in only the info. for those which are supposedly static, and, still only half, since I am splitting that part of the assignment with my colleague also assigned to the Sea Otter Classic.

Tuesday, March 28, 2017

Slow Going

Captain's Log, Stardate Tuesday, March 28, 2017.  Morale is deteriorating.  Data entry incredibly slow going and, moreover, data being copied in flux.  Have only managed the minimum four hours work again.  Rations depleting and crew getting weary.  Must. keep. going.

💀💀💀💀💀💀💀💀💀😓😓😓😓😓😭😭😭😭😭😭😭😭😭😭😭😭😱😱😱😱😱😱😰😰😰😰😰😰  

Wednesday, March 22, 2017

Volunteering Update

This week, I continued to transfer data from the Excel-like spreadsheet to the initLive app in order to record shifts for the Sea Otter Classic's volunteers.  I committed four hours of such work this week, broken up over an hour or hour and a half here and there, which makes for a total of eight hours.  It's pretty slow-going work, very time consuming.

Tuesday, March 14, 2017

Keeping Up with my Learning Journal



I was very grateful for the assistance from Dr. Tao and Cassandra in providing me the service learning opportunity of volunteering with the Sea Otter Classic. Studying and mothering concurrently has proven much more challenging than I thought it would be; for example, it’s difficult to schedule appointments, and much easier to work while my daughter is napping or independently occupying herself, playing, so I’m grateful that I was able to continue with my cohort, when I needed to change at the last minute to this fully virtual assignment. I completed four hours of work this week.

I am always happy to volunteer in the community. Volunteering is fulfilling and important. I’ve had the odd assignment at the Boys and Girls Club, Habitat for Humanity and with local environmental causes. The Sea Otter Classic looks like a lot of fun and something I might enjoy participating in myself. I’ll be running a half marathon next month in Santa Cruz, and although I don’t expect to be very fast because my training has been very limited, it’ll be fun.

With that said, I am not pleased to be doing data entry. It’s the sort of work that I am trying to get a BS in Computer Science to avoid! I think I will take this opportunity to try to learn how to use Google Chrome’s Driver for automation, so as to give it an technically educational component and make it look better if I decide to add this experience to my CV. I don’t see myself going above and beyond four-five hours per week because my schedule is so limited, I am most eager to spend the little free time I have improving my technical programming skills, so I’m employable at the end of the course. However, I will work to the best of my abilities to assist Theresa.

The Digital Divide interview with Moyers & Company and Susan Crawford was interesting to watch, as well. It covers a topic I had been aware of because I lived in Europe for a few years. There I learned through first hand experience that Americans indeed tend to have much worse competition and regulatory oversight, not just in telecommunications but in air travel, healthcare, transportation and for many general, basket of goods items. So, as the interviewee shared, Americans get very expensive, low quality internet. She cited comparisons to Hong Kong and South Korea, where there are multiple providers of fiber-optic coaxials for all at, say, $20 per month, compared to $200 in NY, where Time Warner has the monopoly. (Here in the US, 19 M. are off the grid, and maybe so much so that they’ll just have to get satellite.) For most, there is Copper/coaxial cable connections. The result is a digital divide, a crisis, when ⅓ of the country can’t reasonably afford internet and all of us are falling behind the rest of the world. (Tangentially, the US was recently given a D+ for infrastructure by a ASCE, which is tenable. Just today I nearly fell down stairs, hauling my daughter’s stroller, because the Muni escalator and elevators were broken down, yet again.) For applying for jobs, doing homework, for the many other tasks that essentially require internet access nowadays, the poor will be greatly disadvantaged and penalized. The America that I know and love can do so much better. Internet should be a utility commodity. For these ideas, one is considered a democratic socialist. Ayn Rand Republicans like SoH Paul Ryan are the ruin of our country.



Tuesday, March 7, 2017

Service Learning

I will volunteer, at least once or twice weekly, within two separate Computer Science classes at Martin Murphy Middle School in southern San Jose, California, to tutor the students enrolled and assist the CS teachers, one of whom is Mr. David Martinez. Mr. Martinez has requested I begin this week, when I'll go on site for several hours and, in so doing, return to the middle school that I myself attended.

Saturday, February 25, 2017

Java Final's Week

Q & A
  • They say hindsight is 20/20, what advice would you give to the next cohort regarding this course?   
If I were to restart this course anew, I would request that pair programming occur within some app that allows for multiple users to view and control simultaneously the entire screen of code.  Screensharing by a driver precludes others but the driver from having unfettered access to or seeing of all the code, so that it's not readily possible to refer back or forth to other areas one may wish to view for clarification and understanding.  With that said, my colleagues were extremely professional and polite and would not hesitate to stop to allow me any view I requested, but this was only partially helpful and time consuming for all.

I must say, were it not for such an excellent team as I was fortunate to have, the assignments would have been far more difficult.  Yet, since I have a newborn baby for which to care and scheduling appointments is nearly impossible -- I must work in between her demands and can only focus while she is happy -- I would probably have requested an exception: that I work alone on all assignments -- that would have been far, far less stressful for me in terms of not having to schedule baby sitters and appointments.  ...This is simply an additional challenge for me, at present.
  • How much do you envision using the skills you gained in this course in your career?
It would be fantastic to obtain a job programming with Java because I really enjoy doing so, perhaps more than any other language.  Similarly, using Android Studio to program a simple app. was great -- absolutely the highlight of this course for me.  I'll continue to study it and its tools.

Tuesday, February 21, 2017

A Simple Android App

I had never created an app before this week's assignment, whether for Android or iPhone, so installing Android Studio and setting out to produce a simple, single activity for the Nexus 5 was really great.  I think it went pretty well.  Learning a new IDE can be frustrating; for example, I encountered some issues trying to refactor my module's name, which seemed to break everything, so I eventually began anew.  There might have been some file pathways that were written incorrectly or package titles that were off -- really, I'm not entirely certain.  Ultimately, however, building an AVD was very cool, and after I got the SDK configured, and every time the source did produce, I felt so, very excited, and ooohhhed and awwwed quite a lot at the marvelous virtual demonstration.  It's very impressive.  Otherwise, I spent a lot of time reading the various properties available, becoming accustomed to dragging and positioning the widgets, extracting resources and various other things, involved with developing for Android.  Overall, it was very impressive, very cool.

With respect to developing a recreational app, since in my spare time, I enjoy gardening, specifically, growing and planting native trees, especially Quercus Lobata, which is California's endemic Valley Oak..., I would like to build an app that allows for some geocaching of planting sites.  I doubt any universities would be interested because massive planting operations probably play a numbers game, simply planting specimens with the reasonable expectation that a fraction will survive.  Yet, then again, some naturalists might wish to return to examine the results, so it could, potentially, be academically useful in this way.

Thursday, February 16, 2017

UML Diagrams

My experience with Unified Modeling Language (UML) diagrams began with this program.  I had never encountered them in the workplace.  They're a nifty tool for visualizing the organization of an application and I'm now using the ones in Eclipse's side bar to better navigate through my programs.

I had never done multithreading in any language before this week, so that was neat.  We used Thread's run and sleep methods to pause one process for concurrent processing with another -- namely, the timer.

I didn't find patterns to be that helpful because our team had done a lot of encapsulation of the code we transferred.  It seemed to oversimplify it.  Yet, I wonder how that might change if I were to begin writing the program anew.

Tuesday, February 7, 2017

GUI Using Swing

This week we used the Swing and AWT packages for building event-driven GUIs and ultimately a card game. I think that coding the Swing elements in Java would be more difficult compared to some other languages for the same reasons that Java is generally more challenging -- the syntax and implementation requirements, for example, using the correct operators or declarations and implementing the right interfaces. Passing in objects as arguments to methods can also be challenging in implementation, as well as choosing the right layout.

It makes sense to learn to code through the console first because it's helpful for debugging.  Also, seeing the results print to the console helps one make certain there aren't logical errors.  Interactions through a GUI can come along afterward.


Tuesday, January 31, 2017

Polymorphism, Abstract Classes and Interfaces

This week, the focus of our studies are polymorphism -- another pillar, if you will, along with inheritance and encapsulation, of object-oriented programming -- abstract classes and interfaces.

Inheritance allows for the defining of general classes, called superclasses, which can then be extended to a variety of specialized, instance-of subclasses.  Basically, the concept of polymorphism is when any one of those subtypes, belonging to the latter, subclass, can be passed into the superclass' methods or work with the superclass' variables.  Since the subtype is an instance of the supertype, (and not vice-versa), its many forms, created through subclasses, can each be used with it.  It's probably easiest to describe with an example, such as a geometric object superclass that has subtypes of circles or squares.  These might each have instances that could be passed into the superclass GeometricObject's methods, for example, maybe a color setter.  Or, their member properties could refer to the superclass' data definitions, such as one for color.  I think polymorphism can also refer to method overriding, where you have similar method definitions in each of the subtypes, but different executions in each version.

The abstract class cannot have any concrete  types, no instantiations, so it would never be called or implemented with the new object operator.  The purpose of the abstract class is to define these common features, and allow reuse and convenient interaction.  For example, a circle and square's overriden getArea method allows for an additional method of comparison of this data that was achieved through different calculations.

While an abstract superclass defines common behavior and features for connected, related subclasses, the interface defines behavior for any class, whether or not it's related to it.  Java provides some interfaces such as Comparable and Clonable, which a variety of other classes, whether pre-defined in the Java library or homemade, can implement.

Tuesday, January 17, 2017

OOP



OOP is not in all languages, and I have used some that follow the procedural paradigm, including JavaScript.   I've only used PHP5, which was updated for OOP.  Although, while Javascript was initially a functional language, it too is changing with ES6 (EcmaScript6).   If I am not mistaken, EcmaScript 4 does not have a true Object Oriented paradigm, although most of its constructs are objects.  I'm essentially doing procedural programming with these, when I'm not setting up classes and using the concepts of OOP.


What was your experience?

Most of my experience with Object Oriented thinking is from Java. Through that language, I learned of classes, which define the properties and behaviors of objects, as well as encapsulation and abstraction, where classes are separated and hidden from their descriptions, calling/driving or their use, as well as other concepts like inheritance, where multiple classes can pass down features. Overall, data and methods are coupled with objects; the objects are the focus, as well as operations performed on those objects.  This is in contrast to procedural programming, where methods are designed and the focus of execution.


How extensively have you used OOP outside of the classroom?

It's my goal to apply what I've learned when I code with other languages, such as Python. There is room for improvement for me, in this respect.


Are you experienced with UML diagrams and do they help?

I've encountered a type of UML diagram using SQL, but have never employed such to solve a programming challenge. Indeed, another goal of mine is to better plan my builds, using algorithms, and, yes, a UML diagram, perhaps, a class based one.


This week, the programming assignment, Casino, was a lot of fun.  I enjoy gaming.  It was a good refresher for a lot of the concepts I had studied in the past, and I enjoyed working with my team.

Tuesday, January 10, 2017

Java!

This semester, I am reunited with Java and the Eclipse IDE after a year-long break.  At Foothill College, I attended a three-part course series that covered object-oriented programming methodologies through advanced data structures and algorithms.  Everyone I spoke to seemed to agree that it was a rigorous, challenging and enjoyable series.

This time around, while at CSUMB, I will focus on picking up points that I missed the first time around, solidifying my understanding of the language and object-oriented programming in general, writing more elegant, neater code, better committing to memory the syntactical and semantic details of the language, so as to permit writing/programming without having to frequently refer to notes or a text, as well as more freely and correctly articulating what I've been learning.  Furthermore, I'd like to learn to code for Android.

Reviewing the text and notes of module 1, I am reminded of a lot, remarkably, for some examples, that strings are non-primitive data types/objects with a variety of useful methods like .length(), .toLowerCase or .indexOf().  I was also reminded of type coercion for ints defined as floats, but that the opposite is illegal, and of truncation that occurs when casting floats to int.  Thinking further about some of the code I've written in the past in terms of its being part of a library, for example, System or Scanner, with, for example, .out and .print as the formers' methods, my understanding had been a little more shallow with my simply using the code and not realizing where it fits in object-oriented programming in a broader way.  Lastly, public/private and static membership, and where to place variable's definitions, are all concepts I am reviewing.

There is a lot more to think about and review, and I am glad to be studying Java again because it's interesting and informative for programming, over all.  Since I am studying to become a software engineer, the structural precision and detail that Java requires is really conducive to learning object-oriented coding concepts and structure.  I've studied several high-level languages at this point, including JavaScript, Python and PHP, and am becoming more and more proficient.  How much so?  I must laugh and shake my head in disbelief every time someone asks me, 'you know that Java and JavaScript are unrelated, right?'  For God's sake, I should hope so!  Still, I am invariably humble, so would rank myself as intermediate in my skills, rightly or wrongly.  I mean, compared to whom.  Furthermore, I am slow, even if I can produce debugged, working programs.  As mentioned in the syllabus, some students will take two hours to complete an assignment, while, others, ten.  To this end, a good goal will be for me to increase my speed, too, during this semester.